LDAP è l'acronimo di
Nel concetto OSI, l'X.500 è un modello per i Directory Service. Contiene le definizioni per i namespace ed i protocolli per la ricerca e l'aggiornamento delle directory. Comunque, X.500 è stato trovato essere eccessivo in molte situazioni. Entriamo in LDAP. Come l'X.500, provvede un modello data/namespace per le directory ed anche un protocollo. Comunque, LDAP è progettato per essere eseguito direttamente al di sopra dello stack TCP/IP. Si pensi a LDAP come una versione più snella di X.500.
Una directory è un database specializzato progettato per frequenti richieste ma infrequenti aggiornamenti. Al contrario di database generali, non contiene il supporto per transazioni o funzionalità di roll-back. Le directory sono facilmente replicabili per incrementarne la disponibilità e l'affidabilità . Quando le directory vengono replicate, sono permesse inconsistenze temporanee finché non divengono eventualmente sincronizzate.
Tutte le informazioni all'interno di una directory sono strutturate gerarchicamente. Inoltre, se si vogliono inserire dati dentro una directory, la directory deve sapere come memorizzare questi dati all'interno di un albero. Si veda l'esempio di una finta compagnia e ad un albero stile Internet:
dc: com
|
dc: genfic (Organisation)
/ \
ou: people servers (Organisational Units)
/ \ ..
uid: .. jhon (OU-specific data)
Dato che non sono stati introdotti dati nel database in questo schema ascii, ogni nodo di questo albero deve essere definito. Per dare un nome ad ogni nodo, LDAP usa un naming scheme. Molte distribuzioni LDAP (incluso OpenLDAP) contengono già un certo numero di schemi predefiniti (generalmente approvati), come inetorgperson, uno schema frequentemente usato per definire utenti.
Utenti interessati sono incoraggiati a leggere la
LDAP può essere usato per vari scopi. Questo documento si focalizza sulla gestione centralizzata degli utenti, mantenendo tutti gli account utente in una singola collocazione LDAP (il che non significa che sia alloggiato su un singolo server, LDAP supporta scalabilità e ridondanza), sono comunque raggiungibili anche altri obiettivi usando LDAP.
Prima di tutto occorre installare tutti i componenti necessari sul proprio server:
# emerge openldap pam_ldap nss_ldap migrationtools # chown ldap:ldap /var/lib/openldap-ldbm /var/lib/openldap-data /var/lib/openldap-slurp
Editare
# Includere i data schemes necessari include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema# Usare md5 per fare l'hash delle password password-hash {md5}# Definire le proprietà SSL e TLS (opzionale) TLSCertificateFile /etc/ssl/ldap.pem TLSCertificateKeyFile /etc/openldap/ssl/ldap.pem TLSCACertificateFile /etc/ssl/ldap.pemPiù avanti nel file... database ldbm suffix "dc=genfic,dc=com" rootdn "cn=Manager,dc=genfic,dc=com" rootpw {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ== directory /var/lib/openldap-ldbm index objectClass eqSi può avere una password cryptata come quella sopra, con slappasswd -h {Md5}
Editare il file di configurazione di LDAP:
# nano -w /etc/openldap/ldap.confAggiungere... BASE dc=genfic, dc=com URI ldaps://auth.genfic.com:636/ TLS_REQCERT allow
Si generi ora un certificato SSL per rendere
sicura la directory. Occorre rispondere alle domande che si ricevono
nel miglior modo possibile. Alla richiesta del
# cd /etc/ssl # openssl req -config /etc/ssl/openssl.cnf -new -x509 -nodes -out \ ldap.pem -keyout /etc/openldap/ssl/ldap.pem -days 999999
Editare ora
OPTS="-h 'ldaps:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"
Far partire slapd:
# /etc/init.d/slapd start
Si può fare un test col seguente comando:
# ldapsearch -D "cn=Manager,dc=genfic,dc=com" -W
Se si riceve un errore, provare ad aggiungere
Si migreranno ora gli account utente. Aprire
$DEFAULT_BASE = "dc=genfic,dc=com"; $EXTENDED_SCHEMA = 1;# Commentate queste linee a meno che non abbiate un mail sheme caricato #$DEFAULT_MAIL_DOMAIN = "genfic.com"; #$DEFAULT_MAIL_HOST = "mail.genfic.com";
Eseguire quindi gli script per la migrazione:
# export ETC_SHADOW=/etc/shadow # cd /usr/share/migrationtools # ./migrate_base.pl > /tmp/base.ldif # ./migrate_group.pl /etc/group /tmp/group.ldif # ./migrate_hosts.pl /etc/hosts /tmp/hosts.ldif # ./migrate_passwd.pl /etc/passwd /tmp/passwd.ldif
Questi ultimi passi migrano i file specificati nei file ldif letti da LDAP. Aggiungere quindi i file alla directory:
# ldapadd -D "cn=Manager,dc=gentoo,dc=org" -W -f /tmp/base.ldif # ldapadd -D "cn=Manager,dc=gentoo,dc=org" -W -f /tmp/group.ldif # ldapadd -D "cn=Manager,dc=gentoo,dc=org" -W -f /tmp/passwd.ldif # ldapadd -D "cn=Manager,dc=gentoo,dc=org" -W -f /tmp/hosts.ldif
Se si raggiunge un errore nei file ldif, si può riprendere da dove
si è terminato usando
Il primo passo è di configurare PAM per permettere l'autorizzazione
LDAP. Installare
# emerge pam_ldap nss_ldap
Editare
auth required /lib/security/pam_env.so auth sufficient /lib/security/pam_unix.so likeauth nullok shadow auth sufficient /lib/security/pam_ldap.so use_first_pass auth required /lib/security/pam_deny.so account sufficient /lib/security/pam_unix.so account sufficient /lib/security/pam_ldap.so password required /lib/security/pam_cracklib.so retry=3 password sufficient /lib/security/pam_unix.so nullok use_authtok shadow md5 password sufficient /lib/security/pam_ldap.so use_authtok password required /lib/security/pam_deny.so session required /lib/security/pam_limits.so session required /lib/security/pam_unix.so session required /lib/security/pam_mkhomedir.so skel=/etc/skel/ umask=0 session optional /lib/security/pam_ldap.so
Cambiare
#host 127.0.0.1 #base dc=padl,dc=com ssl start_tls ssl on suffix "dc=genfic,dc=com"#rootbinddn uid=root,ou=People,dc=genfic,dc=com uri ldaps://auth.genfic.com/ pam_password exop ldap_version 3 pam_filter objectclass=posixAccount pam_login_attribute uid pam_member_attribute memberuid nss_base_passwd ou=People,dc=genfic,dc=com nss_base_shadow ou=People,dc=genfic,dc=com nss_base_group ou=Group,dc=genfic,dc=com nss_base_hosts ou=Hosts,dc=genfic,dc=com scope one
Si configurino infine i propri client in modo che controllino il LDAP per gli account di sistema:
passwd: files ldap group: files ldap shadow: files ldap
Per testare le modifiche, digitare:
# getent passwd|grep 0:0Si dovrebbero ricevere due righe di risposta: root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash
Se si nota che una delle linee poste nel proprio
Se si dà un'occhiata a
access to attrs="userPassword" by dn="uid=root,ou=people,dc=genfic,dc=com" write by dn="uid=John, ou=People,dc=genfic,dc=com" write by anonymous auth by self write by * none access to * by dn="uid=root,ou=People,dc=genfic,dc=com" write
Questo dà l'accesso a tutto ciò che un utente può modificare.
Se questa è un'informazione proprietaria, se ne ha l'accesso in scrittura; se l'informazione
è di un altro utente, la si può leggere; utenti anonimi devono
inviare login e password per avere l'accesso. Ci sono
quattro livelli, partendo dal più basso al più alto:
La prossima ACL è leggermente più sicura, blocca infatti ad un utente normale la lettura delle password shadow di altri utenti:
access to dn=".*,dc=genfic,dc=com" attr="userPassword" by dn="uid=root,ou=people,dc=genfic,dc=com" write by dn="uid=John, ou=People,dc=genfic,dc=com" write by anonymous auth by self write by * search access to * by dn="uid=root,ou=People,dc=genfic,dc=com" write by * read
Questo esempio dà a root e John l'accesso in
lettura/scrittura/ricerca in tutto l'albero
sotto
Si può iniziare ad usare le directory per autenticare gli utenti in apache/proftpd/qmail/samba. Si possono amministrare con Webmin, che provvede un'interfaccia veramente facile. Si può anche usare gq o directory_administrator.
Si ringrazia Matt Heler per averci prestato il suo computer per gli scopi di questa guida. Grazie anche agli amici in #ldap @ irc.freenode.net