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