Menu Chiudi

Samba, come condividere cartelle e gestire le ACL estese di M$ sfruttando gli utenti e i gruppi di Active Directory

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/
WordPress Appliance - Powered by TurnKey Linux