Pierangelo Masarati wrote:
Seguendo diversi documenti [1, 2] ho creato la CA ed i certificati
necessari, e sono giunto alla seguente configurazione:

slapd.conf:
-----------
include         /usr/local/etc/openldap/schema/core.schema
include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/nis.schema
include         /usr/local/etc/openldap/schema/inetorgperson.schema
include         /usr/local/etc/openldap/schema/openldap.schema
include         /usr/local/etc/openldap/schema/sudo.schema
pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args

modulepath      /usr/local/libexec/openldap
moduleload      back_bdb

database        bdb
suffix          "dc=test,dc=org"
rootdn          "cn=Manager,dc=test,dc=org"
rootpw          {SSHA}FNoRa4/LVSCsUBLKz6LQjLcayzvMfOw/
directory       /var/db/openldap-data
index           objectClass     eq
index           uid             pres,eq,sub

TLSCipherSuite HIGH:MEDIUM:+SSLv2
TLSVerifyClient allow
TLSCACertificateFile /usr/local/etc/openldap/cacert.pem
TLSCertificateFile /usr/local/etc/openldap/servercrt.pem
TLSCertificateKeyFile /usr/local/etc/openldap/serverkey.pem

#access to *
#by self write
#by users read
#by anonymous auth



Il file ldap.conf qui sotto si riferisce a PAM/NSS, non ha niente a che
fare con OpenLDAP, se non che PAM/NSS agiscono come client del server
OpenLDAP; ma la libreria libldap di OpenLDAP non prende la sua
configurazione da qui.

uhmmm.. se ti riferisci alle direttive TLS*, quelle le ho inserite io a mano prendendo spunto dai vari
esempi che si trovano in giro.
Il server ldap fa riferimento al file sldapd.conf in /usr/local/etc/openldap:

[EMAIL PROTECTED]:~ >pkg_info -L openldap-server-2.3.37 | grep slapd.conf
/usr/local/etc/openldap/slapd.conf.default

che e' proprio quello di cui si parlava poco sopra.
Il port di pam_ldap fa riferimento al file ldap.conf:

[EMAIL PROTECTED]:~ >pkg_info -L pam_ldap-1.8.2
Information for pam_ldap-1.8.2:

Files:
/usr/local/man/man5/pam_ldap.5.gz
/usr/local/etc/ldap.conf.dist
/usr/local/lib/pam_ldap.so

mentre nss_ldap punta ad nss_ldap.conf:

[EMAIL PROTECTED]:~ >pkg_info -L nss_ldap-1.255
Information for nss_ldap-1.255:

Files:
/usr/local/etc/nss_ldap.conf.sample
/usr/local/lib/nss_ldap.so.1
/usr/local/man/man5/nss_ldap.5.gz

Quindi nel mio caso ho 3 file di configurazione:

/usr/local/etc/openldap/slapd.conf (server ldap)
/usr/local/etc/ldap.conf (pam_ldap e client)
/usr/local/etc/nss_ldap.conf (nss_ldap)

e dato che ldap.conf e nss_ldap.conf mi sembravano dover contenere la medesima configurazione,
li ho linkati:

[EMAIL PROTECTED]:~ >ls -i /usr/local/etc/ | grep ldap
6627174 ldap.conf
6627160 ldap.conf.dist
6627174 nss_ldap.conf
6627156 nss_ldap.conf.sample
6811146 openldap

Inoltre, quando ho compilato il server LDAP ho abilitato SASL e poer questo ho installato i client
con supporto sasl:

[EMAIL PROTECTED]:~ >pkg_info | grep ldap
nss_ldap-1.255      RFC 2307 NSS module
openldap-sasl-client-2.3.37 Open source LDAP client implementation with SASL2 support
openldap-server-2.3.37 Open source LDAP server implementation
pam_ldap-1.8.2      A pam module for authenticating with LDAP
php5-ldap-5.2.3_1   The ldap shared extension for php
phpldapadmin-1.0.2,1 A set of PHP-scripts to administer LDAP over the web


ldap.conf:
----------
base dc=test,dc=org
host ferret.tomato.lan
sudoers_base   ou=SUDOers,dc=test,dc=org
#uri ldap://127.0.0.1/
#uri ldaps://tomato.ferret.lan:636/

#ssl start_tls
#ssl on

pam_groupdn cn=smtp_box,ou=groups,dc=test,dc=org
pam_member_attribute memberUid

^^^ questo in ogni caso e' sbagliato e prima o poi ci sbatterai la testa;
infatti il pam_member_attribute deve essere un attributo con la sintassi
di un DN (il fatto che di solito lo si faccia puntare a uniqueMember, che
solo per caso ha una sintassi che assomiglia a un DN, e' un altro
discorso).  Quindi memberUid non funziona.
cercavo un modo per abilitare (o meno) l'accesso a certe macchine per certi utenti e, guardando in giro,
mi sono imbattuto in pam_goupdn:

da quello che ho capito, con "pam_groupdn" si specifica una entita'[*] in LDAP, nel cui attributo 'memberUid' si specifica il DN di tutti gli utenti che appartengono a tale entita', i quali riceveranno risposta positiva durante la fase di controllo dell'account quando cercheranno di accedere ad un client LDAP che utilizza PAM.
TLS_CACERT /usr/local/etc/openldap/cacert.pem
TLS_REQCERT demand

^^^ attenzione: questo significa che il client verifichera' il certificato
del server usando il certificato della CA fornito dalla riga sopra, e se
la verifica fallisce la connessione verra' rifiutata.  Tutto cio' e bene:
e' esattamente come il TLS andrebbe usato perche' sia sicuro, ma occorre
verificare che funzioni correttamente; vedi sotto.
.ldaprc:
--------

TLS_REQCERT demand

TLS_CERT /usr/local/etc/openldap/ldap.client.pem
TLS_KEY /usr/local/etc/openldap/ldap.client.key.pem

"TLS_REQCERT demand" richiede TLS_CACERT...
intendi dire che devo utilizzare TLS_CACERT anche in .ldaprc?
Inoltre, nel caso fosse necessario questo file .ldaprc nella dir di tutti
gli utenti che si autenticano in LDAP tramite TLS, cosa dovrei fare
per crittare il traffico che si scambiano sshd e il server? Girando come
utente root sshd, devo forse creare un file .ldaprc e piazzarlo nella home
di root?

e le seguenti operazioni mi confermano la bonta' dei ceritifati:
[EMAIL PROTECTED]:~ >openssl s_client -connect localhost:636 -showcerts
CONNECTED(00000003)
depth=1 /C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=tomato
verify error:num=19:self signed certificate in certificate chain
verify return:0

^^^ questo non va molto bene: c'e' un self-signed nel loop...
e' fatale od e' solo un warning? dovendo utilizzare LDAP all'interno di una rete privata non mi va proprio di pagare
una CA ufficiale...

[EMAIL PROTECTED]:~ >ldapsearch -H ldaps://localhost:636 -b 'dc=test,dc=org'
'(objectclass=*)'
ldap_bind: Can't contact LDAP server (-1)
        additional info: error:14090086:SSL
routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

Qui contatti il server come ldaps://localhost:636, quindi risponde
sull'interfaccia localhost; ma il certificato e' per ferret.tomato.lan;
quindi la verifica fallisce.  O contatti il server come ferret.tomato.lan,
oppure metti come subJectAtlName localhost (cosa non tanto carina...)
hai ragione, non mi ero accorto della cosa...

[1]: http://www.openldap.org/faq/data/cache/185.html
[2]: http://www.openldap.org/pub/ksoper/OpenLDAP_TLS.html

^^^ [2] e' vecchiotto e contiene qualche inesattezza; [1] e' anch'esso
vecchiotto, ed e' stato trasferito, riveduto aggiornato e corretto nella
documentazione: <http://www.openldap.org/doc/admin23/tls.html>.  La
tradizione vuole che la documentazione di OpenLDAP sia carente e
incompleta; magari in passato questo era vero, ma ora secondo me non e'
piu' cosi': e' completa e accurata (=senza errori, inutili fronzoli,
imprecisioni, divagazioni, ...).

beh, se debbo essere sincero, se ci fosse stata una guida che contemplasse l'integrazione di LDAP, pam, nss, TLS/SSL, etcetc ci avrei messo molto meno tempo e magari avrei capito meglio diversi punti che tutt'ora mi rimangono oscuri...

Comunque per ora vi ringrazio, ci risentiamo dopo il 15 Agosto quando ricomincero' a fare esperimenti con LDAP... :)

bye,
P.

[*]: e passatemi anche la licenza poetica, in quanto non conosco ancora la terminologia esatta utilizzata in LDAP... :)



_______________________________________________
OpenLDAP mailing list
OpenLDAP@sys-net.it
https://www.sys-net.it/mailman/listinfo/openldap


Rispondere a