Vedere anche Samba e condivisione con MS-Windows.
Configurazione di server GNU/Linux Samba con le seguenti caratteristiche:
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
.
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
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.
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
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.
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:
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
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"
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
È 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
.
: 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.
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
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
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
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
L'interfaccia di amministrazoine di Swat risponde all'URL http://samba_host:901/. Per accedere si possono utilizzare le credenziali dell'utente root Unix.
È 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.
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.
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