Samba e Active Directory (3 di 3): configurare pam per l’autenticazione locale

samba

Nel precedente articolo sono stati illustrati i metodi per effettuare delle interrogazioni ad un dominio Active Directory attraverso una macchina Linux al cui interno è configurato SAMBA. Nell’ultimo esempio illustrato l’esito dell’interrogazione presentava un elenco del tutto simile al contenuto del file /etc/passwd che in ogni sistema Linux contiene le informazioni di accesso degli utenti. La riflessione nata spontaneamente è quindi se si può fare in modo che il sistema sia configurato per supportare l’autenticazione via Active Directory in fase di login. La riposta è sì, ecco spiegato come.

Condividere una cartella

La configurazione illustrata nel primo articolo della serie consente di autenticare l’accesso a cartelle condivise mediante le credenziali presenti nel Active Directory.
Per condividere una cartella è sufficiente aggiungere al file di configurazione di SAMBA /etc/samba/smb.conf una dichiarazione come la seguente:

[Test]
        comment = Test
        path = /samba/test
        write list = DOMINIO.IT/user1
        read list = @"DOMINIO.ITgruop1"
        read only = Yes
        browseable = Yes
        create mask = 0775
        directory mask = 0775

dopo aver effettuato il reload del servizio attraverso il comando:

$ /etc/init.d/samba reload

la directory, supponendo che l’indirizzo IP della macchina sia 192.168.0.100, sarà disponibile per l’accesso dalla rete all’indirizzo //192.168.0.100/Test. L’utente DOMINIO.ITuser1 (così andrà digitato alla schermata di login) avrà il permesso di scrittura mentre tutti gli utenti del gruppo DOMINIO.ITgroup1 potranno accedere in lettura alla condivisione.

Ma questa è solo la punta dell’iceberg. Come già detto, la configurazione di SAMBA permette di sfruttare il metodo di autenticazione in modo che il sistema stesso in fase di login si riferisca al dominio Active Directory.

PAM, brevemente

PAM (Pluggable Authentication Modules) definisce un metodo standard ad alto livello per gestire l’autenticazione. Questo strato è comune a tutti i sistemi Linux (sebbene le varie versioni non operino tutte allo stesso modo) e consente a coloro i quali sviluppano servizi con autenticazioni proprie di creare moduli che rispettino l’interfaccia di programmazione relativa a PAM.
In questo modo, potenzialmente, qualunque sistema di autenticazione può essere integrato con il login di sistema.
Una panoramica dettagliata di quello che è PAM e di come funziona è disponibile presso Kernel.org, precisamente a questo link: http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html.

Integrazione di winbind con PAM per il login via Active Directory

La configurazione di PAM all’interno del sistema è contenuta in una serie di file, in Debian Lenny, la distribuzione utilizzata in questa serie di articoli, tali file si trovano nella cartella /etc/pam.d:

$ ls -1 /etc/pam.d/
chfn
chsh
common-account
common-auth
common-password
common-session
cron
login
omauth
other
passwd
samba
ssh
su

In particolare i file interessati nella fase di login sono common-account, common-auth e common-session.

La componente SAMBA che gestisce l’interfacciamento con Active Directory è, come già spiegato, winbind. Il pacchetto fornito con le maggiori distribuzioni fornisce, fra gli altri, quello che è il file base per l’introduzione di Active Directory nel login di sistema: pam_winbind.so. Tale file dovrà essere introdotto all’interno della configurazione del sistema di login.

Il primo file ad essere modificato dovrà essere /etc/pam.d/common-account il cui contenuto dovrà essere il seguente:

account sufficient      pam_winbind.so
account required        pam_unix.so

Questo file di default controlla che la password dell’utente non sia scaduta. Con l’aggiunta della riga relativa a winbind inoltre assume come sufficiente la credenziale verificata da Active Directory.

Il secondo file da considerare sarà /etc/pam.d/common-auth che di default impone l’utilizzo del meccanismo UNIX standard per l’autenticazione. Tale file dovrà assumere questo contenuto:

auth    sufficient      pam_winbind.so
auth    required        pam_unix.so nullok_secure use_first_pass

Quanto inserito comunica al sistema di considerare sufficiente l’avvenuta autenticazione con winbind. Nella seconda riga viene aggiunto il parametro use_first_pass in modo che venga utilizzata la prima password inserita per autenticare l’utente e prevenire una doppia richiesta di inserimento per la parola d’ordine.

L’ultimo file che andrà modificato è /etc/pam.d/common-session che contiene le informazioni relative alle sessioni interattive e non che l’utente potrà avviare:

session required        pam_unix.so
session required        pam_mkhomedir.so skel=/etc/skel umask=0022

rispetto al default viene aggiunta la riga relativa al modulo pam_mkhomedir.so per fare in modo che il sistema per ogni utente identificato che non possiede una home directory ne crei una ex-novo partendo dalle specifiche presenti nel file di /etc/skel con i permessi di scrittura relativi.

Prova di login

A questo punto il sistema è pronto a permettere il login alle utenze Active Directory, relativamente a tutti i servizi, compreso ssh:

$ ssh "DOMINIO.IT\user1"@192.168.0.100
DOMINIO.ITuser1@192.168.0.100's password: 
Creating directory '/home/DOMINIO.IT/user1'.
Linux anomalia 2.6.26-1-686 #1 SMP Fri Mar 13 18:08:45 UTC 2009 i686
 
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
 
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
DOMINIO.IT\user1@anomalia:~$

Essendo il primo tentativo di login effettuato e data la configurazione PAM precedentemente illustrata, il sistema ha creato la directory /home/DOMINIO.IT/user1.
Nella cartella /home/DOMINIO.IT verranno pertanto registrate tutte le home directories relative agli utenti:

$ ls -la /home/DOMINIO.IT/
totale 12
drwxr-xr-x 3 root                    root                             4096  9 apr 17:32 .
drwxr-xr-x 3 root                    root                             4096  9 apr 17:32 ..
drwxr-xr-x 2 DOMINIO.IT\user1 DOMINIO.IT\domain users 4096  9 apr 17:32 user1

L’accesso al sistema degli utenti Active Directory è garantito nella stessa medesima forma degli utenti di sistema standard.

Conclusioni

Questa panoramica di SAMBA ha voluto illustrare quello che è lo stato dell’arte dell’integrazione tra SAMBA e Microsoft Active Directory ad oggi, ma moltissime sono le novità che bollono in pentola dal team di sviluppo del progetto Samba. La versione 4 è ormai una realtà e sebbene la strada verso la prima release stabile sia lunga, le aspettative in merito sono altissime. Questa versione sarà la prima ad integrare la completa gestione di Active Directory ed un’altra serie di importanti novità che potranno, perché no, essere argomento di un prossimo articolo.

Articoli della serie

Samba e Active Directory (1 di 3): diventare parte di un Dominio
Samba e Active Directory (2 di 3): interrogare il dominio
Samba e Active Directory (3 di 3): configurare pam per l’autenticazione locale

Stampa questo articolo Stampa questo articolo



28 Commenti

  1. Marco
    Scritto il 28 dicembre 2009 alle 18:12 | Permalink

    Ciao! Complimenti per la guida!! Direi perfetta :D l’unico problema che ho riscontrato, è che non riesco a gestire i permessi degli utenti di cominio!!Sembra che vengano utilizzati solo quelli locali.. e quindi tutti (utenti di dominio) hanno gli stessi permessi! :(

    Grazie

  2. Scritto il 28 dicembre 2009 alle 19:19 | Permalink

    Ciao Marco,
    grazie per i complimenti. Riguardo al tuo problema, dovresti essere più specifico: abbiamo gestito installazioni piuttosto complesse organizzando accessi attraverso gruppi e configurazioni specifiche per cui credo possiamo essere in grado di aiutarti. Anzitutto il tuo obiettivo qual’è?

  3. Marco
    Scritto il 28 dicembre 2009 alle 19:45 | Permalink

    Grazie della risposta!
    Il mio obiettivo è utilizzare un server linux con samba come nas. Vorrei poter assegnare qualsiasi permesso alle cartelle condivise, che potranno essere lette/scritte da uno o più utenti.
    Attualmente riesco ad accedere alla cartella test, perchè sono utente del dominio(da un pc non nel dominio,chiede giustamente user e password), ma non riesco a definire i permessi di lettura o scrittura. Come se gli utenti impostati nel file smb.conf venissero ignorati.
    Se invece imposto “valid users = nome_utenti_ammessi” non mi fa più accedere chiedendo mostrando sempre la finestra di login.

  4. Marco
    Scritto il 28 dicembre 2009 alle 19:48 | Permalink

    Diciamo che funziona tutto perfettamente fino alla parte 2di3 di questa guida

  5. Marco
    Scritto il 28 dicembre 2009 alle 22:34 | Permalink

    Spero di non sembrare seccante, ma volevo informarti sulle novità :)
    Allora, “ho scoperto” che come detto prima, riguardo ai permessi cioò che scrivo nel file, non viene eseguito, mentre ho provato ad agire da linea di comando e con chown, chgrp e chmod riesco a fare tutto :D Ma non so se è questo il metodo giusto!

  6. Scritto il 29 dicembre 2009 alle 09:21 | Permalink

    Ciao Marco,
    non sei affatto seccante, figurati. Il concetto è che attraverso le configurazioni illustrate nell’articolo i permessi locali possono essere associati a permessi active directory. E l’approccio deve essere quello: non basta dire a SAMBA “a questo share può accedere questo gruppo/utente”, tali permessi devono esistere EFFETTIVAMENTE sul filesystem.
    Quindi è corretto impostare prima di tutto attraverso chown, chgrp e via dicendo i permessi sulle cartelle locali.
    Felice che tu abbia risolto, a presto!

  7. Marco
    Scritto il 29 dicembre 2009 alle 09:58 | Permalink

    Quindi questo è effettivamente il metodo corretto?
    E se devo assegnare i permessi di scrittura di una cartella a più persone come faccio? Devo creare ogni volta un gruppo?
    Potrei farti altre domande se a te non scoccia?

    Grazie mille

  8. Scritto il 29 dicembre 2009 alle 10:09 | Permalink

    Direi che il metodo corretto è proprio questo. Del resto si applica a tutti i sistemi Linux in generale, a prescindere da Active Directory.
    L’ideale per come la vedo io è questa situazione: hai utente1 ed utente2 che appartengono a gruppo1 e devono accedere alla directory dir1.
    I permessi sulla directory saranno impostati con il setgid, così:

    # chgrp gruppo1 dir1
    # chmod 2770 dir1

    In questo modo tutti gli appartenenti al gruppo gruppo1 potranno scrivere in dir1 e tutti file e directory creati nella dir apparterranno al gruppo gruppo1.
    Sostituisci a gruppo1 il tuo gruppo Active Directory ed il gioco è fatto.

  9. Marco
    Scritto il 29 dicembre 2009 alle 10:42 | Permalink

    Ok, ma l’aspetto negativo, rispetto ad un nas ad esempio, è che per ogni cartella dove devono avere accesso più utenti, devo ogni volta creare un gruppo… potrei ritrovarmi così anche 50 gruppi!.. Ma è possibile che un utente appartenga a più gruppi?

  10. Scritto il 29 dicembre 2009 alle 10:49 | Permalink

    Beh credo sia tutto relativo, in un NAS credo che comunque i permessi li devi impostare.
    L’indubbio vantaggio di usare AD è che puoi gestire tutto in maniera centralizzata. In merito ai 50 gruppi inevitabilmente tutto dipende dalla complessità della tua architettura.
    Un utente può appartenere a quanti gruppi vuoi.

  11. Marco
    Scritto il 29 dicembre 2009 alle 11:16 | Permalink

    Va bene, grazie :D
    Però in un nas è meno macchinoso perchè non devi creare gruppi, ma associ gli utenti direttamente. (E tu dirai..usa un nas allora! :P )
    approfitto della conoscenza se permetti :P
    Ho notato che riavviando il servizio samba, mi sega la connessione da risorse di rete… quindi il collegamento con i file, è normale?

    Ma dopo aver configurato i permessi da linea di comando, per una cartella Samba allora bastano 4 righe così?:
    [nomecartella]
    path = /samba/nomecartella
    browseable = yes
    writeable = yes

  12. Scritto il 29 dicembre 2009 alle 11:27 | Permalink

    Il comportamento di samba con connessioni aperte che vengono abbattute devo verificarlo, da quel che ricordo non dovrebbero verificarsi disconnessioni, ma non ne ho la certezza.
    Per quanto riguarda le share, per come la vedo io dovresti usare oltre alle opzioni indicate anche questo:

    valid users = @”DOMINIO\gruppo”
    write list = @”DOMINIO\gruppo”

    ma rispetto alla configurazione che hai creato questo è utile soprattutto ai fini di una coerenza generale.

  13. Marco
    Scritto il 29 dicembre 2009 alle 11:30 | Permalink

    Ho verificato che se uso questo comando “valid users = @”DOMINIO\gruppo””
    non mi fa accedere più alla cartella chiedendo sempre user e password..

  14. Scritto il 29 dicembre 2009 alle 11:41 | Permalink

    Ecco, questo non dovrebbe accadere.
    Ci dev’essere qualcosa che non va nella configurazione. Dovresti spulciare i log e capire cosa contengono, in particolare il /var/log/samba/log.smbd e vedere esattamente dove e come si verifica l’errore.

  15. Marco
    Scritto il 29 dicembre 2009 alle 11:54 | Permalink

    Ok, verifico.. Ma come mai nell’esempio più sopra hai indicato # chmod 2770 dir1?
    Non sono tre i numeri da indicare? Che corrisposono a Proprietario-Gruppo-Altri.
    In “valid users = DOMINIO/utente” è possibile scrivere più utenti?
    O bisogna usare sempre i gruppi?

  16. Marco
    Scritto il 29 dicembre 2009 alle 12:02 | Permalink

    Mi correggo riguardo a:
    “Ho verificato che se uso questo comando “valid users = @”DOMINIO\gruppo””
    non mi fa accedere più alla cartella chiedendo sempre user e password..”

    Non mi da più questo problema.

  17. Scritto il 29 dicembre 2009 alle 13:45 | Permalink

    Il motivo del 2 prima del 770 nel chmo è il setgid, leggi qui: http://it.wikipedia.org/wiki/Setuid_e_setgid.

  18. Scritto il 29 dicembre 2009 alle 13:46 | Permalink

    Ecco, così ha senso ;-)

    A presto!

  19. Marco
    Scritto il 29 dicembre 2009 alle 15:39 | Permalink

    Grazie ancora di tutto!
    Solo un’ultima cosa, ho creato i vari gruppo in active direcotry su W2003, ma con chgrp me li riconosce, ma poi gli utente appartenenti al gruppo non riescono ad accedere alle cartelle! ;(
    Ho scordato qualcosa?
    Gruppi windows-> utenti windows-> chgrp gruppo_windows

  20. Scritto il 29 dicembre 2009 alle 16:24 | Permalink

    Direi che la procedura è quella.
    Se poi il sistema comunque i gruppi li riconosce, vuol dire che tutto funziona.
    Prova ad effettuare un reload di Samba.

  21. Marco
    Scritto il 29 dicembre 2009 alle 16:30 | Permalink

    Ha preso a funzionare dopo 2 restart di samba…vabbè!
    Hai detto che ti è capitato di fare configurazioni complesse, mi se è posto il problema di avere che 3 utenti debbano scrivere su una cartella(creo il gruppo ok..), ma altri 3 devono solo poter leggere… Come assegno questi permessi?
    Mi sembra che in linux esista solo proprietario e gruppo proprietario.. O sbaglio?

  22. Scritto il 29 dicembre 2009 alle 17:04 | Permalink

    Crei un gruppo in lettura ed un gruppo in scrittura e li gestisci con read list e write list.
    Se la cosa si complica ulteriormente puoi pensare di usare le ACL posix, ma lì si complica davvero :-)

  23. Marco
    Scritto il 6 gennaio 2010 alle 14:37 | Permalink

    Ri-ciao! Mi è sorto un nuovo dubbio, può essere che la modifica al file /etc/pam.d/common-auth
    centri con il fatto che ora il sistema mi richiede sempre la password di root 2 volte e non 1?

    auth sufficient pam_winbind.so
    auth required pam_unix.so nullok_secure use_first_pass

  24. Scritto il 7 gennaio 2010 alle 18:11 | Permalink

    Ciao Marco,
    la configurazione di quel file è corretta.
    Controlla gli altri e soprattutto cosa viene loggato nel file /var/log/auth.log quando cerchi di autenticarti.

  25. Marco
    Scritto il 14 gennaio 2010 alle 17:11 | Permalink

    Grazie della risposta, e scusa se ti disturbo spesso, sto cercando di risolvere un problema lagato a i file access con Samba; praticamente tutti possono leggere e scrivere il file, ma se vi accedono più persone contemporaneamente, poco dopo appare un messaggio d’errore di rete. Leggevo qui http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/locking.html di questo “oplocks” e volevo capire se è la soluzione adatta a me. A te è già capitato di gestire file Access dove più persone leggono e scrivono? Grazie mille per l’eventuale risposta!

  26. Scritto il 15 gennaio 2010 alle 15:59 | Permalink

    Ciao Marco,
    io credo che se non hai esigenze specifiche l’ideale sarebbe quello di configurare “Exclusively Accessed Shares” in modo che i file possano essere modificati solo da un utente alla volta.
    Gestire accessi in cui più utenti accedono il scrittura contemporaneamente è una cosa molto, molto delicata, che peraltro, su file windows che verosimilmente sono Excel e Word sconsiglio vivamente…

  27. Marco
    Scritto il 15 gennaio 2010 alle 18:33 | Permalink

    Eh ma purtroppo questo è un database dove accedono per forza più persone…. Ahimè questa realtà è molto diffusa..

  28. Scritto il 17 gennaio 2010 alle 23:02 | Permalink

    Allora credo che l’unica cosa che ti rimane da fare è quella di seguire il link che hai indicato.
    Posta qui le tue impressioni, serviranno come completamento dell’articolo.
    In bocca al lupo!

Inserisci un commento

La tua mail non verra' MAI condivisa. I campi richiesti sono identificati da un carattere *

*
*
Inserisci il codice anti-SPAM: