LDAP Linux · 5 min read · Dec 13, 2025
Autenticazione LDAP In Linux

Questo howto ti mostrerà come memorizzare i tuoi utenti in LDAP e autenticare alcuni dei servizi contro di esso. Non mostrerò come installare pacchetti particolari, poiché dipende dalla distribuzione/sistema. Mi concentrerò sulla configurazione “pura” di tutti i componenti necessari per avere l’autenticazione/memorizzazione degli utenti in LDAP. L’howto presume in qualche modo che tu stia migrando da un’autenticazione passwd/shadow regolare, ma è anche adatto per le persone che lo fanno da zero.
Requisiti
- OpenLDAP
- pam_ldap
- nss_ldap
- PADL migrationtools
Introduzione
La cosa che vogliamo ottenere è avere i nostri utenti memorizzati in LDAP, autenticati contro LDAP (diretto o pam) e avere qualche strumento per gestirlo in un modo comprensibile per gli esseri umani.
In questo modo possiamo utilizzare tutto il software che ha supporto LDAP o tornare al modulo PAM LDAP, che agirà come un gateway PAM->LDAP.
Maggiori informazioni sull’idea di LDAP possono essere trovate su Wikipedia: LDAP wikipedia
Configurazione di OpenLDAP
OpenLDAP è composto dai demoni slapd e slurpd. Questo howto copre un server LDAP senza replica, quindi ci concentreremo solo su slapd. Presumo anche che tu abbia installato e inizializzato la tua installazione di OpenLDAP (dipende dal sistema/distribuzione). Se sì, passiamo alla parte di configurazione.
Nel mio sistema (Gentoo), la configurazione di OpenLDAP è memorizzata in /etc/openldap, ci interessa il file /etc/openldap/slapd.conf. Ma prima dobbiamo generare una password per l’amministratore LDAP, da inserire nel file di configurazione:
slappasswd -h {md5}La configurazione appare così:
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
allow bind_v2
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
modulepath /usr/lib/openldap/openldap
access to attrs=userPassword
by dn="uid=root,ou=People,dc=domain,dc=com" write
by dn="cn=Manager,dc=domain,dc=com" write
by anonymous auth
by self write
by * none
access to dn.base="" by * read
access to *
by dn="cn=Manager,dc=domain,dc=com" write
by * read
database bdb
suffix "dc=domain,dc=com"
rootdn "cn=Manager,dc=domain,dc=com"
rootpw {MD5}Tk1sMytv5ipjr+Vhcf03JQ==
directory /var/lib/openldap-data
index objectClass eq
Ricorda di cambiare suffix e percorsi in base alle tue esigenze.
Queste sono opzioni di base con alcune ACL di base necessarie per cambiare le password da parte dell’utente. Se desideri più funzionalità, ti prego di leggere il manuale su OpenLDAP. Ora che abbiamo una configurazione adeguata per slapd, possiamo avviare il demone :
service slapd startPer favore, ricorda di avere qualcosa del genere nel file di configurazione responsabile per gli argomenti passati a slapd (il percorso dovrebbe puntare a slapd.sock):
OPTS="-h 'ldaps:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"Ora possiamo testare se openldap è in esecuzione e funziona correttamente. Non abbiamo ancora dati nella directory, ma possiamo provare a collegarci come cn=Manager,dc=domain,dc=com. Quando ti viene chiesta la password, dovresti usare quella che hai generato (ovviamente la versione in testo chiaro di essa :)
ldapsearch -D "cn=Manager,dc=domain,dc=com" -WMigrare/Aggiungere dati alla directory
Ora che abbiamo un server LDAP in esecuzione, dobbiamo riempirlo di dati, sia creando che migrando voci. Ti mostrerò come migrare voci esistenti da passwd/shadow/groups regolari.
Il primo passo è configurare gli strumenti di migrazione in base alle tue esigenze. Il file di configurazione su Gentoo si trova in /usr/share/migrationtools/migrate_common.ph.
In generale, devi cambiare solo questi:
$DEFAULT_BASE = "dc=domain,dc=com";
$EXTENDED_SCHEMA = 1;
Ora sei pronto per migrare i dati (in realtà funziona anche senza il comando di esportazione):
export ETC_SHADOW=/etc/shadow
./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.ldifOra abbiamo i dati nel formato compreso dal server LDAP. Per favore, apri uno dei file con un editor di testo per abituarti alla sintassi. Dopo di che, possiamo aggiungere i dati dagli ldifs.
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/base.ldifldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/group.ldifldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/passwd.ldifldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/hosts.ldifPuoi provare a cercare alcuni dati:
ldapsearch uid=foouserConfigurazione del client
Per client intendo la macchina che si connette al server LDAP per ottenere utenti e autorizzare. Può essere anche la macchina su cui gira il server LDAP. In entrambi i casi dobbiamo modificare tre file: /etc/ldap.conf, /etc/nsswitch.conf e /etc/pam.d/system-auth.
Iniziamo con ldap.conf, il client di ldap:
BASE dc=domain, dc=com
scope sub
suffix "dc=domain,dc=com"
## quando vuoi cambiare la password dell'utente da root
rootbinddn cn=Manager,dc=domain,dc=com
## ci sono necessari quando il tuo ldap muore
timelimit 5
bind_timelimit 5
uri ldap://ldap.domain.com/
pam_password exop
ldap_version 3
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_member_attribute memberuid
nss_base_passwd ou=Computers,dc=cognifide,dc=pl
nss_base_passwd ou=People,dc=cognifide,dc=pl
nss_base_shadow ou=People,dc=cognifide,dc=pl
nss_base_group ou=Group,dc=cognifide,dc=pl
nss_base_hosts ou=Hosts,dc=cognifide,dc=pl
Ora è il momento di nsswitch.conf e pam.
Aggiungi questi a nsswitch.conf:
passwd: files ldap
shadow: files ldap
group: files ldap
E modifica il system-auth (o qualunque cosa tu abbia come login, sshd, ecc.) in:
auth required pam_env.so
auth sufficient pam_unix.so likeauth nullok
auth sufficient pam_ldap.so use_first_pass
auth required pam_deny.so
account sufficient pam_unix.so
account sufficient pam_ldap.so
account required pam_ldap.so
password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
password sufficient pam_unix.so nullok md5 shadow use_authtok
password sufficient pam_ldap.so use_first_pass
password required pam_deny.so
session required pam_limits.so
session required pam_unix.so
session optional pam_ldap.so
È tempo di testarlo. Il miglior strumento per farlo è il buon vecchio getent. Scegli un utente dal tuo sistema ed emetti:
getent passwd | grep foouserDovresti ottenere il risultato due volte, se sì, nss_ldap funziona bene. La parte pam può essere testata eliminando un utente da /etc/passwd e provando a effettuare il login tramite ssh.
Apache mod_auth_ldap
Per avere l’autorizzazione LDAP in apache, devi caricare il modulo mod_auth_ldap.
LoadModule mm_auth_ldap_module modules/mod_auth_ldap.soOra è sufficiente creare un .htaccess in questo modo:
AuthName "Riservato"
AuthType Basic
AuthLDAPURL ldap://ldap.domain.com:389/ou=People,dc=domain,dc=com?uid
AuthLDAPBindDN "cn=Manager,dc=domain,dc=com"
AuthLDAPBindPassword "la_tua_password_segreta_per_l_admin_ldap"
require valid-user
Nota che questo metodo può essere utilizzato anche per l’autorizzazione di WebDAV subversion.
Strumenti di amministrazione per LDAP
Ci sono alcuni strumenti che consiglio di utilizzare per amministrare il server OpenLDAP:
- phpldapadmin - strumento basato sul web
- ldapvi - navigazione con vim
- PADL migrationtools - strumenti di migrazione
- IDEALX sambaldap tools - strumenti samba LDAP
Altre applicazioni consapevoli di ldap
- Postfix
- Courier IMAP
- jabberd
- eGroupware
Riepilogo
Se qualcuno ha qualcosa da aggiungere, per favore fallo. So che la configurazione potrebbe non essere perfetta.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.