[LatinaLUG] samba, Active Directory e kerberos... una specie di HOWTO

Gabriele Mambrini gm@badpenguin.org
Sab 8 Set 2007 19:44:40 CEST


Ovvero cose che uno si inventa per non dover riscrivere diecimila volte
la propria password...

Lavorando a stretto contatto con le forze del male mi ritrovo spesso ad
usare smbclient per accedere a file che stanno su macchine windog.
Gran parte di queste macchine sono in un dominio Active Directory,
supponiamo che si chiami EVILPLACE.ORG: questo significa che ogni volta
devo accedere ad una qualche dannata condivisione mi tocca scrivere una
cosa tipo

gabriele@deathstar$ smbclient -U EVILPLACE.ORG/MambriniG
//fileserver.evilplace.org/condivisione

e scrivere ogni volta la password. Soluzione: sfruttare uno dei pilastri
(stranamente uno standard!) su cui poggia Active Directory per fare
autenticazione e cioè Kerberos.

Per farla breve con kerberos ci si autentica con username e password
presso un kdc (Key Distribution Center) che ci da una sorta di biglietto
(il ticket granting ticket) con cui possiamo poi autenticarci presso gli
altri server: questi riconosceranno un nostro ticket-granting-ticket e
ci daranno un biglietto valido per il loro servizio. Quindi dopo che ci
siamo autenticati con il kdc una volta possiamo autenticarci con tutti
gli altri server del dominio... passiamo all'azione.

Prerequisito: controllare l'orologio del sistema rispetto a
quello del server kerberos. Devono essere abbastanza concordi, io in
genere uso ntp.

A questo punto ho installato krb5 e krb5-client per poi configurare in
/etc/krb.conf il mio dominio kerberos

-------------------------------------------------------
[libdefaults]
        default_realm = EVILPLACE.ORG

[realms]
        EVILPLACE.ORG = {
                kdc = dc1.evilplace.org
                kdc = dc2.evilplace.org
                admin_server = dc1.evilplace.org
        }

[domain_realm]
        .evilplace.org = EVILPLACE.ORG
        evilplace.org = EVILPLACE.ORG
-------------------------------------------------------

Buona notizia: con le implementazioni recenti questo passo è opzionale,
usano gli stessi record DNS che usano i client windog per trovare il
domain controller, questo file va lasciato vuoto!

adesso sono pronto a prendermi il ticket-granting-ticket

gabriele@deathstar$ kinit MambriniG@EVILPLACE.ORG
Password for MambriniG@EVILPLACE.ORG:*************
New ticket is stored in cache file /tmp/krb5cc_1000

ed accedere usando il parametro -k

gabriele@deathstar$smbclient -k //fileserver.evilplace.org/condivisione
OS=[Windows Server 2003 3790 Service Pack 1] Server=[Windows Server 2003
5.2]

A questo punto posso mettere smbclient in uno script ed eseguirlo quante
volte mi pare... finché non scade il ticket!
Posso anche usarlo per autenticarmi per accedere via LDAP con ldapsearch
alla directory di ActiveDirectory, ad esempio per scaricare l'elenco di
tutti gli User:


ldapsearch -Y gssapi -h dc1.evilplace.org -b dc=evilplace,dc=org
'(&(objectClass=person)(objectCategory=user))'

oppure in uno script Perl usando i moduli Authen::SASL e
Authen::SASL::Perl::GSSAPI, cosa che mi ha fatto molto comodo!

La prossima puntata (appena riuscirò a scriverla) sarà l'autenticazione
trasparente con ssh...

Buona serata e buona domenica
Gabriele


Maggiori informazioni sulla lista latina