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

NAS: centrale plek voor je netwerk gebruikers, toegankelijk voor alle systemen

In een netwerk met een NAS en diverse werkstations ben je het gauw zat om iedere keer onderhoud te plegen aan de diverse gebruikers. Helemaal als je vaak virtuele (of tijdelijke) machines gebruikt en iedere keer je weer afvraagd wat het wachtwoord was.
Een opzet met LDAP als (universele) centrale plek waar gebruikers beheerd worden is dan een oplossing. De nieuwe machine hoeft alleen maar te verbinden met LDAP en je bent in de lucht. Wijzigingen vinden centraal plaats dus alles gaat automatisch mee.

Dit artikel gaat niet in op de discussie waarom LDAP, er zijn er meerdere: wins, NIS, radius,.... De beste oplossing zal voor iedere situatie verschillend zijn. In dit geval is gekozen voor de meest bekende en universele oplossing. Voor zowel windows, OS X, unix, linux bestaan er diverse oplossingen die werken met LDAP.

prerequisite:
	Server:ArrayDS207 NAS, bootstrapped met ipkg en sudo.
		netwerk domein is mijndomein.local en een prive netwerk
		- server FQN naam	  : nasser.mijndomein.local  (192.168.1.1)    (hostname -f)
		- /opt/etc/slapd.conf     : server config file
		- /opt/etc/ldap.conf      : client config file
		- /opt/init.d/S58openvpn  : server startup script
	Client: Ubuntu 16.04 LTS machine
	Network: domain.local
Stappenplan:
	1. install (open)LDAP server
	2. laad gegevens in de ldap server 
   	3. test de ldap server
	4. installeer een remote client

1. installeer openldap op de server

Misschien wel de snelste en makkelijkste stap, login op je NAS en installeer openldap:
	sudo ipkg update
	sudo ipkg install openldap openssl
pas de configuratie in /opt/etc/openldap/slapd.conf aan en zet wat toegangsrechten, pas ldapadmin/mijndomein en local aan naar jouw specifieke wensen:
	#aantal threads voor het ldap proces
	threads 3
	#basis toegangs instellingen 
	access to attrs=userPassword                                      
	   by self write                                                  
	   by anonymous auth                                              
	   by dn.base="cn=ldapadmin,dc=mijndomein,dc=local" write
	   by * none
	access to *                                                       
	   by self write                                                  
	   by dn.base="cn=ldapadmin,dc=mijndomein,dc=local" write
	   by * read

	suffix          "dc=mijndomein,dc=local"                                                   
	rootdn          "cn=ldapadmin,dc=mijndomein,dc=local"

	#gebruik ldappasswd om deze string te genereren        
	rootpw          {SSHA}xxxxxxxxxxxxxxxxxxxxxx
                                                                   
	# Indexen
	index   objectClass     eq
	index   uid             pres,sub,eq
	index   uidNumber       pres,eq
	index   mail            pres,sub,eq,approx
	index   cn              pres,sub,eq,approx
	index   sn              pres,sub,eq,approx
	index   dc              eq
Vervolgens genereer de self-signed server certificaat met "openssl req -newkey rsa:1024 -x509 -nodes -out server.pem -keyout server.pem -days 365". Let op voor de CN (Common Name), vul de FQDN ("hostname -f") in. Voeg de TLS/SSL opties toe aan slapd.conf, de ldap server vraagt niet om een client certificaat.
#openssl req -newkey rsa:1024 -x509 -nodes -out server.pem -keyout server.pem -days 3650
TLSCipherSuite HIGH:MEDIUM:+TLSv1:!SSLv2:+SSLv3 
TLSCACertificateFile  /opt/etc/openldap/keys/server.pem           
TLSCertificateFile    /opt/etc/openldap/keys/server.pem
TLSCertificateKeyFile /opt/etc/openldap/keys/server.pem
#vraag niet om de client certificaat
TLSVerifyClient never
voeg voor de client de volgende regel toe aan de ldap.conf
#server certificate
TLS_CACERT            /opt/etc/openldap/keys/server.pem
#demand is standaard: vereis een goed/geldig certificaat
#TLS_REQCERT demand
Controleer nu de start instellingen voor het process (slapd, de openldap server) zelf in. Dit is afhankelijk van je systeem op 1 van de volgende plaatsen: (/opt)/etc/defaults, (/opt)/etc/init.d/S58openldap. In mijn geval (DS207 met ipkg) is dit /opt/etc/init.d/S58openldap en zorg dat alleen het "ldaps" protocol is geactiveerd. Dit zorgt ervoor dat "openldap over ssl" actief is op poort 636 op het interne netwerk 192.168.1.0/255.255.255.0, dit betekent ook dat het verkeer tussen server en client encrypt is voor eventuele sniffers. Dus controleer of slapd gestart wordt met deze optie:
	-h ldaps://192.168.1.1/
en met de debug optie voor wat extra info tijdens het testen:
	-d 1 -h ldaps://192.168.1.1/
je kan nu de openldap server starten, hoewel hij nog geen info bevat zal hij wel connecties beantwoorden:
	#test1: geeft blanco prompt, stoppen met ctrl-c, 
	#       als deze niet lukt zet poort 636 open 
	#       of controleer slapd debug output
	telnet localhost 636
	#test2: ssl/tls werkend, geeft certificaten weer
	openssl s_client -connect localhost:636 -showcerts
Als het goed is heb je nu een werkende, maar lege, openldap server.

Importeer gebruikers

We gebruiken de migration tools van PADLE , deze zijn hier te downloaden PADL-migration-tools .
	cd /opt/etc/openvpn
	wget ftp://ftp.padl.com/pub/MigrationTools.tgz
	tar xvf MigrationTools.tgz
	cd MigrationTools-47
pas in de /migration-tools/migrate_common.ph de volgende regels aan:
	# Default DNS domain
	$DEFAULT_MAIL_DOMAIN = "mijndomein.local";
	# Default base
	$DEFAULT_BASE = "dc=mijndomein,dc=local";
en start de migraties:
	sudo ./migrate_passwd.pl /etc/passwd > passwd.ldif
	sudo ./migrate_group.pl  /etc/group  > group.ldif        
note: de wachtwoorden zijn omgezet, maar standaard gebruikt ldap sha en niet crypt. Hou hier dus rekening mee! Je kan dit controleren in de ldif files, de wachtwoorden beginnen met {crypt} of {SHA}. Anders meld de log dat je wel verbinding hebt, maar je login gaat altijd fout en je krijgt een generieke "pam_ldap: error trying to bind (Invalid credentials)" of een "cannot bind (-1)" error. In mijn geval was het sneller om de paar wachtwoorden opnieuw aan te maken met ldappasswd ipv dit verder uit te zoeken.

schoon de ldif files op en verwijder alle systeem accounts en behoud alleen de gebuikersaccounts, doe hetzelfde bij de groepen.

Maak de file group_user.ldif met deze inhoud:
#vervang mijndomein en local
dn: ou=People, dc=mijndomein, dc=local
ou: People
objectclass: organizationalUnit

#vervang mijndomein en local
dn: ou=Group, dc=mijndomein, dc=local
ou: Group
objectclass: organizationalUnit

Importeer de bestanden in ldap:
	ldapadd -x -W -D 'cn=ldapadmin,dc=mijndomein,dc=local'  -f group_user.ldif
	ldapadd -x -W -D 'cn=ldapadmin,dc=mijndomein,dc=local'  -f passwd.ldif
	ldapadd -x -W -D 'cn=ldapadmin,dc=mijndomein,dc=local'  -f group.ldif

Test de ldap server

En klaar is je ldap server. Je kan hem testen met deze zoekactie. Hierin is uid=* de query die alle records met het veld uid weergeeft (alle gebruikers):
ldapsearch -x \
       -D 'cn=ldapadmin,dc=mijndomein,dc=local' \
       -w "wachtwoord uit slapd.conf" \
       -b "dc=mijndomein,dc=local"\ 
       -s sub "(uid=*)"
Vul in de /etc/ldap.conf (op de server) nog even je gegevens in zodat je niet altijd alles hoeft in te vullen Dit in /opt/etc/openldap/ldap.conf bespaart de -b optie:
BASE	dc=mijndomein, dc=local
URI	ldaps://localhost
Dit in ~/.ldaprc bespaart de -D optie:
BINDDN cn=admin,dc=mijndomein,dc=local
De query wordt met de -W (vraag om wachtwoord):
ldapsearch -x  -W -s sub "(uid=*)"

installeer een remote ldap client

Ubuntu/Debian ldap client windows-ldap-client

Update op |9 jan 2017 | no comments


Rose - Copyright © 2011, designed by teNijenhuis.net
9|362