venerdì 24 aprile 2009

Ubuntu Client in Samba Domain

Questi sono i passi che ho fatto per mettere una workstation Ubuntu 9.04 in un dominio Windows gestito da Samba. Pacchetti da installare: winbind samba samba-common libpam-mount smbfs File da modificare: /etc/pam.d/common-account:
account sufficient pam_winbind.so
/etc/pam.d/common-auth
#auth required pam_cups.so debug
auth required pam_mount.so use_first_pass
auth sufficient pam_winbind.so use_first_pass
auth required pam_unix.so nullok_secure use_first_pass
/etc/pam.d/common-session
session required pam_unix.so nullok_secure
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
#session optional pam_cups.so debug min_uid=1000
session optional pam_mount.so
/etc/pam.d/common-password
password sufficient pam_winbind.so
password required pam_unix.so nullok obscure min=4 max=8 md5
/etc/security/pam_mount.conf.xml

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd">
<pam_mount>

<debug enable="0" />

<luserconf name=".pam_mount.conf.xml" />

<mntoptions allow="nosuid,nodev,loop,encryption,fsck,nonempty,allow_root,allow_other" />
<mntoptions require="nosuid,nodev" />
<path>/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin</path>

<msg-authpw>password:</msg-authpw>
<msg-sessionpw>reenter password:</msg-sessionpw>

<logout wait="0" hup="0" term="0" kill="0" />

<mkmountpoint enable="1" remove="true" />

</pam_mount>
/etc/samba/smb.conf
workgroup = DOMAIN
server string = %h
security = domain
encrypt passwords = true
wins server = xxx.xxx.xxx.xxx
password server = *
domain master = false
preferred master = false
local master = no
lm announce = false
hosts allow = xxx.xxx.xxx.xxx, 127.0.0.1
hosts deny = all
socket options = TCP_NODELAY IPTOS_LOWDELAY
log file = /var/log/samba/log.%U
log level = 2
pam password change = yes
interfaces = eth0, lo
winbind uid = 1000-10000
winbind gid = 1000-10000
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
winbind cache time = 15
template shell = /bin/bash
template homedir = /home/%U
/etc/nsswitch.conf
passwd:         compat winbind
group:          compat winbind
shadow:         compat
Dopo aver modificato i file riavviare samba e winbind. Effettuare il join nel dominio: net rpc join -S serverpdc -U root Effettuare una verifica wbinfo -u wbinfo -g Dovrebbero venire visualizzati tutti gli utenti e i gruppi del dominio. Ora non rimane che configurare pam_mount per montare le cartelle degli utenti al login. Io ho impostato che venga caricato un file di configurazione di pam_mount diverso per ogni utente, il file si deve trovare nella home dell'utente e si deve chiamare .pam_mount.conf.xml. Questo nome lo si può cambiare modificando nel file /etc/security/pam_mount.conf.xml il parametro <luserconf name=".pam_mount.conf.xml"></luserconf> Questo è un esempio del file .pam_mount.conf.xml:

<pam_mount>
<volume fstype="smbfs" server="doaminserver" path="folder1" mountpoint="~/Server/folder1" />
<volume fstype="smbfs" server="domainserver" path="folder2" mountpoint="~/Server/folder2" />
<volume fstype="smbfs" server="domainserver" path="%(USER)" mountpoint="~/Server/%(USER)" />
</pam_mount>
Dove path è la cartella condivisa sul server, mountpoint è dove verrà montata la cartella. Riavviare il client e il gioco è fatto. Problemi D. Il comando su con utente di dominio non funziona.. R. Ho risolto modificando il file sudouser (visudo) aggiungendo gli utenti hai quali voglio abilitare il comando su. Fonti: http://foss.stat.unipd.it/mediawiki/index.php/Debian_Client_in_a_Samba_Domain http://tech.canterburyschool.org/tech/UbuntuWorkstations/AuthenticationSetup

30 commenti:

Pioneer Skies ha detto...

Ciao,
il tuo post è stato molto utile per orientarci all'interno di una serie di possibilità e di scelte. Alla fine io ed un mio collega abbiamo utilizzato un approccio diverso dal tuo data la nostra diversa situazione e le diverse esigenze, però sono state importanti le tue informazioni su pam_mount.

Volevo segnalarti questa cosa che abbiamo scoperto approfondendo e studiando: le seguenti parti che tu consigli di modificare

(tolgo le virgolette angolari <> perché i tag non sono accettati nel commento e le sostituisco con [])
[msg-authpw]password:[/msg-authpw]
[msg-sessionpw]reenter password:[/msg-sessionpw]
servono in sostanza - come si legge nella guida che hai linkato a fondo pagina - ad abbellire e rendere più user friendly la seconda richiesta di password al logon sul client Linux. Volevo solo segnalarti che quell'inconveniente è facilmente aggirabile ordinando meglio le autorizzazioni per il modulo pam_mount all'interno dei singoli stack (common-*); questo, mi risulta, a prescindere da dalle personalizzazioni che ognuno sceglie. Infatti pam_mount non supporta l'opzione "use_first_pass" e per questo non utilizza la pwd immessa per i moduli precedenti, ma la richiede.

Io ho appena risolto la cosa su una test box con Ubuntu 9.04. Se volessi chiarimenti rispondimi qui che tanto mi sto "abbonando" alle risposte con avviso via mail. ^_^

Grazie ancora per la tua condivisione.

Pioneer Skies

Davide Barbaria ha detto...

ok, ma se volessi uno script che mi imposti il proxy automaticamente su mozilla al Log in degli utenti?

loziopigna ha detto...

X Pioneer

Grazie delle dritte, molto utili ;)

X Davide

Purtroppo Mozilla Firefox non supporta nativamente la configurazione esterna del proxy (alemno che non utilizzi il .pac), quindi diventa difficile automatizzare la configurazione al logon dell'utente, sia su client windows che client linux.

Io ho installato una estensione per firefox (FoxProxy) e gli faccio caricare un file proxy.pac locale sincronizzato con la copia centralizzata sul server.

Se hai bisogno di dettagli chiedi pure :D

Davide Barbaria ha detto...

su windows nn è proprio vero che nn si possa automatizzare la procedura su client utilizzando un file proxy.pac. Nella mia rete succede da tempo tramite uno script opportunamente inserito su netlogon. Su linux l'ho risolta per il momento copianto a manina sul client dentro la cartella pref di Mozilla, un file "all.js" opportunamente modificato. ciauz

loziopigna ha detto...

Davide potresti darmi un esempio?

Per i Client Windows io ho risolto mettendo nella netlogon uno script che mi modifica il parametro del registro di windows e setta in IE il caricamento di un file proxy.pac salvato in una condivisione. Non ho utilizzato la configurazione automatica tramite dhcp, dns e web server perchè voglio avere la possibilità di modificare la conf utente per utente.
Questo però funziona per Internet Explorer e tutti i software che prendono la configurazione da IE (es. Chrome di default).
Per firefox non ho trovato nulla, se non impostare a mano profilo per profilo il caricamento del proxy.pac, se tu, per FF, hai trovato una soluzione migliore mi farebbe molto comodo :D.

Stesso discorso per Linux, non ho capito molto bene cosa intendi per "file all.js opportunamente modificato".

Grazie per le dritte ;)

Davide Barbaria ha detto...

allora sui client windows, dopo aver installato Mozilla firefox, esiste una cartella (mi pare grep pref) ove trovi di default un file (all.js): prova ad aprirlo con notepad e cerca una voce
pref("network.proxy.autoconfig_url", "URL del documento .pac");

salva. Ti basta copiarlo su ogni client.

Per i client ubuntu nn ricordo però il percorso esatto (dovrebbe sicuramente essere sotto /etc

loziopigna ha detto...

Ok Davide, in quel modo in effetti si riesce, però devi modificare le installazioni di firefox e se per caso devi cambiare il percorso o il nome del proxy.pac devi fare il giro dei client a modificare quel file.

Io invece intendevo un sistema per modificare la conf del proxy (quindi anche dove andare a caricare il file proxy.pac)al login dell'utente. Così da poterla personalizzare utente per utente. Nel mio script, come accennato, vado a modificare la chiave del registro dove ie và a leggere la configurazione, in questo modo dalla notte al giorno posso modificare la configurazione a tutti i 200 user della rete :D, e soppratutto se per caso un utente mi và a modificare la conifugrazione, al prossimo login gli viene ripristinata (comodo per i portatili).

Una soluzione equivalente per FF forse potrebbe essere quella di creare uno script che và a copiare il file all.js al login dell'utente.
Ciao

Davide Barbaria ha detto...

in effetti hai ragione, nella mia rete di solito nn cambio mai il proxy.pac che viene fornito sempre dal Pdc e di solito (dato x scontato che la soluzione IE funziona alla grande) x chi ha voglia di usare firefox ha solo l'obbligo di rispondere si alla domanda "importo le preferenze da IE". Fatto questo si ritrova cmq la configurazione. Ad ogni modo lavoro a stretto contatto con gli sviluppatori samba e sto studiando il modo di trovare una soluzione a FF montato di default nei client ubuntu che stanno via via crescendo nel mio dominio. Grazie al tuo post (pur se con qualche msg di errore) ho configurato diversi client 9.04 a dominio, ma ho notato che x le 8.04 le medesime modifiche nn portano allo stesso risultato.

loziopigna ha detto...

Dimmi che tipo di msg di errore di appare così magari correggo il post :D.

Anche nella mia rete non cambia spesso il percorso del file .pac, però a volte ho la necessità di disabilitare a qualche user la conf del proxy, quindi mi fà comodo poterla gestire in modo automatica tramite lo script di login.

Per FF cmq ho trovato un'estensione che permette di caricare la configurazione in una cartella di rete (FoxProxy), e per il momento la trovo abbastanza comoda.

X la 8.04 le cose cambiano un pochino perchè le release dei software utilizzate sono diverse, e di consguenza anche la configurazione, però tra un pò esce la nuova release TLS e quindi non ha molto senso installare la 8.04 (anche perchè uscirà dalla manutenzione).

In tutti i modi sono contento che il mio post sia servito a qualcuno, io ho dovuto abbandonare i client Ubuntu per problemi legati al software che utilizziamo, però mi piacerebbe un domani poter riprendere il discorso :D.

Davide Barbaria ha detto...

si si trattava di un errore in fase di cambio utente da shell, ma che comunque mi consentiva di fare ugualmente; però dai ne sto configurando un altro, se possibile te lo posto

Ps quindi possono andare anche x una 9.10 ?

loziopigna ha detto...

Si, puoi andare anche con la 9.10, anche se ti consiglio di aspettare la 10.04 che se non erro dovrebbe uscire in aprile.

Pioneer Skies ha detto...

Ciao ragazzi,
vi dico la mia soluzione, che da quanto capisco non è perfetta per voi altri, ma magari può servirvi come ispirazione ;).
La rete dove lavoro utilizza un DHCP, tramite il quale assegno indirizzi a più subnet. Il DHCP server passa ai client delle configurazioni per raggiungere un file di auto-configurazione del proxy wpad.dat, quindi tutti i client in DHCP lo possono sfruttare. wpad.dat, che è fisicamente su un server della LAN (un server web interno per la precisione, così da indicare l'indirizzo del file nel formato http://server/wpad.dat), all'interno consente di direzionare ad un proxy o a diversi proxy diversi client secondo diverse condizioni (per esempio in base ad IP, subnet, ed altre). In questo modo IE, che ha come impostazione di default "rileva automaticamente impostazione proxy", funziona out-of-the-box; in FF invece è necessario che sul client sia selezionata l'opzione equivalente. Siccome questa opzione non richiede l'inserimento di alcun indirizzo, sono state date le istruzioni agli utenti per modificarla, restando comunque un'operazione che va fatta una tantum. Non è poi detto che se fosse necessario si possa automatizzare questa faccenda.
Fatto sta che con questa soluzione riesco a controllare in modo centralizzato verso quale proxy mandare ogni PC ed in modo autonomo dal sistema operativo, dal PDC e da ogni cosa.

Saluti a tutti e buon lavoro,
Alessandro

loziopigna ha detto...

Ciao Pioneer Skies, e grazie per la dritta.

Quello che descrivi tu è il classico utilizzo del file .pac, cioè con l'auto-configurazione.

Io l'avevo provato ma mi ero incappato in qualche problema di configurazione con dei client (che sinceramente non ricordo neanche più) e quindi l'avevo abbandonato e non ci ho più provato.

P.S.
Un problema che ho avuto con i client linux riguarda le regole dentro al file .pac basandomi sugli indirizzi IP. Praticamente non funzionava perchè il browser mi risolveva l'indirizzo della macchina come 127.0.0.1 invece dell'indirizzo IP.Per ovviare a questo problema ci sono 2 modi:
Modifcare il file /etc/hosts settando l'ip corretto per localhost
Modificare il file /etc/nsswitch.conf dando precedenza alla risoluzione dei nomi tramite DNS (non sempre funziona però).

Ciao.

Davide Barbaria ha detto...

ecco il problema: ho appena configurato una 9.04; pur vedendo gli utenti di ominio (wbinfo -u) appena cerco di loggarmi mi restituisce
pam_mount(rdconf1.c:667): path to luserconf set to /home/nomeutenteloggato/.pam_mount.conf.xml
e si logga con l'utente locale creato precedentemente. come mai?

loziopigna ha detto...

Prova a loggarti con un utente del domino che non esiste localmente.

Se non ricordo male Linux dà la precendeza alle utenze locali, se l'utente non esiste nel passwd allora và a leggere le info del dominio.

Davide Barbaria ha detto...

eh si è proprio quello che ho fatto! io provo ad autenticarmi con un utente di dominio e il sistema mi fa entrare ma in alto a destra mi indica che sono loggato come l'utente locale che avevo creato precedentemente.

Davide Barbaria ha detto...

caspita mi dimentico sempre di farmi inviare le risposte alla mia mail.. ecco fatto!

loziopigna ha detto...

Questo è strano, curiosità se da console digiti:
#id
Le info (id, gid) che escono sono dell'utente del domino o dell'utente locale?

Davide Barbaria ha detto...

uid=0(root) gid=0(root) gruppi=0(root),1000(davide),1001(domain admins),1002(internet)

questo è quello che mi restituisce: tieni presente che "davide" nn esiste come utente di dominio, ma esistono i gruppi "Domain admins" e "internet"

Davide Barbaria ha detto...

scusa devo essere preciso:
una volta loggato con l'ipotetico utente di dominio (e nn da root) mi restituisce:
uid=1000(davide) gid=1000(davide) gruppi=1000(davide),1002(internet)

loziopigna ha detto...

Hai controllato che l'id dell'utente di dominio e dell'utente locale siano diversi?

Davide Barbaria ha detto...

no no è tt ok, era solo un problema legato a quell'utente di dominio. Funge, grazie mille

loziopigna ha detto...

Bene, sono contento ;)

Anonimo ha detto...

Post davvero utile. Quali sono i modi in cui un utente di dominio loggato sulla sua macchina può cambaire la password di dominio?
E' possibile farlo da GUI o bisogna usare il terminale?
grazie
alessio

loziopigna ha detto...

Il cambio password lo fai normalmente come fosse un utente locale.

Non come si chiama il programma GUI (prova a vedere Gestione Utenti), io sono un amante della console....

Alessio ha detto...

Pure io amo la console ed devo eseguire il comando smbpasswd -r "Nome Server" - U Utente. non capisco perchè non basti il comando passwd e basta. Il problema è come dire ad un utente che per cambaire la password deve aprire un terminale.

Con l'interfaccia grafica di Ubuntu ad esempio inserisco la vecchia password, seleziona autentica, e non succede più nulla.

loziopigna ha detto...

Prova a controllare la configurazione di pam e winbind.

Alessio ha detto...

Ho risolto il problema della password controllando meglio i parametri di common-password. Che tu sappia è possibile vedere nell'interfaccia gdm l'elenco degli utenti di dominio, che si sono già loggati correttamente sulla macchina. grazie

loziopigna ha detto...

@Alessio
No, non sò come si possa fare, però se trovi il modo dimmelo ;).

Alessio ha detto...

Mannaggia...
Gli utenti compaiono nella schermata di login solo se sono max di 8 caratteri...
Si tratta di un bug:
https://bugs.launchpad.net/ubuntu/+source/gdm/+bug/476811