Gentoo Logo

Guida all'autenticazione OpenLDAP in Gentoo

Indice:

1.  Iniziare con OpenLDAP

Cos'è LDAP?

LDAP è l'acronimo di Lightweight Directory Access Protocol. Basato su X.500, comprende molte delle sue funzioni primarie, ma non include molte delle funzioni esoteriche che X.500 possiede. Ma cos'è questo X.500 e cosa c'entra con LDAP?

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, è stato riscontrato che X.500 risulta 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.

Cos'è una directory

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.

Come sono strutturate le informazioni

Tutte le informazioni all'interno di una directory sono strutturate in modo gerarchico. 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:

Codice 1.1: Struttura organizzativa di GenFic, una compagnia finta di Gentoo

dc:         com
             |
dc:        genfic         (Organisation)
          /      \
ou:   People   servers    (Organisational Units)
      /    \     ..
uid: ..   John            (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 schema di nomi. Molte distribuzioni LDAP (incluso OpenLDAP) contengono già un certo numero di schemi predefiniti (generalmente approvati), come inetorgperson, uno schema frequentemente usato per definire utenti.

Gli utenti interessati sono incoraggiati a leggere la OpenLDAP Admin Guide.

Per cosa si usa LDAP

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.

  • Infrastruttura per chiavi pubbliche
  • Calendari condivisi
  • Rubriche condivise
  • Depositi per DHCP, DNS, ...
  • Direttive di classe per la configurazione di sistemi (tenendo traccia delle configurazioni di vari server)
  • ...

2.  Configurazione di OpenLDAP

Configurazione iniziale

Nota: In questo documento si userà l'indirizzo genfic.com come esempio. Si dovrà naturalmente cambiarlo per adattarlo allo scopo da raggiungere. Comunque, ci si assicuri che il nodo iniziale sia il top level di un dominio ufficiale (net, com, cc, be, it, ...).

Prima di tutto occorre installare OpenLDAP:

Codice 2.1: Installazione di OpenLDAP

# emerge openldap

A questo punto generare una password criptata da usare successivamente:

Codice 2.2: Generare una password

# slappasswd
New password: my-password
e-enter new password: my-password
{SSHA}EzP6I82DZRnW+ou6lyiXHGxSpSOw2XO4

Modificare la configurazione del Server LDAP tramite il file /etc/openldap/slapd.conf. Più avanti verrà fornita una configurazione di esempio che garantisca un semplice funzionamento. Per un'analisi più dettagliata del file di configurazione, è utile leggere la guida per amministratori di OpenLDAP.

Codice 2.3: /etc/openldap/slapd.conf

include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/misc.schema

pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args

serverID 0 Usato in caso di replicazioni

loglevel 0

## Controlli di accesso
access to dn.base="" by * read
access to dn.base="cn=Subschema" by * read
access to *
  by self write
  by users read
  by anonymous read

## Definizione database
database hdb
suffix "dc=genfic,dc=com"
checkpoint 32 30
rootdn "cn=Manager,dc=genfic,dc=com"
rootpw "{SSHA}EzP6I82DZRnW+ou6lyiXHGxSpSOw2XO4" # See earlier slappasswd command
directory "/var/lib/openldap-ldbm"
index objectClass eq

## Sincronizzazione (prelievo da altri server LDAP)
syncrepl rid=000
  provider=ldap://ldap2.genfic.com
  type=refreshAndPersist
  retry="5 5 300 +"
  searchbase="dc=genfic,dc=com"
  attrs="*,+"
  bindmethod="simple"
  binddn="cn=ldapreader,dc=genfic,dc=com"
  credentials="ldapsyncpass"

index entryCSN eq
index entryUUID eq

mirrormode TRUE

overlay syncprov
syncprov-checkpoint 100 10

Successivamente modificare il file di configurazione del Client LDAP:

Codice 2.4: /etc/openldap/ldap.conf

# nano -w /etc/openldap/ldap.conf
Aggiungere...

BASE         dc=genfic, dc=com
URI          ldap://ldap.genfic.com:389/ ldap://ldap1.genfic.com:389/ ldap://ldap2.genfic.com:389/
TLS_REQCERT  allow
TIMELIMIT    2

Modificare /etc/conf.d/slapd e impostare la seguente linea OPTS:

Codice 2.5: /etc/conf.d/slapd

OPTS="-h 'ldaps:// ldap:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"

Infine, creare la directory /var/lib/openldap-ldbm:

Codice 2.6: Preparare la directory openldap-ldbm

~# mkdir -p /var/lib/openldap-ldbm
~# chown ldap:ldap /var/lib/openldap-ldbm
~# chmod 700 /var/lib/openldap-ldbm

Avviare slapd:

Codice 2.7: Avvio di SLAPd

# /etc/init.d/slapd start

Si può fare un test col seguente comando:

Codice 2.8: Testare il demone SLAPd

# ldapsearch -x -D "cn=Manager,dc=genfic,dc=com" -W

Se si riceve un errore, provare ad aggiungere -d 255 per incrementare la prolissità dell'output e risolvere il problema.

3.  Replicazione

Se occorre l'alta affidabilità

Se il proprio ambiente richiede alta affidabilità, allora occorre allestire la replicazione dei cambiamenti attraverso sistemi LDAP multipli. La replicazione di OpenLDAP è, in questa guida, impostata usando un account specifico per questa operazione (ldapreader) che ha permessi in lettura nel server LDAP primario e che replica i cambiamenti dal server LDAP primario al secondario.

Dunque questa dunque è una configurazione mirror, che consente a un server LDAP secondario di agire come se fosse un primario. Grazie alla struttura interna di LDAP, i cambiamenti non sono applicati più volte se sono già nella struttura LDAP.

Impostare la replicazione

Per impostare la replicazione, preparare un secondo server LDAP, nello stesso modo del precedente. Tuttavia si faccia attenzione, nel file di configurazione,

  • il privider syncrepl punta all'altro sistema
  • il serverID di ogni sistema OpenLDAP è differente

Poi, creare l'account di sincronizzazione. Si creerà un file LDIF (il formato usato per l'immissione di dati nei server LDAP) e si aggiungerà ad ogni server LDAP:

Codice 3.1: Creare l'accont ldapreader

~# slappasswd -s myreaderpassword
 {SSHA}XvbdAv6rdskp9HgFaFL9YhGkJH3HSkiM

~# cat ldapreader.ldif
dn: cn=ldapreader,dc=genfic,dc=com
userPassword: {SSHA}XvbdAv6rdskp9HgFaFL9YhGkJH3HSkiM
objectClass: organizationalRole
objectClass: simpleSecurityObject
cn: ldapreader
description: LDAP reader used for synchronization

~# ldapadd -x -W -D "cn=Manager,dc=genfic,dc=com" -f ldapreader.ldif
Password: inserire la password di amministrazione

4.  Configurazione del Client

Migrare i dati esistenti in ldap

Configurare OpenLDAP per l'amministrazione centralizzata di elementi comuni Linux/Unix non è semplice, ma grazie a qualche strumento e script disponibili in Internet, migrare un sistema amministrato come sistema singolo verso un sistema basato su OpenLDAP, ad amministrazione centralizzata non è poi così duro.

Andare a http://www.padl.com/OSS/MigrationTools.html e prelevare gli script. Occorrono gli script MigrationTool e make_master.sh.

Poi estrarre il Migration Tool e copiare lo script make_master.sh nella directory dove si è estratto il primo:

Codice 4.1: Estrarre il MigrationTools

~# mktemp -d
/tmp/tmp.zchomocO3Q
~# cd /tmp/tmp.zchomocO3Q
~# tar xvzf /path/to/MigrationTools.tgz
~# mv /path/to/make_master.sh MigrationTools-47
~# cd MigrationTools-47

Il passo successivo e migrare le informazioni del proprio sistema in OpenLDAP. Lo script make_master.sh farà il lavoro, dopo avergli fornito le informazioni riguardanti la propria struttura LDAP e il proprio ambiente.

Nel momento in cui è stata scritta questa guida, lo strumento ha richiesto le seguenti immissioni:

Input Descrizione Esempio
LDAP BaseDN La directory inizale (root) dell'albero dc=genfic,dc=com
Mail domain Il dominio da utilizzare per gli indirizzi email genfic.com
Mail host L'hostname completo di dominio (FQDN) dell'infrastruttura del server di posta smtp.genfic.com
LDAP Root DN Informazioni amministrative della struttura LDAP cn=Manager,dc=genfic,dc=com
LDAP Root Password La password dell'account di amministrazione, vedi sopra il comando slappasswd

Lo strumento chiederà anche quali impostazioni degli account si desidera migrare.

Configurazione di PAM

Il primo passo è di configurare PAM per permettere l'autorizzazione LDAP. Installare sys-auth/pam_ldap per fornire il supporto dell'autorizzazione LDAP a PAM e sys-auth/nss_ldap in modo tale che il sistema possa far fronte ai server LDAP per informazioni aggiuntive (usate da nsswitch.conf).

Codice 4.2: Installare pam_ldap e nss_ldap

# emerge pam_ldap nss_ldap

Aggiungere le linee seguenti nella posizione corretta in /etc/pam.d/system-auth

Codice 4.3: /etc/pam.d/system-auth

# # Nota: aggiungerle solamente. Non rimuovere nessun dato già presente o la propria macchina non vi permetterà più di effettuare il login!

auth       sufficient   pam_ldap.so use_first_pass
account    sufficient   pam_ldap.so
password   sufficient   pam_ldap.so use_authtok use_first_pass
session    optional     pam_ldap.so

# File d'esempio:
#%PAM-1.0

auth       required     pam_env.so
auth       sufficient   pam_unix.so try_first_pass likeauth nullok
auth       sufficient   pam_ldap.so use_first_pass

auth       required     pam_deny.so

account    sufficient   pam_ldap.so
account    required     pam_unix.so

password   required     pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 try_first_pass retry=3
password   sufficient   pam_unix.so try_first_pass use_authtok nullok md5 shadow
password   sufficient   pam_ldap.so use_authtok use_first_pass
password   required     pam_deny.so

session    required     pam_limits.so
session    required     pam_unix.so
session    optional     pam_ldap.so

Cambiare /etc/ldap.conf in modo da avere:

Codice 4.4: /etc/ldap.conf

#host 127.0.0.1
#base dc=padl,dc=com

suffix          "dc=genfic,dc=com"
#rootbinddn uid=root,ou=People,dc=genfic,dc=com
bind_policy soft
bind_timelimit 2
ldap_version 3
nss_base_group ou=Group,dc=genfic,dc=com
nss_base_hosts ou=Hosts,dc=genfic,dc=com
nss_base_passwd ou=People,dc=genfic,dc=com
nss_base_shadow ou=People,dc=genfic,dc=com
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_member_attribute memberuid
pam_password exop
scope one
timelimit 2
uri ldap://ldap.genfic.com/ ldap://ldap1.genfic.com ldap://ldap2.genfic.com

Copiare quindi il file ldap.conf dal server ai client in modo che siano consapevoli dell'ambiente LDAP:

Codice 4.5: Copiare l'OpenLDAP ldap.conf

(Sostituire a ldap-server il nome del proprio LDAP)
# scp ldap-server:/etc/openldap/ldap.conf /etc/openldap

Si configurino infine i propri client in modo che controllino l'LDAP per recuperare gli account di sistema:

Codice 4.6: /etc/nsswitch.conf

passwd:         files ldap
group:          files ldap
shadow:         files ldap

Se si nota che una delle linee poste nel proprio /etc/ldap.conf era commentata (la linea rootbinddn), non c'è da preoccuparsi, non ce n'è bisogno a meno che non si voglia cambiare la password degli utenti come superuser. In questo caso c'è bisogno di mettere in chiaro la password di root in /etc/ldap.secret. Questo è PERICOLOSO e si dovrebbe cambiare l'accesso del file in 600. Quello che si può fare è lasciare questo file vuoto e quando c'è bisogno di cambiare la password a qualcuno che è sia in ldap che in /etc/passwd, mettere la password di root nel file per 10 secondi mentre viene cambiata la password dell'utente e quindi rimuoverla subito dopo il termine dell'operazione.

5.  Impostazioni di sicurezza per il Server LDAP

Permessi OpenLDAP

Se si dà un'occhiata a /etc/openldap/slapd.conf si può notare che è possibile specificare le ACL (o permessi) di quali dati gli utenti possono leggere e/o scrivere:

Codice 5.1: /etc/openldap/slapd.conf

access to *
  by dn="uid=root,ou=People,dc=genfic,dc=com" write
  by users read
  by anonymous auth

access to attrs=userPassword,gecos,description,loginShell
  by self 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: auth search read write.

La prossima ACL è leggermente più sicura, blocca infatti ad un utente normale la lettura delle password shadow di altri utenti:

Codice 5.2: /etc/openldap/slapd.conf

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
  by dn="uid=John,ou=People,dc=genfic,dc=com" write
  by * search

Questo esempio dà a root e John l'accesso in lettura/scrittura/ricerca in tutto l'albero sotto dc=genfic,dc=com. Questo permette agli utenti di cambiare le proprie userPassword. Così per come finisce la dichiarazione del filtro ognuno ha la possibilità di ricercare ma non di leggere i risultati di tale ricerca. Si possono avere acl multiple ma le regole vengono processate dal basso verso l'alto, così quelle iniziali dovrebbero essere quelle più restrittive.

6.  Lavorare con OpenLDAP

Manutenzione delle directory

Si può iniziare ad usare le directory per autenticare gli utenti in apache/proftpd/qmail/samba. Si possono amministrare con phpldapadmin, diradm, jxplorer o lat, che forniscono facili interfacce di amministrazione.

7.  Riconoscimenti

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



Stampa

Aggiornato il 15 agosto 2011

La versione originale di questo documento non è più mantenuta

Oggetto: Questa guida introduce le basi di LDAP e mostra come configurare OpenLDAP allo scopo di autenticare un gruppo di computer Gentoo.

Benjamin Coles
Autore

Sven Vermeulen
Revisione

Brandon Hale
Revisione

Benny Chuang
Revisione

Markus Ullmann
Redazione

Joshua Saddler
Redazione

Enrico Morelli
Traduzione

Team Italiano
Traduzione

Davide Cendron
Traduzione

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.