Table of Contents

Semplice dominio con Samba

Vedere anche Samba e condivisione con MS-Windows.

Configurazione di server GNU/Linux Samba con le seguenti caratteristiche:

Installazione

Pacchetti Debian da installare:

Per semplificare l'amministrazione installare anche ssh (accesso da remoto), mc (contiene un editor user friendly per terminale text-only), tcpdump (sniffer di rete), binutils (contiene alcune utility).

Per vedere quali pacchetti sono installati:

dpkg --list | less

Per installare un pacchetto:

apt-get install <nomepacchetto>

File di configurazione:

/etc/samba/smb.conf File di configurazione principale di Samba.
/etc/samba/users.map Corrispondenza nomi utente Windows ↔ Unix.
/var/lib/samba/passdb.tdb Password utenti Windows.
/var/lib/samba/group_mapping.tdb Corrispondenza gruppi Windows ↔ Unix.
/etc/passwd Utenti Unix.
/etc/shadow Password utenti Unix.
/etc/group Gruppi Unix.
/etc/adduser.conf Permessi predefiniti per i nuovi utenti Unix.

Per ogni join di host a dominio verrà creato un account di sistema Unix. Gli account host apparterrano al gruppo machines, che viene creato con il comando:

addgroup --system machines

In /etc/samba/smb.conf il comando per aggiungere gli account host viene indicato da add machine script.

Amministrazione del servizio

Il servizio Samba viene avviato automaticamente al boot. Per fermare e avviare il servizio manualmente usare il comando:

/etc/init.d/samba {start|stop|reload}

L'opzione reload consente di rileggere il file di configurazione senza fermare il servizio.

Per vedere gli utenti connessi e i file in uso:

smbstatus

Debug

Samba scrive i propri file di log in /var/log/samba/, in questa directory si trovano diversi file:

log.nmbd nmbd è la componente di Samba che si occupa di fornire il servizio di naming NetBIOS su IP. In pratica gestisce la conversione nome/indirizzo IP e la funzione di browsing (sfoglia risorse di rete).
log.smbd smbd è la componente di Samba che fornisce il servizio di condivisione disco e stampanti.
log.machine File di log separato per la connessione proveniente da un particolare cliente.

Il livello di verbosità dei file di log viene controllato dal parametro log level contenuto in /etc/samba/smb.conf. Un valore pari a 2 di solito è sufficiente, in generale non è necessario andare oltre ad un log level 3.

Quote disco

Attivazione

Pacchetti Debian da installare:

File di configurazione:

/etc/fstab Aggiungere le opzioni usrquota e grpquota per le partizioni da sottoporre a quota.

Per attivare le quote utente e di gruppo su un filesystem si aggiungono le opzioni usrquota e grpquota nella riga opportuna del file /etc/fstab:

/dev/sda3   /home   ext3   rw,usrquota,grpquota  0  1

Il file viene letto al successivo reboot, al momento di montare i filesystem.

Non è consigliato attivare la quota su un filesystem mentre questo è montato in lettura/scrittura, quindi per attivarla sul root filesystem si approfitta degli script di avvio Debian: basta creare il file /var/lib/quota/new e riavviare il server:

touch /var/lib/quota/new
reboot

È possibile attivare la quota su un filesystem senza fare reboot, ma è necessario che non sia in uso perché qurante il quotacheck viene temporaneamente rimontato read-only. Ad esempio è possibie farlo su /home se questa è montata come partizione separata:

mount -o remount,usrquota,grpquota /home
quotacheck --user --group --create-files /home
quotaon /home

Per vedere se il meccanismo di quota è attivo su un filesystem:

quotaon -p /home
group quota on /home (/dev/sda3) is on
user quota on /home (/dev/sda3) is on

Amministrazione quote

La gestione delle quote disco deve essere eseguita da utente root. Per vedere lo stato della quota utente si usa il comando repquota (report quota):

repquota /home | less

Lo spazio occupato e la quota assegnata sono nella seconda e quarta colonna:

Block used Blocchi usati (un blocco = 1Kb).
Hard limit Limite non superabile dall'utente, in blocchi.

Per modificare l'impostazione di un utente si usa edquota (edit quota):

edquota mrossi

Viene avviato un editor (nel nostro caso si tratta dell'editor nano), basta modificare la colonna hard e salvare (Ctrl-X con nano).

Per modificare le quote di gruppo si usano gli stessi comandi, ma con l'opzione -g.

Gestione Samba

Creazione account Administrator

Ogni account Samba deve avere un corrispondente account Unix. L'account Administrator del dominio Windows corrisponde all'account root di Unix. Si tratta di due account distinti con password distinte.

Per definire la corrispondenza tra Administrator e root si aggiunge la seguente riga al file /etc/samba/users.map:

!root = "Administrator"

Per creare l'account root/Administrator e impostare la password si usa il comando:

smbpasswd -a root

Per verificare che l'account esista si usa il comando:

pdbedit -L -w
root:0:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:CB5CC2471AE978C4DB4B5F02B39AE53F:[U          ]:LCT-49F1DBCF:

Join host a dominio

Fare il join di un host (client Windows) a dominio significa creare un machine account in Samba. Un account macchina è simile ad un account utente, ma ha il nome che termina con il carattere $.

Dalla macchina Windows scegliere Pannello di controlloSistemaNome computerCambia.

Digitare il nome del computer e il nome del dominio. Per evitare problemi scegliere un nome computer che inizi con una lettera e contenga solo lettere e cifre, e che non sia più lungo di 15 caratteri.

Viene richiesta la password di Administrator del dominio.

Al termine dell'operazione verificare che l'account macchina sia stato creato in Samba, deve esistere un account Unix e un account Samba:

cat /etc/passwd
pdbedit -L -w

Creazione account utente

Ogni account Samba deve avere un corrispondente account Unix. Samba mappa l'utente Windows sull'utente Unix per stabilirne i permessi, ma si tratta comunque di due account distinti con password distinte.

Gli account Unix si creano e rimuovono con i comandi adduser e deluser, gli account Samba si creano con il comando smbpasswd -a e si rimuovono con il comando smbpasswd -x. La corrispondenza tra account Samba e account Unix (quando i nomi non sono identici) è definita nel file /etc/samba/users.map.

Le password Unix sono memorizzate in /etc/shadow e sono gestite con il comando passwd mentre le password Samba sono memorizzate in /var/lib/samba/passdb.tdb e sono gestite con i comandi smbpasswd e pdbedit.

Creare l'account Unix di nome mrossi per l'utente Mario Rossi. L'utente non ha la possibilità di accedere alla macchina Unix (ad esempio via ssh):

adduser --disabled-password --disabled-login --gecos "Mario Rossi" mrossi

Quindi creare l'account Samba, scegliendo una password:

smbpasswd -a mrossi

Aggiungere una riga al file /etc/samba/users.map:

!mrossi = "mrossi"

Oppure per consentire l'accesso digitando un nome e cognome:

!mrossi = "Mario Rossi"

Cambio password

Per cambiare la password un utente può utilizzare la funzione di Windows: premere Ctrl+Alt+Del e quindi cliccare su Cambia password….

L'amministratore Unix può intervenire da riga di comando con:

smbpasswd mrossi

Rimozione account

È necessario rimuovere sia l'account Samba che l'account Unix:

smbpasswd -x mrossi
deluser --remove-home mrossi

Infine bisogna togliere ogni corrispondenza tra nome Windows e nome Unix editando /etc/samba/users.map.

Condivisione cartelle

FIXME: Negli esempi che seguono compare l'opzione force directory security mode, che è stata rimossa da Samba 4.0.

Per comodità tutte le cartelle condivise tramite Samba sono contenute nella directory /home/samba/.

Attenzione: la direttiva force directory mode in alcuni casi non è sufficiente a garantire i permessi sulle cartelle create, ad esempio con client Mac. Diventa necessaria la force directory security mode, che interviene dopo che il client SMB manipola i permessi di sicurezza NT.

Cartella pubblica

Per condividere una cartella in lettura/scrittura con tutti gli utenti del dominio si crea una directory con gli opportuni permessi:

mkdir /home/samba/public
chmod 777 /home/samba/public

e si aggiunge una sezione in smb.conf:

[Public]
   comment = Directory pubblica
   path = /home/samba/public
   browseable = yes
   writable = yes
   locking = yes
   create mask = 0666
   directory mask = 0777
   force directory mode = 0777
   force directory security mode = 0777

Cartella di gruppo pubblica

Si tratta di cartella accessibile in lettura/scrittura a chi appartiene ad un certo gruppo, in sola lettura a tutti gli altri.

Bisogna creare il gruppo Unix e creare la directory assegnando i permessi giusti. Quindi si aggiunge uno o più utenti al gruppo. Dalla linea di comando Unix:

addgroup nomegruppo
mkdir /home/samba/nomegruppo
chmod 2775 /home/samba/nomegruppo
chgrp nomegruppo /home/samba/nomegruppo
adduser mrossi nomegruppo

La sezione da aggiungere in smb.conf:

[NomeGruppo]
   comment = Directory pubblica gruppo NomeGruppo
   path = /home/samba/nomegruppo
   browseable = yes
   writable = no
   write list = @nomegruppo
   locking = yes
   create mask = 0664
   directory mask = 02775
   force directory mode = 02775
   force directory security mode = 02775

Cartella di gruppo privata

Si tratta di cartella accessibile in lettura/scrittura a chi appartiene ad un certo gruppo, e a nessun altro.

Bisogna creare il gruppo Unix e creare la directory assegnando i permessi giusti. Quindi si aggiunge uno o più utenti al gruppo. Dalla linea di comando Unix:

addgroup gruppopriv
mkdir /home/samba/gruppopriv
chmod 2770 /home/samba/gruppopriv
chgrp gruppopriv /home/samba/gruppopriv
adduser mrossi gruppopriv

La sezione da aggiungere in smb.conf:

[GruppoPriv]
   comment = Directory privata gruppo GruppoPriv
   path = /home/samba/gruppopriv
   browseable = yes
   writable = no
   write list = @gruppopriv
   locking = yes
   create mask = 0660
   directory mask = 02770
   force directory mode = 02770

Cartella personale

Ogni utente ha una propria cartella personale (home directory) accessibile da lui stesso e da Administrator. Per fare in modo che la home directory per ogni nuovo utente abbia i permessi giusti modificare /etc/adduser.conf impostando:

DIR_MODE=2770

Nel file smb.conf è sufficiente una sola sezione [homes] per tutti gli utenti:

[homes]
   comment = Home Directories
   browseable = no
   read only = no
   create mask = 0660
   directory mask = 02770
   force directory mode = 02770
   force directory security mode = 02770
   valid users = %S

Per consentire ad Administrator di accedere a tutte le home directories si imposta la seguente sezione in smb.conf:

[home]
   comment = Home Admin
   browseable = yes
   path = /home
   read only = no
   valid users = root
   create mask = 0660
   directory mask = 02770
   force directory mode = 02770
   force directory security mode = 02770

Swat: amministrazione web

L'interfaccia di amministrazoine di Swat risponde all'URL http://samba_host:901/. Per accedere si possono utilizzare le credenziali dell'utente root Unix.

Backup e restore password Samba

È possibile fare un dump (export) di tutti gli account Samba esistenti (e le relative password) in un file:

pdbedit -e smbpasswd:/root/samba-users.backup

Per recuperare gli account e le password si esegue l'import

pdbedit -i smbpasswd:/root/samba-users.backup

Verificare lo UID nel file di esportazione: nel sistema destinazione gli utenti devono avere lo stesso UID. In alternativa è possibile editare il file smbpasswd che contiene il backup e modificare gli UID prima dell'importazione.

Troubleshooting

Login/password diversi per cartelle sullo stesso server

Quando Windows deve accedere ad una cartella condivisa tenta inizialmente usando la stessa login/password utilizzata per il logon, se fallisce chiede all'utente una nuova accoppiata login/password.

Se successivamente si tenta di accedere ad un'altra risorsa condivisa, ma che risiede sullo stesso server remoto, Windows non è in grado di utilizzare un login diverso. Il messaggio di errore è:

Le connessioni multiple a un server o a una risorsa condivisa da parte dello stesso utente,
utilizzando più di un nome utente, non sono consentite. Interrompere tutte le connessioni
precedenti al server o alla risorsa condivisa e riprovare.

Questo accade ad esempio se prima si accede ad una cartella in modalità Guest (e quindi qualunque login/password vengono accettati) e poi si tenta di accedere ad un'altra cartella per la quale è necessario un login/password diversi.

Per interrompere una connessione di rete, dal Prompt dei comandi si controlla quali sono attive e quindi la si interrompe:

net use

net use \\192.168.3.74\pdf /delete

Per qualche tempo la sessione con il server pare sempre funzionale, sebbene non compaia nell'elenco di net use. Si dice che per forzare la chiusura immediata della sessione si possa usare il comando:

net session \\192.168.3.74 /delete

Un workaround per utilizzare nome di login diversi sullo stesso server è indicato in questo post, in pratica si definisce un nome alternativo per lo stesso server (ad esempio mettendolo in C:\Windows\System32\drivers\etc\hosts) e si effettua il browse di tale risorsa di rete; Windows viene ingannato e non capisce che si tratta dello stesso server remoto. Oltre ad un nome diverso si può anche utilizzare l'indirizzo IP.

Protocollo NTLMv1

Alcuni device (es. stampanti multifunzione) utilizzano il protocollo SMB per dialogare con il mondo Windows, ma hanno versioni obsolete del protocollo di autenticazione. Ad esempio una multifunzione Ricoh MP3003 può invare le scansioni su uno share di rete con autenticazione, ma supporta solo il protocollo NTLM encrypted password response che è disabilitato per impostazione predefinita in Samba 4. Un tentativo di autenticazione fallisce con questo log:

ntlm_password_check: NTLMv1 passwords NOT PERMITTED for user username
ntlm_password_check: NEITHER LanMan nor NT password supplied for user username
check_winbind_security: Not using winbind, requested domain [WORKGROUP] was for this SAM.
check_ntlm_password:  Authentication for user [username] -> [username] FAILED with error NT_STATUS_WRONG_PASSWORD

Nonostante il fatto che Microsoft consigli di aggiornare il software incriminato (in questo caso sarebbe il firmware della multifunzione), è possibile accettare anche il protocollo deprecato impostando in smb.conf:

lanman auth = yes
ntlm auth = yes