
Configurer un serveur Samba comme membre d'un domaine Active Directory |
Ajouter l'utilisateur créé lors de l'installation au groupe sudo
usermod -aG sudo nom_de_l_utilisateur
La majorité des commandes dans cet article doivent être effectuées avec les privilèges super utilisateur, ici la connexion au serveur se fera avec un utilisateur membre du groupe sudo
Edition des fichiers de configuration
sudo nano /etc/network/interfaces
allow-hotplug ens18
iface ens18 inet static
address 192.168.10.245
netmask 255.255.255.0
gateway 192.168.10.254
nameserver 192.168.10.28 9.9.9.9
sudo systemctl restart networking
sudo nano /etc/hosts
127.0.0.1 localhost
127.0.1.1 sambasrv.home.lab sambasrv
192.168.10.28 WIN-KO477AGSO9G.home.lab WIN-KO477AGSO9G
sudo nano /etc/resolv.conf
domain home.lab
nameserver 192.168.10.28
nameserver 9.9.9.9
Tester la résolution DNS
nslookup WIN-KO477AGSO9G.home.lab
Doit retourner
Server: 192.168.10.28
Address: 192.168.10.28#53
Name: WIN-KO477AGSO9G.home.lab
Address: 192.168.10.28
Définition du serveur NTP
sudo nano /etc/systemd/timesyncd.conf
[Time]
NTP=WIN-KO477AGSO9G.home.lab
FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
RootDistanceMaxSec=500
sudo systemctl enable --now systemd-timesyncd
Vérification:
sudo systemctl status systemd-timesyncd
Installation des paquets
sudo apt install acl attr samba winbind libpam-winbind libnss-winbind krb5-config krb5-user dnsutils python3-setproctitle
Configuration de krb5
sudo nano /etc/krb5.conf
[libdefaults]
default_realm = HOME.LAB
dns_lookup_realm = false
dns_lookup_kdc = true
The Samba teams recommends to not set any further parameters in the
/etc/krb5.conffile
Création du dossier partagé
sudo mkdir -p /srv/shares/public
Configuration du service samba
sudo nano /etc/samba/smb.conf
[global]
# Identification du domaine
workgroup = HOME
realm = HOME.LAB
security = ADS
netbios name = SAMBASRV
# Backend IDMAP (AUTORID)
idmap config * : backend = autorid
idmap config * : range = 10000-999999
idmap config * : rangesize = 100000
# Paramètres d'authentification
kerberos method = secrets and keytab
dedicated keytab file = /etc/krb5.keytab
winbind offline logon = false
winbind enum users = yes
winbind enum groups = yes
winbind nss info = rfc2307
# Performance et Logs
server string = %h samba files server
log file = /var/log/samba/log.%m
log level = 1
max log size = 1000
socket options = TCP_NODELAY SO_KEEPALIVE SO_RCVBUF=131072 SO_SNDBUF=131072
# Paramètres de sécurité
client use spnego = yes
client ntlmv2 auth = yes
server min protocol = SMB2_10
client min protocol = SMB2_10
server smb encrypt = desired
# Divers
template shell = /bin/bash
template homedir = /home/%U
# ACLS
vfs objects = acl_xattr
map acl inherit = yes
# Définition des partages
[Public]
path = /srv/shares/public
comment = Partage Public
read only = no
sudo smbcontrol all reload-config
sudo systemctl enable --now winbind smbd nmbd
Sur le DC windows server
Créer un OU que l'on nommera "LinServers" dans cet exemple

Sur le serveur debian
sudo net ads join -S 192.168.10.28 -U "Administrator" HOME createcomputer="OU=LinServers,DC=home,DC=lab"
Configurer les permissions sur le dossier partagé
sudo chmod 2770 /srv/shares/public
sudo chown root:"HOME\domain users" /srv/shares/public
Vérifier l'intégration AD
wbinfo -u # Liste les utilisateurs AD
wbinfo -g # Liste les groupes AD
getent passwd # Affiche les utilisateurs (locaux + AD)
getent group # Affiche les groupes (locaux + AD)
Tester l'authentification
sudo smbclient -L localhost -U administrator
Vérifier les services
sudo systemctl status winbind smbd nmbd
Optionnel: Configurer pam pour la création du dossier /home/user à la 1ère connexion
sudo nano /etc/pam.d/common-session
Ajouter cette ligne
session required pam_mkhomedir.so skel=/etc/skel umask=0077
Depuis un client linux
smbclient //SAMBASRV/Public -U "HOME\Administrator"
Depuis un client windows
File Explorer → Network → SAMBASRV → Public

Start → Computer Management → Action → Connect to another computer = SAMBASRV
Ne PAS faire de modification dans "share permissions"

Les permissions se gèrent depuis "security" → "advanced"

L'opération suivante est optionnelle, attention aux valeurs incrémentées qui pourraient altérer le bon fonctionnement de la machine!!!
sudo nano /etc/sysctl.conf
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
sudo sysctl -p
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
Attention aux valeurs
Adaptez à votre mémoire RAM:
| RAM totale | dirty_ratio | dirty_background_ratio |
|---|---|---|
| 4 Go | 15 | 10 |
| 8 Go | 10 | 5 |
| 16 Go | 5 | 2 |
| 32 Go+ | 2 | 1 |
A savoir:
Tout comme pour la gestion des acls, le système de fichier doit pouvoir gérer les quotas, dans ce lab, nous utilisons ext4
Installation des paquets
sudo apt install quota
Ajouter la prise en charge des quotas au montage de la partition:
sudo nano /etc/fstab
Définir les options usrquota et grpquota sur le montage concerné
/dev/sdb1 /srv ext4 defaults,usrquota,grpquota 0 0
Remonter la partition
sudo mount -o remount /srv
Initialiser les quotas
quotacheck -cug /srv
Connaître la valeur d'un bloc en octets sur notre partition
df | grep /srv
ici:
/dev/sdb1 16401276 2120 15544016 1% /srvsudo tune2fs -l /dev/sdb1 | grep -i "block size"
ici:
Block size: 4096Identifier l'utilisateur sur lequel nous souhaitons appliquer un quota
wbinfo -u
Exemple de sortie
HOME\administrator
HOME\guest
HOME\krbtgt
HOME\cronuser
HOME\test.user
Configurer les limites soft et hard en octets pour l'utilisateur test.user
sudo edquota "HOME\\test.user"
Cette commande ouvre l'éditeur par défaut pour définir la configuration
Disk quotas for user HOME\test.user (uid 111156):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 0 0 0 0 0 0
Pour définir une limite soft à 1Go et une limite hard à 1,25Go
Disk quotas for user HOME\test.user (uid 111156):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 0 262144 327680 0 0 0
Pour vérifier la configuration définie:
sudo repquota -auv
Doit retourner
*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 52 0 0 8 0 0
HOME\test.user -- 0 262144 327680 0 0 0
Identifier le groupe sur lequel nous souhaitons appliquer un quota
wbinfo -g
Exemple de sortie
HOME\domain computers
HOME\domain controllers
HOME\schema admins
HOME\enterprise admins
HOME\cert publishers
HOME\domain admins
HOME\domain users
HOME\domain guests
HOME\group policy creator owners
HOME\ras and ias servers
HOME\allowed rodc password replication group
HOME\denied rodc password replication group
HOME\read-only domain controllers
HOME\enterprise read-only domain controllers
HOME\cloneable domain controllers
HOME\protected users
HOME\key admins
HOME\enterprise key admins
HOME\dnsadmins
HOME\dnsupdateproxy
HOME\access-denied assistance users
Configurer les limites soft et hard en octets pour le groupe
sudo edquota -g "HOME\\domain users"
Cette commande ouvre l'éditeur par défaut pour définir la configuration
Disk quotas for group HOME\domain users (gid 110513):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 0 0 0 0 0 0
Pour définir une limite soft à 5Go et une limite hard à 6Go
Disk quotas for group HOME\domain users (gid 110513):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 0 1310720 1572864 0 0 0
Pour vérifier la configuration définie
sudo repquota -agv
Doit retourner
*** Report for group quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
Group used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 40 0 0 5 0 0
HOME\domain users -- 0 1310720 1572864 0 0 0
Configurer la période de grâce
sudo edquota -t
Cette commande ouvre l'éditeur par défaut pour définir la configuration
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/sdb1 7days 7days
La configuration de la période de grâce est valable pour l'ensemble des éléments concernés (groupes, utilisateurs, blocs et inodes) et des systèmes de fichiers pour lesquels la politique de quotas est activée.
Installation des paquets
sudo apt install sssd sssd-ad sssd-tools samba-common-bin oddjob oddjob-mkhomedir packagekit krb5-user cifs-utils realmd adcli
Configuration DNS
sudo nano /etc/hosts
127.0.0.1 localhost
127.0.1.1 ubuntusrv.home.lab ubuntusrv
192.168.10.28 WIN-KO477AGSO9G.home.lab WIN-KO477AGSO9G
sudo nano /etc/resolv.conf
nameserver 192.168.10.28
nameserver 192.168.10.254
options edns0 trust-ad
search home.lab
Vérification
nslookup WIN-KO477AGSO9G.home.lab
Synchronisation de l'heure avec le serveur AD
sudo nano /etc/systemd/timesyncd.conf
[Time]
NTP=WIN-KO477AGSO9G.home.lab
FallbackNTP=ntp.ubuntu.com
RootDistanceMaxSec=15
sudo systemctl enable --now systemd-timesyncd
Vérification
sudo systemctl status systemd-timesyncd
Configuration de sssd
sudo nano /etc/sssd/sssd.conf
[sssd]
domains = home.lab
config_file_version = 2
services = nss, pam
[domain/home.lab]
default_shell = /bin/bash
krb5_store_password_if_offline = True
cache_credentials = True
krb5_realm = HOME.LAB
realmd_tags = manages-system joined-with-adcli
id_provider = ad
fallback_homedir = /home/%u
ad_domain = home.lab
use_fully_qualified_names = False
ldap_id_mapping = True
access_provider = ad
cache_credentials = true
enumerate = true
sudo systemctl restart sssd
Configuration de krb5
sudo nano /etc/krb5.conf
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = HOME.LAB
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
HOME.LAB = {
kdc = WIN-KO477AGSO9G.home.lab
admin_server = WIN-KO477AGSO9G.home.lab
}
[domain_realm]
.home.lab = HOME.LAB
home.lab = HOME.LAB
Joindre le serveur AD avec realm
sudo realm -v discover home.lab
sudo realm join -U administrator@HOME.LAB home.lab --computer-ou="OU=LinServers,DC=home,DC=lab"
Optionnel: pour la création du dossier personnel des utilisateurs à la 1ère connexion
sudo pam-auth-update --enable mkhomedir
Vérifier la jonction
sudo realm list
Tester l'authentification kerberos
kinit Administrator@HOME.LAB
klist
Vérifier la résolution des utilisateurs AD
getent passwd HOME\\Administrator
Mise en place du point de montage Public au démarrage du serveur avec fstab
Création du dossier utilisé pour le montage
sudo mkdir /mnt/public
Configuration du fichier fstab
sudo nano /etc/fstab
On ajoute cette ligne
//sambasrv.home.lab/public /mnt/public cifs _netdev,sec=krb5,cruid=0,multiuser,vers=3.1.1,x-systemd.after=krb-boot.service 0 0
Options:
Création d'un script pour kinit
sudo nano /usr/local/bin/kinit-machine.sh
#!/bin/bash
/usr/bin/kinit -k UBUNTUSRV\$@HOME.LAB
Le rendre exécutable
sudo chmod +x /usr/local/bin/kinit-machine.sh
Tester l'obtention du ticket via le script
sudo bash /usr/local/bin/kinit-machine.sh
sudo klist
Doit retourner une sortie similaire à
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: UBUNTUSRV$@HOME.LAB
Valid starting Expires Service principal
09/29/2025 18:42:06 09/30/2025 04:42:06 krbtgt/HOME.LAB@HOME.LAB
renew until 10/06/2025 18:42:06
Création d'un service systemd pour l'obtention du ticket kerberos au démarrage
sudo nano /etc/systemd/system/krb-boot.service
[Unit]
Description=Acquire Kerberos ticket at boot
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/kinit-machine.sh
ExecStartPost=/bin/sleep 5
TimeoutSec=60
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable krb-boot.service
Exécution automatique du script toutes les 8h (validité du ticket = 10h par défaut)
sudo crontab -e
On ajoute cette ligne
0 */8 * * * /usr/local/bin/kinit-machine.sh
Monter le partage samba immédiatement et redémarrer le serveur si possible pour vérifications
Montage immédiat
sudo mount -av
Doit retourner
mount.cifs kernel mount options: ip=192.168.10.245,unc=\\sambasrv.home.lab\public,sec=krb5,multiuser,vers=3.1.1,cruid=0,user=root,pass=********
/mnt/public : successfully mounted
Redémarrer le serveur si possible
sudo systemctl reboot
Vérification de la disponibilité du montage après le redémarrage du serveur
df | grep public
Doit retourner
//sambasrv.home.lab/public 1310720 12 1310708 1% /mnt/public
Vérifier la connexion, l'accès au partage et les permissions avec un utilisateur de l'AD selon la configuration des acls
Pour cet exemple, un utilisateur nommé test.user a été créé dans l'AD (membre de Domain Users par défaut)
su - test.user@home.lab
Password:
Creating directory '/home/test.user@home.lab'.
On crée un fichier test.txt à la racine du dossier public
cd /mnt/public
touch test.txt
ls -l
Doit retourner
-rwxr-xr-x 1 test.user@home.lab domain users@home.lab 0 Sep 29 19:26 test.txt
Notre utilisateur a les permissions en écriture à la racine du partage public
Sources principales: