Configurer un contrôleur de domaine Samba (CentOS / Debian)

Dans ce billet nous verrons comment installer un contrôleur de domaine samba sous Debian / Centos (Attention des petits subtilités existent entre les 2 !)

Petit Rappel sur samba

Samba est un vaste projet communautaire visant à rendre interopérable les système Microsoft et Unix/Linux

Il offre des services de partages de fichiers mais également de créer & gérer un domaine NT, depuis samba 4 la fonctionnalité majeure est de pouvoir gérer un contrôleur de domaine AD.

Il est aujourd’hui capable d’officier seul ou d’être ajouté à un domaine existant

  • Création et stockage d’objet de domaine AD
  • Authentification des utilisateurs et ordinateurs
  • Prise en charge des GPO
  • Résolution de noms et localisation des ressources d’un domaine AD
  • Support du protocole SMB/CIFS

DNS

L’installation d’un premier DC nécessite obligatoirement l’hébergement local de la zone DNS liée à l’AD

Deux services DNS peuvent être utilisés par Samba :

  • Module DNS intégré a samba, qui est plus simple à gérer mais beaucoup plus limité
  • Bind, plus souple offrant beaucoup plus de fonctionnalités (Transfert de zone, exploiter plusieurs zones d’espaces de nom)

Kerberos

Les contrôleurs de domaine s’appuie sur le protocole Kerberos pour l’authentification, ils font office de centres de distribution de clef Kerberos et fournissent les services suivants :

  • Service d’authentification (AS)
  • Service d’émission de tickets (TGS)

L’utilisateur s’authentifie après du DC puis utilise ce ticket pour s’authentifier pour chaque service demandé (Partage de fichier, RDS, …)
Il ne transmet jamais son mot de passe au service auquel il souhaite accéder

Kbrschema
  1. Le client s’authentifie après de l’AS (qui valide le login/password auprès de la base AD), le TGS fournit un ticket TGT permettant d’obtenir de futurs tickets de service TS
  2. Le client préserve le TGT obtenu et demande pour le service solicité un ticket TS
  3. Le ticket obtenu du TGS permet d’accéder aux ressources du serveur de fichier

A savoir : Le niveau de forêt de Samba ne dépasse pas le Windows Server 2008 R2 Attention si vous avez du 2012 ou 2016

Debian 9

Configurer la résolution de nom local

$ vi /etc/hosts
127.0.0.1 localhost
192.168.1.50 DEB9.domaine.fr DEB9  #Adapter selon votre IP / FQDN
$ vi /etc/hostname
DEB9.domaine.fr  #Adapter selon votre FQDN

Redémarrez le serveur si vous changer la configuration réseau

Installer les paquets

apt-get update && apt-get install samba krb5-config winbind smbclient dnsutils ntp

Configurer NTP (Service de temps important dans le fonctionnement d’un domaine)

$vi /etc/ntp.conf

ntpsignsocket /var/lib/samba/ntp_signd #Ajouter la ligne suiante
restrict default nomodify notrap nopeer noquery mssntp # A modifier

Changer le proprietaire du répertoire /var/lib/samba/ntp_signd

chown :ntp /var/lib/samba/ntp_signd
systemctl restart ntpd

Sauvegarder le fichier /etc/samba/smb.conf & /etc/krb5.conf

mv /etc/samba/smb.conf /etc/samba/smb.conf.old
mv /etc/krb5.conf /etc/krb5.conf.old

Créer le domaine AD avec la commande samba-tool

samba-tool domain provision

Realm [DOMAINE]: domaine.fr                 #Nom de domaine AD
Domain [domaine]: domaine                   #Nom Netbios du domaine
Server Role (dc, member, standalone) [dc]: dc         #Rôle du serveur
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:           #Service DNS (Samba par défaut)
DNS forwarder IP address (write 'none' to disable forwarding) [192.168.1.254]:            #Serveur DNS redirecteur
Administrator password:          #Mot de passe administrateur du domaine
Retype password:

A l’issue de cette commande auront été générés :

Le fichier de configuration samba «/etc/samba/smb.conf»
Le fichier de configuration kerberos «/var/lib/samba/private/krb5.conf»
Les fichiers de base de données «.ldb» et «.tdb» (Annuaire AD & DNS) dans «/var/lib/samba/private»

Créer un lien symbolique vers le fichier kerberos

ln -s /var/lib/samba/private/krb5.conf /etc/krb5.conf

Démarrez samba (Modifier l’organisation des services pour simplifier)

systemctl stop smbd nmbd winbind
systemctl disable smbd nmbd winbind
systemctl unmask samba-ad-dc
systemctl start samba-ad-dc
systemctl enable samba-ad-dc

Vérifier le fonctionnement du domaine

smbclient -L DEB9.domaine.fr -U administrator

Le résultat doit être similaire au suivant

Domain=[DOMAINE] OS=[Windows 6.1] Server=[Samba 4.5.12-Debian]

Sharename Type Comment
--------- ---- -------
netlogon Disk 
sysvol Disk 
IPC$ IPC IPC Service (Samba 4.5.12-Debian)

Lister les services gérés par samba

$samba-tool processes

Service PID
-------------------
dnsupdate 599
cldap_server 593
rpc_server 589
nbt_server 590
winbind_server 602
kdc_server 594
notify-daemon 607
ldap_server 592
kccsrv 598
samba 0
dreplsrv 595
dnssrv 600

Vous pouvez vérifier également les enregistrement DNS

$dig DEB9.domaine.fr
DEB9.domaine.fr. IN A  192.168.1.50
$dig -t SRV _ldap._tcp.domaine.fr
;_ldap._tcp.domaine.fr. 900 IN SRV 0 100 389 DEB9.domaine.fr

Pour l’administration de l’annuaire la meilleure et la plus simple méthode est d’utiliser les RSAT windows (Eh oui, Samba 4 est capable de gérer un Contrôleur Active Directory ce qui permet à la plupart des RSAT de fonctionner sous réserve d’avoir rentré le poste windows dans le domaine ! )

Voici sinon quelques commandes utiles

Administration objet Samba

samba-tool user list # Visualiser les comptes utilisateurs
samba-tool user create kfla #Créer un compte utilisateur
samba-tool user delete klfa #Supprimer un compte utilisateur

Administration DNS Samba

samba-tool dns add DEB9 domaine.fr PC1 A 192.168.1.10 -U administrator #Créer un enregistrement A dans le DNS
samba-tool dns delete DEB9 domaine.fr PC1 A 192.168.1.10 -U administrator #Supprimer un enregistrement A dans le DNS
samba-tool dns update DEB9 domaine.fr SRV1 A 192.168.1.20 192.168.1.21 -U administrator #Créer un enregistrement A dans le DNS
samba-tool dns zonecreate DEB9 1.168.192.in-addr.arpa -U administrator #Créer la zone reverse
samba-tool dns add DEB9 1.168.192.in-addr.arpa 50 PTR DEB9.domaine.fr -U administrator #Créer l'enregistrement inverse

L’outil samba-tool est très complet et dispose d’une aide bien faite, n’hésitez pas à le consulter sans modération ;)

Utiliser bind en DNS

apt-get install bind9
samba_upgradedns --verbose --dns-backend=BIND9_DLZ

Génère « /var/lib/samba/private/named.conf » à adapter en fonction de la version de bind
Génère «/var/lib/samba/private/dns.keytab» qui permet a Bind de s’authentifier pour l’enregistrement dynamique

Utiliser le module de bind en fonction de la version utilisée

$vi /var/lib/samba/private/named.conf
#For BIND 9.9.x
#database "dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_9.so";
#For BIND 9.10.x
database "dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_10.so";
apt-cache show bind9 #Pour avoir la version de bind</pre></code>

Indiquer le fichier keytab a utiliser dans bind

```bash
$vi /etc/named.conf.options
options {
[...]
tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";
[...]
}

Inclure la directive dans la configuration de bind

$vi /etc/bind/named.conf
include "/var/lib/samba/private/named.conf";
Modifier la configuration de samba pour l’écoute DNS
#vi /etc/samba/smb.conf
[global]
[...]
server services = -dns
[...]

Redémarrer le service samba

systemctl restart samba-ad-dc

CentOS 7

CentOS 7 dispose des paquets firewalld (firewall réseau) et SElinux (firewall applicatif)
il est impératif de les configurer pour le bon fonctionnement Samba/DNS (Dans ce billet la porte ce sera open-bar je vous déconseille de faire la même en production sous peine d’avoir des risques de sécurité)

Ajouter les interfaces réseaux en zones de confiance

firewall-cmd --zone=trusted --change-interface=eth0 (votre interface)
firewall-cmd --reload

Autoriser les applications sur SElinux

Modifier le fichier de configuration /etc/sysconfig/selinux
SELINUX=permissive

Lancer la commande

setenforce 0

Pour la suite vous pouvez vous fier à la procédure ci-haute