Installare Samba come Active Directory Domain Controller su Linux Centos 7

Prefazione:

Questo articolo permette di avere una installazione completamente funzioante, anche se ancora si tratta di un work in progress, stay tuned.

da fare:

  • server di stampa
  • backup domain controller (già fatto, ma  non documentato)
  • quello che servirà

 

 

Samba è un ottimo fileserver su *nix e Linux che permette di condividere files in modo efficace tra il mondi Windows, Mac e *nix.

Da sempre è stato possibile emulare un Pimary Domain Controller in stile NT4 (risale ormai al paleolitico informaticamente parlando),  che ormai richiedeva una patch del registro di di Windows per poter funzionare.

La nuova release di Samba 4 ha infatti apportato moltissime modifiche:

  • Samba 4 veste alla grande il ruolo di un  Domain Controller Active Directory. È quindi possibile utilizzare i tool di gestione presenti nei server Windows 2000/2003, gestire le group policies per i client Windows, aggiungere indifferentemente ulteriori server Windows e/o Linux all’infrastruttura di rete
  • non è più necessario utilizzare come backend un database LDAP, poiché Samba 4 integra un proprio database LDAP modificato per avere compatibilità verso i database LDAP di Microsoft Active Directory
  • è stato ingrato in Samba un servizio di Caching DNS che permette di non sapere niente di Bind
  • la condivisione delle risorse avviene direttamente modificando le proprietà di condivisione della risorsa
  • la gestione del sistema avviene con la logica dell’AD (Active Directory) ed è completamente integrata
  • Samba 4 supporta anche la configurazione cluster, ed il nuovo protocollo CIFS SMB2 introdotto con windows 7
  • E possibile la piena creazione di OU (Unità Amministrative) e l’impostazione di GPO (Group Policies Objects)

Lo stesso server Samba4 verrà poi utilizzato anche per la gestione in contemporanea degli utenti Unix, in modo da avere un controllo unico e centralizzato sia sugli utenti Windows sia sugli utenti Linux.

E’ possibile connettersi ad un dominio solo con le vesioni Professional ed Ultimate di Windows 2000, XP, 7, 8, 8.1 e 10, non sono supportate in alcun modo le versioni Home di Windows 2000, XP, 7, 8, 8.1 e 10.

Attenzione agli errori di battitura, in questa configurazione anche solo un “.” messo nel posto sbagliato oppure omesso può rendere impossibile il raggiungimento del risultato sperato.

Ho deciso di scrivere questa guida perché ho trovato indicazioni su internet un poco frastagliate o che si riferivano a vecchie versioni di Samba e come altri progetti OpenSource l’eccesso di documentazione alla fine provoca confusione perchè ognuno di noi ha la sua esperienza personale.

Sebbene il Domain Controller sembri il la macchian più indicata per fungere anche da file  server si suggerisce spesso di usare un file server distinto per permettere gli aggiornamenti  di uno piuttosto che dell’altro senza per questo compromettere il funzionamento del domnio. Si suggerisce inoltre alle organizzazioni medie e grandi di usare più di un DC. la documentazione ufficiale si Samba consiglia di usare server diversi per ogni ruolo in modo tale da separare i compiti e mantenere alti livelli di affidabilità. In più usare a un file server distinto evita idiosincrasie nella configurazione di winbind per maggior informazioni vi consiglio di leggere questi articoli:

Domain Member e file shares.

Condizioni di partenza:

  • avere una distribuzione di linux correttamente funzionante con lo stack di networking precedente abilitato, io ho usato centos 7, ma ritengo che questi passaggi elencati possano essere facilmente trasportati su altre distribuzioni.
  • essere certi che il vostro futuro DC usi un indirizzo ip statico. Il cambio dell’indirizzo IP assegnato al vostro DC potrebbe provocare problemi qualora il server DHCP assegnasse un ip diverso. Su Centos 7 è stato introdotto uno strumento da linea di comando chiamato nmtui, poiche l’installazione di dafault presuppone appunt odhcp attivo e interfaccia di rete disabilitata.
  • Leggere attentamente Active Directory Naming FAQ per informazioni prima di procedere, errori più comuni circa la scelta dei DNS, dei nomi NetBIOS per la vostra foresta Active Directory. Al momento l’implementazione AD di Sambanon supporta il cambiamento del nome, quindi meglio prestare attenzioen prima!
  • Controllate il vostro file /etc/hosts affinche ci sia una corretta corrispondenza tra il nome ed il suo indirizzo IP:
127.0.0.1     localhost.localdomain      localhost
192.168.1.41  ADDC1.example.local   ADDC1
Assicuratevi che il l’hostname sia risolto con l’indirizzo IP reale della LAN e non su 127.0.0.1!
  • Rimuovere ogni eventuale precdente installazione di Samba, se state aggiornado da un dominio NT4 meglio conservare il vostro file smb.conf ed eventualmente tutti i files presenti nella cartella /etc/samba come i database utenti.
  • Verificare di avere tutti i prerequisiti per una corretta installazione  Samba, in particolare specifiche sul file System e librerie installate tutti i dettagli qui

personalmente ho eseguito questa linea di comando, per avere tutte le librerie necessarie per la compilazione e qualche utility di mio comodo

yum install perl gcc attr libacl-devel libblkid-devel \
    gnutls-devel readline-devel python-devel gdb pkgconfig \
    krb5-workstation zlib-devel setroubleshoot-server libaio-devel \
    setroubleshoot-plugins policycoreutils-python \
    libsemanage-python perl-ExtUtils-MakeMaker perl-Parse-Yapp \
    perl-Test-Base popt-devel libxml2-devel libattr-devel \
    keyutils-libs-devel cups-devel bind-utils libxslt \
    docbook-style-xsl openldap-devel autoconf python-crypto vim mc net-tools wget

Installazione:

per installare Samba avete 3 opzioni:

  • installare i pacchetti forniti dalla vostra distribuzione o comunque trovarli in giro. Questo purtroppo non era possbile con la distribuzione Centos che preferisco utilizzare per le mie installazioni ed ho scoperto anche con altre distribuzioni basate su Red Hat operating systems (RHEL, CentOS, Fedora, etc.), poiche si basano sulle librerie kerberos del MIT, mentre samba è basato sulle librerie Heimdal Kerberos.
  • Utilizzare i pacchetti forniti da SerNet(https://shop.samba.plus/samba) , un azienda che è in qualche modo legata agli sviluppatori di Samba,che da qualche tempo hanno giustamente deciso di farsi pagare per il loro prezioso lavoro di sviluppo e supporto. Le versioni precedenti alla 4.3 sono ancora disponibili e si chiamano “enterprise samba” tutti i i dettagli qui https://portal.enterprisesamba.com/
  • utilizzare i sorgenti e compilare Samba come ai vecchi tempi, era un sacco di tempo che non lo facevo.

Compilazione del pacchetto:

Parte dei pacchetti necessari per la corretta compilazione di  Samba erano nella lista che ho scritto prima. con l’aggiunta di alcuni pacchetti che utilizzo abitualmente quali mc e vim, il primo è un file manager vecchio stampo che alcuni amministratori di sistema ricorderanno con il primo file manager utilizzato, integra anche un ottimo editor, ma purtroppo utilizzando putty per accedere al mio server non supporta il copia e incolla, per questo si rende necessario l’uso di vim, versione intelligente di vi, che supporta il copia ed incolla su putty

Passiamo quindi al download del pacchetto da qui https://www.samba.org/samba/download/

oppure più semplicemente:

(il numero dipende dall versione di samba, attualmente disponible 4.3.4)

wget https://download.samba.org/pub/samba/stable/samba-4.3.5.tar.gz
tar xvfz samba-4.3.5.tar.gz
cd samba-4.3.5
./configure --bindir=/sbin --sbindir=/sbin/ --sysconfdir=/etc/samba --mandir=/usr/share/man/ \ --with-acl-support --with-ads --enable-cups --enable-glusterfs --with-winbind --with-ldap --with-regedit \ --enable-selftest --localstatedir=/var --with-piddir=/var/run/ --with-pammodulesdir=/lib/security --without-systemd -j 2 make -j 4 make test (opzionale e dispendioso) make install

nuova versione (mantiene tutto in /usr/local/samba ad eccezione delle configurazione)

./configure --sysconfdir=/etc/samba --mandir=/usr/share/man/ \
 --with-acl-support --with-ads --enable-cups --enable-glusterfs --with-winbind --with-ldap --with-regedit \
 --enable-selftest -j 2
make -j 4
make test (opzionale e dispendioso)
make install

abbiamo quindi terminato l’installazione di samba sul nostro server ed iniziamo ora la configurazione
scegliando la prima riga per il comando configure tutti binari finirianno el path.
scegliendo la seconda riga per il comando “configure” sara’ necessario modificare il path con questo semplice script>

echo "PATH=${PATH}:/usr/local/samba/bin" > /etc/profile.d/scripts-path.sh && chmod 755 /etc/profile.d/scripts-path.sh

samba-tool domain provision --realm=example.local --domain=EXAMPLE --adminpass='P@ssw0rd' --server-role=dc 
--dns-backend=SAMBA_INTERNAL --function-level=2008_R2 --use-xattr=yes --host-ip=nu.me.ro.ip

da notare che il nome NetBIOS del dominio va scritto maiuscolo.

questo ci rendera AD DC del dominio ‘example’ con utilizzo del dns interno di gran lunga più semplice da configurare rispetto a bind.

oppure in alternativa

samba-tool domain provision --use-rfc2307 --interactive

e possiamo continuare la configurazione del nostro server con alcune modifiche al nostro /etc/samba/smb.conf  nella sezione global

 # esplicito in modo chiaro di cosa ho bisogno ed abilito i servizi
 server services = rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbind, ntp_signd, kcc, dnsupdate, smb
 server services = -s3fs +dns
 dcerpc endpoint servers = +winreg +srvsvc
 interfaces = nu.me.ro.ip
 allow dns updates = secure
 # dns recursive queries = yes
 # faccio in modo che gli utanti del dominio non possano effettuare il login
 template shell = /usr/sbin/nologin
 # imposto il log leve ed il nome file desiderato
 log file = /var/log/samba/EXAMPLE.log
 syslog = 0
 log level = 3 passdb:0 auth:0 winbind:0 vfs:0
 vfs objects = full_audit
 # imposto la dir dove verranno create le home delgli utanti per conformita scenglo home
 template homedir = /home/%ACCOUNTNAME%

e da aggiungere anche

dns forwarer = x.x.x.x

qualora non presente

quindi

mkdir /var/log/samba
samba restart

 

verifichamo che il file

/etc/resolv.conf 

sia circa così:

search example.local
nameserver nu.me.ro.ip

quindi facciamo qualche verifica con nslookup

ad alcune verifiche sul dns di samba nello specifico

# host -t SRV _ldap._tcp.example.local. (attenzione al punto finale ed alla risposta successiva)
_ldap._tcp.example.local has SRV record 0 100 389 addc1.example.local.
# host -t SRV _kerberos._tcp.example.local. (attenzione al punto finale ed alla risposta successiva)
_kerberos._tcp.example.local has SRV record 0 100 88 addc1.example.local.
# host -t A server01.dominio.local.  (attenzione al punto finale ed alla risposta successiva)
server01.dominio.local has address nu.me.ro.ip

quindi utilizziamo la nuova configurazione di kerberos appena generata da samba-tool
mv /etc/krb5.conf /etc/krb5.conf.orig
ln -s /usr/local/samba/private/krb5.conf /etc/krb5.conf

Testiamo il funzionamento di Kerberos:

# kinit administrator@DOMINIO.LOCAL

Se il comando precedente ha avuto esito positivo, con il comando:

# klist -e

possiamo vedere il ticket Kerberos che ci è stato assegnato


Configurazione del firewall:

Samba usa tutte queste porte per funzionare nel ruolo di Active Directory Domain Controller:

Service Port protocol
DNS 53 tcp/udp
Kerberos 88 tcp/udp
End Point Mapper (DCE/RPC Locator Service) 135 tcp
NetBIOS Name Service 137 udp
NetBIOS Datagram 138 udp
NetBIOS Session 139 tcp
LDAP 389 tcp/udp
SMB over TCP 445 tcp
Kerberos kpasswd 464 tcp/udp
LDAPS (only if “tls enabled = yes”) 636 tcp
Dynamic RPC Ports* 1024-5000 tcp
Global Cataloge 3268 tcp
Global Cataloge SSL (only if “tls enabled = yes”) 3269 tcp
Multicast DNS 5353 tcp/udp

quindi vanno i seguenti comandi per evitare il firewall presente su Centos blocchi le connessioni:

firewall-cmd --permanent --add-port=53/tcp
firewall-cmd --permanent --add-port=53/udp
firewall-cmd --permanent --add-port=88/tcp
firewall-cmd --permanent --add-port=88/udp
firewall-cmd --permanent --add-port=135/tcp
firewall-cmd --permanent --add-port=137/tcp
firewall-cmd --permanent --add-port=137/udp
firewall-cmd --permanent --add-port=138/udp
firewall-cmd --permanent --add-port=139/tcp
firewall-cmd --permanent --add-port=389/tcp
firewall-cmd --permanent --add-port=389/udp
firewall-cmd --permanent --add-port=445/tcp
firewall-cmd --permanent --add-port=464/tcp
firewall-cmd --permanent --add-port=464/udp
firewall-cmd --permanent --add-port=636/tcp
firewall-cmd --permanent --add-port=1024-5000/tcp
firewall-cmd --permanent --add-port=1024-5000/udp
firewall-cmd --permanent --add-port=3268/tcp
firewall-cmd --permanent --add-port=3269/tcp
firewall-cmd --permanent --add-port=5353/tcp
firewall-cmd --permanent --add-port=5353/udp

e quindi facciamo ripartire il firewall

firewall-cmd --reload

SELinux Configuration:

Applichiamo ora alcuni policies di SELinux per permettere il passaggio di Samba come domain controller.

setsebool -P samba_domain_controller on
setsebool -P samba_enable_home_dirs on

Cambiamo quindi il security contest delle cartelle che abbiamo condivi tramite Samba nel file smb.conf

chcon -t samba_share_t /samba/netlogon
chcon -t samba_share_t /samba/profiles
nuova versione
chcon -t samba_share_t /usr/local/samba/var/locks/sysvol/adcomlocal.local/scripts
chcon -t samba_share_t /home/samba/profiles


Meglio riavviare il server per vedere che le regole rimangano tutte applicate.

Scorciatoia:

Se non volete avere problemi di alcun tipo con Firewall e SELinux, basta semplicemente disattivarli tramite systemclt e riavviare il server.

Come farsi volere bene dai propri utenti sbadati:

Qui invece alcuni comandi necessari per rimuovere alcuno controlli di sicurezza sulle password che tanti utenti odiano, ognuno di questi disabilita alcuni controlli che sono normalmente ablitati e che sarebbe megmlio non disabilitare, ma si sa che gli utenti non piace.

samba-tool domain passwordsettings set --complexity=off
samba-tool domain passwordsettings set --history-length=0
samba-tool domain passwordsettings set --min-pwd-age=0
samba-tool domain passwordsettings set --max-pwd-age=0

Alcuni comandi utili

Fonte http://guide.debianizzati.org/index.php/Samba_e_OpenLDAP:_creare_un_controller_di_dominio_Active_Directory_con_Debian_Wheezy

Strumenti di amministrazione da shell

Gestione DNS

Aggiungere un record # samba-tool dns add server zone name A|AAAA|PTR|CNAME|NS|MX|SRV|TXT data
Cancellare un record # samba-tool dns delete server zone name A|AAAA|PTR|CNAME|NS|MX|SRV|TXT data
Interrogare un record # samba-tool dns query server zone name A|AAAA|PTR|CNAME|NS|MX|SRV|TXT|ALL [options] data
Chiedere informazioni sul server # samba-tool dns serverinfo server
Aggiornare un record # samba-tool dns update server zone name A|AAAA|PTR|CNAME|NS|MX|SRV|TXT olddata newdata
Creare una zona # samba-tool dns zonecreate server zone
Eliminare una zona # samba-tool dns zonedelete server zone
Informazioni su una zona # samba-tool dns zoneinfo server zone
Elencare le zone # samba-tool dns zonelist server

Gestione utenti

Aggiungere un utente # samba-tool user create USERNAME
Cancellare un utente # samba-tool user delete username
Disabilitare un utente # samba-tool user disable username
Abilitare un utente # samba-tool user enable username
Elencare gli utenti # samba-tool user list
Modificare la password di un utente # samba-tool user setpassword username
Impostare la scadenza di un utente # samba-tool user setexpiry username

Gestione Gruppi

Aggiungere un gruppo # samba-tool group add groupname
Aggiungere utenti a un gruppo # samba-tool group addmembers groupname members
Cancellare un gruppo # samba-tool group delete groupname
Elencare i gruppi # samba-tool group list
Elencare i membri di un gruppo # samba-tool group listmembers groupname
Cancellare utenti da un gruppo # samba-tool group removemembers groupname members

Gestione Password

Abbassare la complessità delle password # samba-tool domain passwordsettings set –complexity=off
Modificare la lunghezza minima consentita per le password # samba-tool domain passwordsettings set –min-pwd-length=1

Configurazione delle stampanti:

installiamo ancora qualche pacchetto

yum install cups foomatic-db hplip-common

poi ho editato /etc/cups/cupsd.conf aggiungendo all inizio:

DefaultEncryption Never

per semplificare le cose un po più avanti ho aggiunto una riga listen per permettere la configurazione tramite rete

Listen nu.me.ro.ip:631

ed infine un paio di righe aggiuntive nella sezione “/” e “admin”
come da foto per permettere una accesso alla pagina web a tutta la rete interna e solo un host per la pagina di ammnistrazione.

cupsadmin1

 

 

 

 

cupsadmin2

 

 

 

 

quindi :

systemctl cups restart

e

systemctl cups enable

quindi accesso via web alla pagina si configurazione

https://nu.me.ro.ip:631/admin

e aggiungo le stampanti presenti in rete tramite interfaccia web.

dopodiche ritorno ad editare

il mio smb.conf ed aggiungo nella sezxione global:

rpc_server:spoolss = external
rpc_daemon:spoolssd = fork

che abilitano l’ultima versione dello spool di stampa ad alte prestazioni con forking……

inoltre attivo l’auto caricamento delle stampanti di sistema:

load printers = yes

senza di dimenticarmi di aggiungere la cartella si spool :

 mkdir -p /var/spool/samba/
 chmod 1777 /var/spool/samba/

quindi

smbcontrol all reload-config

per ricaricare la configurazione

Avvio Automatico

 

Simpaticamente Samba non prevede uno script System V compatibile, o almeno io no lo ho trovato, comuqneu ho trovato in rete questo script da screivere facendo:

vi /etc/rc.d/init.d/samba4

e scrivendo:

#! /bin/bash
#
# samba4 Bring up/down samba4 service
#
# chkconfig: - 90 10
# description: Activates/Deactivates all samba4 interfaces configured to
# start at boot time.
#
### BEGIN INIT INFO
# Provides:
# Should-Start:
# Short-Description: Bring up/down samba4
# Description: Bring up/down samba4
### END INIT INFO
# Source function library.
. /etc/init.d/functions

if [ -f /etc/sysconfig/samba4 ]; then
. /etc/sysconfig/samba4
fi

CWD=$(pwd)
prog="samba4"

start() {
# Attach irda device
echo -n $"Starting $prog: "
/usr/local/samba/sbin/samba
sleep 2
if ps ax | grep -v "grep" | grep -q /samba/sbin/samba ; then success $"samba4 startup"; else failure $"samba4 startup"; fi
echo
}
stop() {
# Stop service.
echo -n $"Shutting down $prog: "
killall samba
sleep 2
if ps ax | grep -v "grep" | grep -q /samba/sbin/samba ; then failure $"samba4 shutdown"; else success $"samba4 shutdown"; fi
echo
}
status() {
/usr/local/samba/sbin/samba --show-build
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status irattach
;;
restart|reload)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 1
esac

exit 0

che deve un fiel che qualcuno aveva nel cassetto perche fa riferiment al vecchio stack irda, ma viene citato questo script in diversi posti nella rete, quindi tutti fanno capo ad uno script a quanto sembra.

e quindi attivare questo script per avvio automatico:

chmod 755 /etc/rc.d/init.d/samba4

chmod +x /etc/rc.d/init.d/samba4

ln -s /etc/rc.d/init.d/samba4 /etc/rc3.d/S80samba4

chkconfig --add samba4

chkconfig samba4 on

service samba4 restart