====== Semplice dominio con Samba ======
Vedere anche **[[..:tux:samba]]**.
Configurazione di server GNU/Linux Samba con le seguenti caratteristiche:
* Configurazione PDC per gestione Dominio Windows
* Condivisione cartelle con possibilità di:
* cartelle personali
* cartelle pubbliche
* cartelle di gruppo private
* cartelle di gruppo pubbliche
* Permessi stile Unix
* Quote disco
===== Installazione =====
Pacchetti Debian da installare:
* **samba**
* **smbclient**
* **samba-doc**
* **swat**
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
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:
* **quota**
* **quotatool**
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 controllo//** -> **//Sistema//** -> **//Nome computer//** -> **//Cambia//**.
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 [[http://social.technet.microsoft.com/Forums/windows/en-US/f3ee2c61-a5c7-48b3-a3bf-23ea323da699/connecting-to-multiple-shares-on-a-single-server-with-multiple-credentials-system-error-1219-?forum=itprovistanetworking|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