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 opensslpas 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 eqVervolgens genereer de self-signed server certificaat met "openssl req -newkey rsa:1024 -x509 -nodes -out server.pem -keyout server.pem -days 365".
#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 nevervoeg 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 demandControleer 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 -showcertsAls 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-47pas 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.ldifnote: 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://localhostDit in ~/.ldaprc bespaart de -D optie:
BINDDN cn=admin,dc=mijndomein,dc=localDe 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-clientUpdate op |9 jan 2017 | no comments