In allegato trovate uno script per l’installazione di Samba/Kerberos su di una Debian…. gentilmente postato dal buon Diaolin 🙂
L’obiettivo è quello di creare un server da utilizzare come “fileserver” sfruttando gli utenti presenti in un
dominio Windows AD per l’autenticazione e per la gestione delle ACL estese M$.
NB. Il server Samba DEVE consentire di poter gestire anche le ACL secondo la “filosofia M$”.
In allegato trovate uno script per l’installazione di Samba/Kerberos su di una Debian…. gentilmente postato dal buon Diaolin 🙂
L’obiettivo è quello di creare un server da utilizzare come “fileserver” sfruttando gli utenti presenti in un
dominio Windows AD per l’autenticazione e per la gestione delle ACL estese M$.
NB. Il server Samba DEVE consentire di poter gestire anche le ACL secondo la “filosofia M$”.
Prerequisiti:
– ntp per mantenere sincronizzati gli orologi tra i client, il server samba e i server di AD
– kerberos client installato sul server samba per effettuare il join con il dominio di AD
– samba configurato per l’utilizzo di kerberos
– il filesystem deve essere montato con gli attributi acl,user_xattr
Filesystem
Il filesystem dedicato alle cartelle condivise da samba DEVE essere montato con i seguenti parametri aggiuntivi:
acl – per abilitare le ACL estese provenienti dal mondo M$
user_xattr – per abilitare l’ereditarietà degli attributi (tra cartella padre e le sottocartelle/file)
es.
# cat /etc/fstab | grep acl UUID=afdf16a9-30b9-445f-aa10-e1ae360eb71d /condivisioni ext4 rw,acl,user_xattr 0 2
NTP
intallare e configurare il servizio NTP, il server samba e il server AD devono avere gli orologi sincronizzati
apt-get install ntp
cat /etc/ntp.conf .... # You do need to talk to an NTP server or two (or three). #server ntp.your-provider.example server SERVER_NTP_INTERNO # pool.ntp.org maps to about 1000 low-stratum NTP servers. Your server will # pick a different set every time it starts up. Please consider joining the # pool: #server 0.debian.pool.ntp.org iburst dynamic #server 1.debian.pool.ntp.org iburst dynamic #server 2.debian.pool.ntp.org iburst dynamic #server 3.debian.pool.ntp.org iburst dynamic ....
riavviare i servizi NTP
/etc/init.d/ntp restart
Kerberos
Installare e configurare kerberos
apt-get install krb5-user krb5-config krb5-doc
questo il file di configurazione di kerberos /etc/krb5.conf
[libdefaults] default_realm = NOMEDOMINIO.LOCALE # The following krb5.conf variables are only for MIT Kerberos. krb4_config = /etc/krb.conf krb4_realms = /etc/krb.realms kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true # The following libdefaults parameters are only for Heimdal Kerberos. v4_instance_resolve = false v4_name_convert = { host = { rcmd = host ftp = ftp } plain = { something = something-else } } fcc-mit-ticketflags = true [realms] NOMEDOMINIO.LOCALE = { kdc = IP_DEL_SERVER_AD admin_server = IP_DEL_SERVER_AD } [domain_realm] .miodominio.locale = MIODOMINIO.LOCALE miodominio.locale = MIODOMINIO.LOCALE [login] krb4_convert = true krb4_get_tickets = false
per testare la corretta configurazione di kerberos eseguire il seguente comando
kinit -V Administrator (richiede un ticket al KDC) klist (visualizza l'elenco dei ticket rilasciati dal KDC)
per cancellare i ticket ricevuti utilizzare il seguente comando
kdestroy
Modificare il numero massimo di file che possono essere aperti contemporaneamente
# cat /etc/security/limits.conf
* soft nofile 16384
* hard nofile 16384
le modifiche diventeranno effettive solo al successivo riavvio, per impostare il nuovo valore “al volo” eseguire un:
# ulimit -n 16384
Samba e Winbind
Installare samba e winbind
apt-get install samba smbclient smbfs winbind acl
Questo è un esempio di configurazione del file /etc/samba/smb.conf
[global] # nome del dominio workgroup = MIODOMINIO # nome del reame realm = MIODOMINIO.LOCALE # descrizione del server samba server string = %h server # abilito l'autenticazione tramite AD security = ADS obey pam restrictions = Yes # abilito la scrittura dei log 0 error, 1 warning, 2 notice, 3 info syslog = 0 # gestisco file di log specifici per ogni macchina connessa log file = /var/log/samba/log.%m # imposto la dimensione massima per ogni file di log max log size = 1000 # imposto alcune opzioni per migliorare le performance generali
# questo nella squeeze mi dava qualche problema e l'ho marcato :-| #socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 # disattivo la gestione delle stampanti tramite samba load printers = No show add printer wizard = No # presento il server al dominio come un membro di AD os level = 40 local master = No # disattivo il dns proxy in quanto il server non fa da wins dns proxy = No # impedisco agli utenti di utilizzare la funzionalita' "user defined shares" usershare path = # applicativo da eseguire se il sistema samba si "impasta" panic action = /usr/share/samba/panic-action %d # definisco il charset da utilizzare per la gestione di file e cartelle display charset = ISO8859-15 # disattivo eventuali template per gli utenti template homedir = /dev/null template shell = /bin/true # utilizzo idmpa_rid come back-end per il mapping degli utenti/gruppi AD e Linux idmap backend = idmap_rid:MIODOMINIO=10000-20000 # il back-end idmap_rid consente il mapping verso un SOLO dominio allow trusted domains = No # imposto il range per il mapping degli utenti idmap uid = 10000-20000 # imposto il range per il mapping dei gruppi idmap gid = 10000-20000 # imposto il carattere per dividere il nome dominio dal nome utente winbind separator = + # disattivo enumerazione degli utenti per migliorare le performance, NON sara' possibile utilizzare il comando getent users winbind enum users = No # disattivo enumerazione degli utenti per migliorare le performance, NON sara' possibile utilizzare il comando getent group winbind enum groups = No # imposto questo parametro per poter utilizzare direttamente il nome utente, senza dominio, tramite il comando wbinfo winbind use default domain = Yes # abilito il refresh del tickets kerberos per gestire i cambiamenti di appartenenza di un utente ai vari gruppi di AD winbind refresh tickets = true [nomeshare] comment = descrizione della share path = /percorsodellacartellacondivisa invalid users = root # consento solo agli amministratori di modificare le ACL admin users = "@domain admins" read only = No # https://www.samba.org/samba/docs/current/man-html/vfs_acl_xattr.8.html # la documentazione di samba riporta che il modulo e' "experimental" # ma dalle prove che ho fatto e' l'unica soluzione in grado di gestire # le ACL di Windows in modo corretto !! # # alla cartella "percorsodellacartellacondivisa" verranno impostati in automatico # i relativi permessi Unix e le relative ACL M$ durante il normale utilizzo da un # qualsiasi client M$ vfs objects = acl_xattr # faccio in modo che a ogni nuovo file/cartella creato vengano essegnati i permessi 0750 force security mode = 0750 # per far mappare l'ereditarietà dei permessi map acl inherit = Yes
Nota relativa al modulo acl_xattr
La share che lo utilizza non deve essere direttamente il mountpoint ma una sottocartella (es.: se ho montato il filesystem /dev/sdb1 in /mnt/pippo/ devo condividere la cartella /mnt/pippo/pluto ) altrimenti il modulo non funziona.
Test file di configurazione
Utilizzare il seguente comando per verificare la corretta configurazione del file /etc/samba/smb.conf
testparm
Impostazione preliminare dei permessi sulla cartella padre
– mappare la cartella condivisa da un client (utilizzando un utente che abbia i relativi permessi)
– rimuovere eventuali gruppi/utenti non desiderati dalle permission del disco mappato
– NB. rimuovere il gruppo everybody e il gruppo impostato nel parametro “admin users” di Samba per consentire
al parametro “force security mode” di lavorare correttamente
– impostare il flag “Consenti di propagare a questo oggetto le autorizzazioni ereditabili dal padre”
Migrazione di file/cartelle dal mondo M$ verso Samba, conservando le relative ACL
Lato Windows, utilizzare l’applicativo robocopy.exe disponibile nel M$ Resource Kit
es.
robocopy d:\ z: /mir /e /copy:DATS /log:c:\robocopy.log
nell’esempio:
– vengono copiate tutte le cartelle presenti nel disco D: in Z:
– il parametro “/mir” cancella eventuali file non più presenti nel disco D: dal disco Z: (attenzione !!!)
– il parametro “/e” copia anche eventuali cartelle vuote
– il parametro “/copy:DATS” copia i file, gli attributi, i vari timestamps e le NTFS Security (ACLs)
– ho appositamente omesso il parametro “/O” (ownership information) in quanto viene gestito in
automatico dal modulo acl_xattr di Samba
– viene loggato il tutto su di un file esterno c:\robocopy.log
Alcune note relative a robocopy (la versione che ho utilizzato e’ la XP010):
– non è infallibile 😐
– ho riscontrato alcune incongruenze, comunque segnalate tutte sul file di log, durante la copia
di alcuni file/cartelle
In conclusione:
– tutte le anomalie riscontrate da robocopy vanno sistemate a manina !
Configurazione di PAM
Modifichiamo i file relativi all’autenticazione linux
NB. la modifica dei file PAM in debian squeeze NON serve piu’ !!
credo ci pensi direttamente la procedura di installazione di winbind.
# # /etc/pam.d/common-auth - authentication settings common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of the authentication modules that define # the central authentication scheme for use on the system # (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the # traditional Unix authentication mechanisms. # #auth required pam_unix.so nullok_secure auth sufficient pam_winbind.so auth sufficient pam_unix.so nullok_secure use_first_pass
# # /etc/pam.d/common-account - authorization settings common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of the authorization modules that define # the central access policy for use on the system. The default is to # only deny service to users whose accounts are expired in /etc/shadow. # #account required pam_unix.so account sufficient pam_winbind.so account sufficient pam_unix.so
# # /etc/pam.d/common-session - session-related modules common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of modules that define tasks to be performed # at the start and end of sessions of *any* kind (both interactive and # non-interactive). The default is pam_unix. # # session required pam_unix.so session required pam_mkhomedir.so skel=/etc/skel/ umask=0077 session required pam_unix.so
NB. la modifica di nsswitch.conf invece serve !!
# /etc/nsswitch.conf # # Example configuration of GNU Name Service Switch functionality. # If you have the `glibc-doc-reference' and `info' packages installed, try: # `info libc "Name Service Switch"' for information about this file. passwd: compat winbind group: compat winbind shadow: compat hosts: files wins dns networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis
Aggiungiamo la macchina al dominio
net ads join -U Administrator
Facciamo ripartire i servizi samba e winbind
/etc/init.d/samba restart /etc/init.d/winbind restart
e attendiamo circa un minuto prima di procedere ai vari test di funzionamento.
Alcuni comandi utili per testare la corretta integrazione tra Samba e AD/Kerberos:
NB. i seguenti comandi, nel nostro caso NON restituiranno alcun valore in quanto i parametri "winbind enum users" e "winbind enum group" sono stati impostati a "No" getent passwd (restituisce l'elenco degli utenti locali e aggiunge in coda quelli di AD getent group (restituisce l'elenco dei gruppi locali e aggiunge in coda quelli di AD)
wbinfo -u (restituisce l'elenco degli utenti di AD wbinfo -r (restituisce l'elenco dei gruppi di AD)
NB. è possibile utilizzare gli utenti e i gruppi di AD per impostare i vari permessi per le cartelle e
i file presenti sul file server.
es.
# chgrp 'NOME GRUPPO AD' test.txt # ls -l test.txt -rw-rw-r-- 1 root NOME GRUPPO AD 8 12 ago 09:04 test.txt
E’ POSSIBILE CONFIGURARE UN “CLIENT” LINUX (es. Ubuntu) PER L’AUTENTICAZIONE KERBEROS
In questo modo è possibile sfruttare il single sign on anche su macchine linux.
#apt-get install ntp #apt-get install libnss-ldap ----> NO #apt-get install libpam-cracklib #apt-get install samba-common winbind #apt-get install krb5-user krb5-config krb5-doc libpam-krb5
# /etc/pam.d/common-auth auth sufficient pam_krb5.so ccache=/tmp/krb5cc_%u auth sufficient pam_unix.so likeauth nullok_secure use_first_pass auth required pam_deny.so # /etc/pam.d/common-account account required pam_unix.so account [default=bad success=ok user_unknown=ignore service_err=ignore system_err=ignore] pam_krb5.so minimum_uid=10000 # /etc/pam.d/common-session session required pam_unix.so session optional pam_foreground.so session optional pam_krb5.so minimum_uid=10000 session required pam_mkhomedir.so umask=0077 skel=/etc/skel
# /etc/nsswitch.conf passwd compat winbind group compat winbind
è necessario ovviamente configurare samba anche lato client e aggiungere la macchina al dominio AD.
Link utili:
http://searchenterpriselinux.techtarget.com/tip/Samba-3-Windows-file-and... https://ss64.com/nt/robocopy.html http://www.dia.unisa.it/~ads/corso-security/www/CORSO-0001/kerberos/ https://wiki.samba.org/index.php/Samba_&_Active_Directory https://help.ubuntu-it.org/9.10/ubuntu/serverguide/it/kerberos-ldap.html http://sourceforge.net/apps/mediawiki/pam-krb5-ldap/index.php?title=Main... http://buechse.de/HOWTO/samba_pam_mount_sshd/