
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 = 0775dopo 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


44 Commenti
Ciao! Complimenti per la guida!! Direi perfetta
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
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’è?
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.
Diciamo che funziona tutto perfettamente fino alla parte 2di3 di questa guida
Spero di non sembrare seccante, ma volevo informarti sulle novità
Ma non so se è questo il metodo giusto!
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
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!
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
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.
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?
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.
Va bene, grazie
)
Però in un nas è meno macchinoso perchè non devi creare gruppi, ma associ gli utenti direttamente. (E tu dirai..usa un nas allora!
approfitto della conoscenza se permetti
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
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.
Ho verificato che se uso questo comando “valid users = @”DOMINIO\gruppo””
non mi fa accedere più alla cartella chiedendo sempre user e password..
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.
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?
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.
Il motivo del 2 prima del 770 nel chmo è il setgid, leggi qui: http://it.wikipedia.org/wiki/Setuid_e_setgid.
Ecco, così ha senso
A presto!
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
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.
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?
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
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
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.
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!
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…
Eh ma purtroppo questo è un database dove accedono per forza più persone…. Ahimè questa realtà è molto diffusa..
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!
Ciao, complimenti per l’ottima guida! l’ho seguita passo passo e sono riuscito a diventare parte del dominio active directory. ho però un problema:
ho ubuntu 9.10 che si collega ad un server microsoft server 2008.
nella finestra di accesso ad ubuntu, se entro con il nome utente e password di un membro del dominio active directory , parte il caricamento di ubuntu (e sono sicuro che mi riconosce perche al primo accesso mi ha creato la home directory) però dopo qualche secondo mi torna alla schermata di accesso dove devo inserire username e password!
se invece cerco di effettuare l’accesso tramite console testuale mi fa accedere ma mi compare una negazione dei permessi per quanto riguarda la directory “./profile”, così:
“-bash /home/MIODOMINIO/gianluca/.profile: Permesso negato”
Hai qualche idea per risolvere? grazie mille in anticipo!
Ciao Gianluca,
la cosa migliore da fare è controllare i permessi delle directory locali e spulciare i log per capire quel “permesso negato” a cosa si riferisce.
Se la login avviene a livello di autenticazione con il server sei a posto, pertanto il problema è locale.
A presto!
intanto grazie mille della risposta tempestiva..
mi trovo un pò spaesato in questo contesto, potresti essere un pò più dettagliato su cosa potrei fare per capire da cosa proviene quel “permesso negato”?..
a quali file di log devo fare riferimento?
I log di samba si trovano nella cartella /var/log/samba. Qui troverai diversi file, ma quelli che interessano te sono principalmente tre:
- log.nmbd: che contiene informazioni sul comportamento del demone all’interno della rete;
- log.smbd: che contiene informazioni sull’iterazione con gli utenti (e questo potrebbe interessarti);
- log.winbind: che contiene informazioni sull’iterazione di samba con il dominio;
Io darei un occhio a tutti e tre per vedere se contengono qualcosa di evidente, ma più che altro mi metterei in tail su log.smbd e proverei a fare un login per vedere cosa viene loggato.
Ciao!
Ciao, complimenti per la guida.
Vorrei aprofittare della tua esperienza per una consulenza se puoi;
ho aggiunto a un dominio win2003 AD un server con CentOS 5.4 x86_64 con la home divisa in due, 100GB per una macchina virtuale win2003 e 100GB da condividere con samba per gli utenti del dominio.
Ho realizzato la configurazione utilizzando le Tue linee guida, salvo avere dei problemi con la parte relativa allo share; io volevo che solo gli utenti di dominio che fanno parte del gruppo denominato “Servizio pippo” acceda a questa condivisione sia in lettura che in scrittura e in maniera anche multipla su file .mdb di access, oltre che al gruppo Administrator.
Per fare ciò ho inserito la direttiva:
valid users = %D+%S ma questa direttiva dava accesso a tutti gli utenti di AD;
dopo un po’ di prove ho realizzato che la direttiva giusta era:
valid users = @%D+”Servizio pippo”
mentre per l’utente amministratore ho dovuto inserire il nome dei due utenti singoli che sono anche amministratori di dominio perchè la direttiva
valid users = @%D+”Administrators” non funzionava.
Sul file system ho dato come permessi alla directory base ” chmod -R 774″ e come proprietari ho dato “chown -R root:domain users”.
Secondo Te è giusto quello che ho fatto?
Ci sono altri parametri che dovrei specificare nella sezione share?
io ho inserito anche:
create mask = 774
directory mask = 774
msdfs root = yes
dos filemode = yes
inherit permissions = yes
vanno bene o sono superflui?
Grazie.
Ciao Maurizio,
il modo in cui hai specificato gli utenti ed i gruppi è corretto, potresti valutare per lo share di definire alla stessa maniera direttive relative alla “write list” ed alla “read list”.
Riguardo ai permessi locali che hai assegnato via chmod, sconsiglio di mettere 774, in quanto che tutti possano leggere, da quel che ho capito, a te non interessa. Considera quindi che 770 potrebbe essere una scelta vincente.
Per il resto l’opzione specifica “msdfs root” l’hai dichiarata con il valore di default che comunque verrebbe considerato, per cui è superflua.
“dos filemode” e “inherit permissions” io in genere tendo sempre a non utilizzarle in favore di una configurazione locale dei permessi coerente, il fatto che tu abbia assegnato la dir a tutto il gruppo “Domain users” e che questo abbia permesso di scrittura comporta per forza problemi.
In genere io creo gruppi AD specifici a cui assegno i permessi delle dir su SAMBA ed assegno a “valid users” il valore “@DOMINIO\Mio gruppo” o “@DOMINIO+Mio gruppo” che dir si voglia.
Spero di aver chiarito i tuoi dubbi.
Dubbi chiariti!
Grazie mille per l’attenzione dedicatami e la velocità della risposta.
Mi inchino alla tua chiarezza e ti ringrazio infinitamente.
3 articoli spettacolari e utilissimi.
Grazieeee !
Grazie per le guide e le risposte che ho trovato estremamente chiare ed esaurienti.
Ho agganciato ad un’AD 2 server ubuntu che fungono da file server e vanno benissimo.
solo che in uno, quando accedo finisco nella cartella /NOMEDOMINIO/HOME/UTENTE
mentre nell’altro, viene creata una cartella /XXXX/HOME/UTENTE
dove XXXX è un numero (spesso diverso, ma non sempre)
potresti darmi una mano anche su questo?
ancora, grazie mille per il lavoro
Ciao,
le configurazioni dei due server sono identiche? Perché ciò che precede HOME/UTENTE dovrebbe essere appunto coerentemente il nome dominio.
Dovresti controllare queste cose in particolare come vengono esportate le directory relative ai profili.
In bocca al lupo!
infatti sto verificando ancora una volta l’allineamento delle 2 configurazioni. ma trovo tutto apparentemente identico. /krb5.conf, /smb.conf…
grazie comunque!
Molto strano, la home directory degli utenti puoi capirla da qui:
$ for i in `wbinfo -u –domain=DOMINIO.IT`; do wbinfo -i “$i”; done
DOMINIO.IT\user1:*:10000:10004:User 1:/home/DOMINIO.IT/user1:/bin/bash
DOMINIO.IT\user2:*:10001:10004:User 2:/home/DOMINIO.IT/user2:/bin/bash
DOMINIO.IT\user3:*:10002:10004:User 3:/home/DOMINIO.IT/user3:/bin/bash
DOMINIO.IT\user4:*:10003:10004:User 4:/home/DOMINIO.IT/user4:/bin/bash
In base al responso di questo comando hai un’idea chiara di come sono associate le home.
scusa per il ritardo! infatti e’ evidente che qualcosa non e’ corretto nella configurazione. la risposta alla stringa d’interrogazione è
“Could not get info for user .NOME_UTENTE.”
(anche dopo aver fatto un kinit -V e da sudo)
il problema è che ho una 20na di utenti che già lavorano nelle condivisioni di SAMBA, altrimenti piallavo e ripartivo daccapo
Di conseguenza il problema è relativo al demone winbind. E’ avviato? Cosa dicono i log?
grazie per la tua pazienza.
quali log di preciso?
qui riporto un sunto di ‘log.winbindd-idmap’
—————–
[2010/05/27 13:21:19, 0] winbindd/idmap.c:149(smb_register_idmap)
Idmap module nss already registered!
[2010/06/03 08:38:50, 0] winbindd/idmap.c:201(smb_register_idmap_alloc)
idmap_alloc module tdb already registered!
[2010/06/03 08:38:50, 0] winbindd/idmap.c:149(smb_register_idmap)
Idmap module passdb already registered!
[2010/06/03 08:38:50, 0] winbindd/idmap.c:149(smb_register_idmap)
Idmap module nss already registered!
————–
e di ‘log.winbindd-dc-connect’
————–
[2010/04/06 08:26:11, 1] libads/cldap.c:154(recv_cldap_netlogon)
no reply received to cldap netlogon
[2010/04/29 13:56:42, 1] libads/cldap.c:154(recv_cldap_netlogon)
no reply received to cldap netlogon
————–
indubbiamente non sono allettanti, ma non saprei come correggere.
No, non si capisce molto da questi log, ma continuo ad essere convinto che il problema dipenda da Winbind.
Prova a ricontrollare le conf. C’è di sicuro qualcosa che non torna lì.