Sluit deze pagina af en ga terug naar de vorige pagina
9 jan 2017 | 1 reactie(s)

NAS: verbind je desktop met ldap

Dit artikelbeschrijft de stappen die je moet doorlopen om een ubuntu/debian client te verbinden met een werkende LDAP server over ssl/tls. Hierna kun je op je systeem inloggen met de gebruikers uit ldap. Hiernaast gebruiken diverse processen (naast de login/pam) gebruikers informatie die traditioneel in de locale bestanden staan. Hiervoor moeten we een name server (nss) en pam (libpam) opzetten met ldap ondersteuning.

We gebruiken hiervoor een module voor pam (pam_ldap) en de name service pakket nslcd (naast de normale nscd) die beide verbinding maken met de ldap server. Hiernaast verzorgt de nslcd process caching functionaliteit.

Note: voor de name service zijn 2 paketten beschikbaar die je niet moet verwarren: libnss-ldapd en libnss-ldap. De laatste is de oude en meest gangbare pakket en de eerste een nieuwere variant. Wij maken gebruik van libnss-ldapd om een bug in gnuTLS te omzeilen waardoor je verbindingsproblemen krijgt met SSL/TLS (alle programma's die setuid gebruiken zoals ssh, sudo, apache2 etc.). Op diverse forums worden deze een beetje door elkaar gegooid: pas hiervoor op.

Voor de apple gebruikers is de werkwijze eigenlijk identiek, uiteindelijk is dit ook een BSD machine. Alleen heeft apple een andere/geen package syteem en zal iets meer GUI gedreven zijn. De opzet is identiek, je zal alleen in de GUI moeten zoeken naar de juiste instellingen ;) Onderaan is een verkorte werkwijze voor OS-X 10.10.

prerequisite:
	Server:ArrayDS207 NAS, met openvpn (ssl op poort 636)
		netwerk domein is mijndomein.local en een prive netwerk
		- server FQN naam	  : nasser.mijndomein.local  (192.168.1.1)     (hostname -f)
	Client: Ubuntu 16.04 LTS machine
		- client FQN naam	  : desktop.mijndomein.local (192.168.1.8)     (hostname -f)
		- /etc/nslcd.conf         : nameserver config file
		- /etc/ldap/ldap.conf     : client config file
		- /etc/ldap.conf          : pam client config file
		- /etc/ldap.secret        : pam client secret file
Stappenplan:
	1. controleer ldap verbinding
	2. installeer pam/nslcd paketten
	3. verbind met ldap server
   	4. roadwarrior opzet voor labtop's

1. controleer ldap verbinding

	#geeft een blanco prompt indien goed, ctrl-c om te stoppen
	telnet "192.168.1.1" 636
	#geeft de certificaten weer 
	openssl s_client -connect "192.168.1.1:636" -showcerts
Indien deze 2 werken heb je verbinding. Als de eerste niet werkt controleer dan je firewall of start de ldap server. En als de tweede niet werk configureer de ldap server over ssl (poort 636). Installeer de ldap utils
	sudo apt-get install ldap-utils
Zet dit in de /etc/ldap/ldap.conf zodat we niet altijd alles hoeven in te kloppen. En gebruik bij URI het volledige adres, gebruik je IP nr dan moet deze terug resolven naar het volledige adres, en dit adres moet overeen komen met de CN naam van het certificaat, anders krijg je een "ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)" en doen je een enable je debugging met ldapsearch ( -d 1) krijg je een "TLS: hostname (192.168.1.1) does not match common name in certificate (nasser.mijndomein.local)". Zorg er dus voor dat deze matchen:
    BASE	dc=mijndomein, dc=local
    URI		ldaps://nasser.mijndomein.local
    TLS_CACERT  /etc/ssl/certs/ca-certificates.crt
Zet dit in de ~/.ldaprc, aanmaken als hij niet bestaat. Wederom zodat we niet altijd alles hoeven in te kloppen:
	BINDDN cn=admin,dc=mijndomein,dc=local
controleer de certificaten, er zal ongetwijfeld een process zijn om het automatisch toe te voegen, maar ldapsearch doet dit straks niet. Dus ik voeg hem met de hand toe, let wel dit bestand is een lange lijst met allemaal certificaten, controleer of deze er al niet tussen staat.
openssl s_client -connect "192.168.1.1:636" -showcerts
#kopieer alles beginnende met -----BEGIN CERTIFICATE----- tot -----END CERTIFICATE----- (dus inclusief deze 2 regels)
#plak dit in /etc/ssl/certs/ca-certificates.crt (TLS_CACERT in /etc/ldap/ldap.conf)
controleer de verbinding, je krijgt nu een lijst met gebruikers. Zoek nu de test gebruiker op die je wil gaan gebruiken, is hij er niet: maak hem dan aan op de ldap server.
	#voer een query uit, wachtwoord is ingevuld op de server in de slapd.conf
	ldapsearch -x  -W -s sub "(uid=*)" 
Als je een positief resultaat krijgt dan werkt LDAP en kan hij vanaf deze machine reageren op queries. Nog een kleine controle en we kunnen pam en nss gaan installeren. controleer het wachtwoord type (sha/crypt), indien geen {SSHA} update dan het wachtwoord van de test gebruiker in LDAP naar SHA.
	#dit levert een string beginnende met {SSHA} 
	ldapsearch -x  -W -s sub "(uid=testgebruiker)" userPassword | grep userPassword| awk -F":: " '{printf "%s\n", $2}' | base64 -d

2. installeer ldap

	#basis installatie
	sudo apt-get install ldap-auth-client nscd
	#vervang libnss_ldap door libnns_ldapd
	sudo apt-get install libnss-ldapd
In dit process worden een aantal gegevens gevraagd, antwoord hierop het volgende:
LDAP server Uniform Resource Identifier:   	ldaps://nasser.mijndomein.nl
Distinguished name of the search base:     	dc=mijndomein,dc=local
LDAP version to use:                       	3
Make local root Database admin:            	yes
Does the LDAP database require login?      	yes
LDAP account for root:			   	cn=ldapadmin,dc=mijndomein,dc=local
LDAP root account password:                	xxxxxxx (zie slapd.conf op de server)
Unprivileged database user:            	   	cn=ldapadmin,dc=mijndomein,dc=local
voor sudo apt-get install libnss-ldapd: 
LDAP server URI: 				ldaps://nasser.mijndomein.nl
LDAP server search base: 			dc=mijndomein,dc=local
Check server's SSL certificate: 		demand
Name services to configure: 			group password shadow (minimaal)
Nu kun je eigenlijk in /etc/pam.d/common-auth een regel vinden met pam_ldap.so en in /etc/nssswitch.conf zie je bij password, shadow en group ook ldap staan. Voer nu pam-auth-update uit en controleer of LDAP authentication geactiveerd is. Als je de complete home directory met alle gebruikers mappen al centraal hebt staan en overal mount (en dus alle home folder altijd beschikbaar zijn) dan kan je volgende stap overslaan. Maar gebruik je locale home/gebruikers mappen dan moeten die automatisch aangemaakt worden als je voor de eerste keer op die machine inlogd. Anders kom je nog niet verder als het invullen van je wachtwoord. Ga weer naar pam-auth-update en als er een regel is met "activate mkhomedir" of iets wat slaat op home folder aanmaken: deze ook activeren. Bestaat deze niet maak dan /usr/share/pam-configs/my_mkhomedir aan met deze inhoud:
Name: activate mkhomedir
Default: yes
Priority: 900
Session-Type: Additional
Session:
        required                        pam_mkhomedir.so umask=0022 skel=/etc/skel
start nu opnieuw pam-auth-update op en activeer "activate mkhomedir" Activeer ssl voor pam_ldap, en controleer de waardes in ldap.conf. In principe zijn ze goed (opgegeven tijdens installatie).
#ga naar /etc/ldap.conf en zet (of voeg toe): ssl on
sudo nano /etc/ldap.conf
Stel nu nss in en controleer /etc/nslcd.conf op deze waarden, en pas ze aan (maak ze aan) indien nodig:
binddn cn=ldapadmin,dc=mijndomein,dc=local
bindpw xxxxxxxxxxxxx
rootpwmoddn cn=ldapadmin,dc=mijndomein,dc=local
rootpwmodpw xxxxxxxxxxxxxx
ssl on
tls_reqcert demand
tls_cacertfile /etc/ssl/certs/ca-certificates.crt
controleer of je gegevens krijgt uit ldap:
sudo getent passwd 
en je bent klaar, tenminste als dit een desktop dit altijd in verbinding met de ldap server staat. Voor de labtop gebruikende roadwarriors moeten we nog wat meer doen.

3. Roadwarriors en labtop opzet


Als je systeem niet altijd contact kan maken met ldap, of als de ldap server niet een erg snelle response tijd heeft, dan moet je nog wat extra's doen. Tenminset als je wil dat je systeem nog een beetje vooruit te branden is. Zelf een eenvoudige 'ls' kan ervoor zorgen dat je systeem nagenoeg stil valt. Om te beginnen is het (altijd) verstanding om alle systeem accounts lokaal te houden en niet via ldap, oftwel zet alleen de 'human' accounts in ldap. Of tref een voorziening voor de beschikbaarheid en/of de snelheid van de ldap server, maar voor een thuis situatie schiet je dan je doel voorbij. Mocht je server af en toe een lage responsetijd hebben, en dat zal bij een nas ongetwijfeld het geval zijn, dan kan je wat aan de timeout waardes instellen. Maar voor labtops die af en toe gewoon buiten bereik zijn van de ldap server is het verstandig om de ldap gevens te cashen (credential cashing).

lokale account


Opzich vrij eenvoudig, gewoon alle systeem gebruikers in je /etc/passwd en /etc/group laten staan en de rest naar de ldap server. Daarnaast zetten we de timeout values:
#nslcd.conf en ldap.conf (beide!) instellingen:
#wacht 3 seconden en ga ervan uit dat server niet meer reageert (standaard 10)
timelimit 3
#wacht 3 seconden en beschouw de server onbereikbaar (standaard 10)
bind_timelimit 3
bind_policy soft	
Maar je zult zien dat bij bepaalde commando's je systeem nog steeds heel slecht reageert en traag wordt. Dit wordt veroorzaakt door de groups rechten die worden namelijk nog steeds opgevraagd bij de ldap server. Dit kun je voorkomen door de nslcd server te vertellen dat voor de lokale gebruikers (de systeem accounts) er geen groups informatie opgevraagd hoeft te worden in ldap. Nu zijn hier 2 verschillende methodes voor: 1 ervan is dat het start/stop process automatisch een regel in nlscd.conf plaatst (met alle lokale gebruikers) of je maakt gebruik van een instelling van nslcd zelf. De eerste wordt bepaald door de distributie die je gebruikt, wij doen het laatste: de ALLLOCAL waarde wordt door nslcd ingevuld met de gebruikers uit /etc/passwd.
#voorkom dat groups informatie wordt opgevraagd voor systeem accounts
#nslcd.conf en ldap.conf:  
nss_initgroups_ignoreusers ALLLOCAL
Voor systemen die af en toe helemaal geen contact kunnen maken met de ldap server gaan we lokaal een cache opzetten die de groups/gebruikers info voor een bepaalde tijd lokaal opslaat waardoor er geen contact met de ldap server gemaakt hoeft te worden.
#installeer nss-db en caching credentials
apt-get install nss-updatedb libnss-db libpam-ccreds	
#creeer de nss-lib db
sudo nss_updatedb ldap
#pas nsswitch.conf aan:
passwd:         files ldap [NOTFOUND=return] db
group:          files ldap [NOTFOUND=return] db
Nu worden de gebruikers eerst opgevraagd in de files (/etc/passwd), dan in ldap en bij een probleem (NOTFOUN=return) gaat hij meteen door naar de cache db. Nu is eea te testen door je netwerk uit te schakelen (ifdown eth0 of gewoon de wifi knop op je laptop) en 'getent passwd' moet nog steeds resultaat geven (met ldap info). Eigenlijk is dit voldoende en zijn de instellingen in nslcd.conf zoals hiervoor beschreven niet nodig, echter een bug zorgt ervoor dat deze instellingen nog steeds noodzakelijk zijn. Nu de credentials/wachtwoorden:
#activeer de ccreds module in
sudo pam-auth-update
#log even in als een ldap gebruiker, dan worden de credentials opgeslagen en zichtbaar via:
sudo cc_dump
let op: dit werkt alleen met SSHA wachtwoorden in ldap. En klaar is je roadwarriors opzet met centrale opslag voor je gebruikers.

5. Mac OS-X 10.X

Voor de diverse linux distro's is bovenstaande werkwijze gelijk alleen de benodigde packager (apt,yum,..) en de locatie van configuratie files en instellingen verschillen (packages zijn gelijk). Voor Apple (een BSD/Unix variant) die een beetje GUI gedreven is hier de werkwijze om te koppelen met een ldap server, de roadwarrior/labtop aanpassingen staan er nog niet bij:
    Ga naar "System Preferences"
    Selecteer "Users & Groups"
    Selecteer het slotje onderaan het scherm en geef de admin credentials
    Selecteer "Login Options" 
    Vul bij "Display login window as:" de credentials in
    Zet de optie "Show fast user switching" uit
    Klik op "Join…" knop button bij Network Account Server
    Klik op "Open Directory Utility…"
    Selecteer het slotje onderaan het scherm en geef admin credentials 
    Selecteer "LDAPv3" en klik op het potloodje
    Klik op " pijl rechts" om de opties te zien
    Selecteer "New" 
    Vul bij server naam 192.168.1.1 in (de ldap server)
    Selecteer de opties "Encrypt using SSL", "Use for authentication" en "Use custom port 636" 
    Klik op handmatig
    Type "nasser ldap" voor de configuratie naam en geef een enter
    Verander de "LDAP Mappings" naar "Custom"
    Voor de "Search Base Suffix" tik "dc=mijndomein, dc=local", klik dan op oke.
    Klik op de "Edit…" knop
    In de "Connection" tabblad, zet het vinkje bij "Use custom port" uit
    In de "Search & Mappings" tabblad, klik op + en voeg "Users" toe
    Onder "Users" voeg het volgende toe:  
	    Password
	    PrimaryGroupID
	    RealName
	    RecordName
	    UniqueID
	    UserShell
     
    Selecteer "Users" in het linker gedeelte, en in het rechter gedeelte voeg "inetOrgPerson" toe 
    Selecteer "Passwordin" het linker gedeelte, en in het rechter gedeelte voeg "userPassword" toe
    Selecteer "PrimaryGroupID" het linker gedeelte, en in het rechter gedeelte voeg "#5000" toe
    Selecteer "RealName" het linker gedeelte, en in het rechter gedeelte voeg "cn" toe
    Selecteer "RecordName" het linker gedeelte, en in het rechter gedeelte voeg "uid" toe
    Selecteer "UniqueID" het linker gedeelte, en in het rechter gedeelte voeg "uid" toe
    Selecteer "SuserShell" het linker gedeelte, en in het rechter gedeelte vul "#/bin/bash" in     
    Onder de "Security tab" selecteer "Use authentication when connecting" en je ldap admin credentials in onder "Distinguished Name" en "Password"
    Klik op OK
    controleer en zet de ldap connectie aan, en klik op OK
    Klik op "Search Policy" 
    In de "Authentication" tabblad, selecteer "Custom path" in de "Search" pulldown menu
    Klik de plus knop 
    Selecteer /LDAPv3/nasser.mijndomein.local en klik op "Add" 
    Klik op "Apply"
    Open een terminal
    Tik in: "sudo su" en vul je root wachtwoord in
    Voor de volgende opdrachten in de terminal uit:
	
        /usr/libexec/PlistBuddy -c "add ':module options:ldap:Denied SASL Methods:' string CRAM-MD5" /Library/Preferences/OpenDirectory/Configurations/LDAPv3/nasser.mijdomein.local.plist
        /usr/libexec/PlistBuddy -c "add ':module options:ldap:Denied SASL Methods:' string NTLM" /Library/Preferences/OpenDirectory/Configurations/LDAPv3/nasser.mijdomein.local.plist
        /usr/libexec/PlistBuddy -c "add ':module options:ldap:Denied SASL Methods:' string GSSAPI" /Library/Preferences/OpenDirectory/Configurations/LDAPv3/nasser.mijdomein.local.plist
    Herstart je systeem
        

Update op |9 jan 2017 | no comments


Rose - Copyright © 2011, designed by teNijenhuis.net
28|349