- Principes de Samba et son fonctionnement
1.1 Présentation générale
Samba est une collection de programmes open source qui implémente le protocole SMB/CIFS, facilitant l'échange de fichiers et l'accès aux imprimantes entre les environnements Linux/Unix et Windows. Il supporte également les fonctions de contrôleur de domaine et d'intégration avec Active Directory.
1.2 Structure logicielle
Les éléments clés de l'architecture incluent les processus dédiés au traitement des requêtes réseau et la gestion des sessions.
1.3 Services principaux
Lorsque seules les connexions par adresse IP sont requises, l'installation du démon smbd est suffisante pour le partage basique.
- Prépaartion de l'environnement opérationnel
2.1 Validation du système hôte
# Vérifier les informations de la distribution
cat /etc/os-release
# Résultat attendu : informations sur la version du système
# Contrôler la version du noyau
uname -r
# Une version 5.10 ou ultérieure est recommandée
# Identifier l'architecture matérielle
arch
# Valeur typique : x86_64 ou aarch64
# Vérifier la synchronisation temporelle
timedatectl status
# Crucial pour les services Samba, l'écart doit rester inférieur à 5 minutes
# Configurer le nom d'hôte du serveur
hostnamectl set-hostname serveur-samba
# Ajouter une entrée dans /etc/hosts pour la résolution locale
echo "127.0.0.1 serveur-samba" >> /etc/hosts
2.2 Configuration réseau de base
# Définir une adresse IP statique sur l'interface eth0
nmcli connection modify eth0 \
ipv4.addresses 192.168.1.50/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns 8.8.8.8 \
ipv4.method manual
# Activer les modifications
nmcli connection up eth0
# Tester la connectivité avec la passerelle
ping -c 4 192.168.1.1
# Vérifier l'occupation des ports nécessaires à Samba
ss -tulnp | grep -E '(137|138|139|445)'
2.3 Résolution DNS (pour contrôleur de domaine)
# Installer les composants BIND si nécessaire
dnf install -y bind bind-utils
# Configurer les serveurs de noms
cat > /etc/resolv.conf << EOF
search mondomaine.local
nameserver 192.168.1.50
nameserver 8.8.8.8
EOF
# Verrouiller le fichier de configuration DNS
chattr +i /etc/resolv.conf
# Tester la résolution avec dig
dig serveur-samba.mondomaine.local
- Déploiement complet du serveur Samba
3.1 Installation des composants logiceils
# Mettre à jour le cache des paquets
dnf makecache
# Installer les paquets Samba principaux et optionnels
dnf install -y samba samba-client samba-common-tools samba-winbind
# Installer les outils d'administration et dépendances
dnf install -y krb5-workstation krb5-server openldap-clients
# Vérifier l'installation
rpm -qa | grep samba
# Afficher la version installée
smbd --version
# Valider la syntaxe de configuration par défaut
testparm -s | head -10
3.2 Préparation des systèmes de fichiers
# Créer l'arborescence de base pour les partages
mkdir -p /srv/smb/{public,prive,departements,utilisateurs}
# Définir les permissions pour le dossier public
chmod 1777 /srv/smb/public
chown nobody:nobody /srv/smb/public
# Configurer les dossiers départementaux
for dept in finance rh developpement; do
mkdir -p /srv/smb/departements/$dept
chmod 2770 /srv/smb/departements/$dept
done
# Préparer les répertoires utilisateur
chmod 0755 /srv/smb/utilisateurs
# Appliquer le contexte SELinux pour le partage
semanage fcontext -a -t samba_share_t "/srv/smb(/.*)?"
restorecon -Rv /srv/smb
- Paramétrage avancé du serveur
4.1 Fichier de configuraton principal
# Sauvegarder la configuration originale
cp /etc/samba/smb.conf /etc/samba/smb.conf.orig
# Générer une nouvelle configuration
cat > /etc/samba/smb.conf << 'EOF'
[global]
workgroup = MONDOMAINE
netbios name = SERVEUR-SMB
server string = Serveur de fichiers
interfaces = lo eth0
bind interfaces only = yes
security = user
map to guest = Jamais
passdb backend = tdbsam
encrypt passwords = yes
server signing = obligatoire
smb encrypt = requis
log file = /var/log/samba/%m.log
max log size = 10000
log level = 2
socket options = TCP_NODELAY SO_RCVBUF=262144 SO_SNDBUF=262144
use sendfile = yes
read raw = yes
write raw = yes
create mask = 0664
directory mask = 0775
force group = utilisateurs
client min protocol = SMB2
server min protocol = SMB2
load printers = non
printing = bsd
printcap name = /dev/null
disable spoolss = oui
veto files = /*.exe/*.bat/
delete veto files = oui
[public]
comment = Espace communautaire
path = /srv/smb/public
browseable = oui
writable = non
guest ok = oui
read only = oui
create mask = 0644
directory mask = 0755
force user = nobody
[departements]
comment = Partage entre services
path = /srv/smb/departements
valid users = @departements
browseable = oui
writable = oui
create mask = 0775
directory mask = 0775
inherit permissions = oui
force group = departements
[finance]
comment = Données confidentielles
path = /srv/smb/departements/finance
valid users = @finance
admin users = @admin-finance
writable = oui
read only = non
create mask = 0660
directory mask = 0770
force group = finance
vfs objects = acl_xattr
[utilisateurs]
comment = Répertoires personnels
path = /srv/smb/utilisateurs/%U
browseable = non
writable = oui
valid users = %S
create mask = 0700
directory mask = 0700
root preexec = mkdir -p /srv/smb/utilisateurs/%U
EOF
4.2 Optimisation des paramètres
# Ajustements pour la performance réseau
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=524288 SO_SNDBUF=524288
# Activation des fonctions avancées VFS
vfs objects = acl_xattr recycle shadow_copy2
# Configuration du module de corbeille
[recycle]
vfs objects = recycle
recycle:repository = .corbeille/%U
recycle:keeptree = oui
recycle:versions = oui
4.3 Gestion des utilisateurs et groupes
# Créer des comptes système pour Samba
useradd -s /sbin/nologin -M utilisateur1
useradd -s /sbin/nologin -M utilisateur2
# Attribuer des mots de passe Samba
smbpasswd -a utilisateur1
smbpasswd -a utilisateur2
# Activer les comptes dans la base Samba
smbpasswd -e utilisateur1
smbpasswd -e utilisateur2
# Créer des groupes et affecter les utilisateurs
groupadd departements
usermod -aG departements utilisateur1
usermod -aG departements utilisateur2
# Appliquer les permissions de groupe sur les partages
chgrp -R departements /srv/smb/departements
chmod g+s /srv/smb/departements
# Lister les utilisateurs Samba enregistrés
pdbedit -L --verbose
4.4 Configuration des listes de contrôle d'accès
# Installer les outils ACL
dnf install -y acl
# Attribuer des droits ACL sur un répertoire
setfacl -R -m g:departements:rwx /srv/smb/departements
setfacl -R -m d:g:departements:rwx /srv/smb/departements
# Vérifier les ACL appliquées
getfacl /srv/smb/departements
# Exemple de permission granulaire
setfacl -m u:utilisateur1:rw- /srv/smb/departements/finance
- Renforcement de la sécurité
5.1 Politiques SELinux
# Vérifier l'état de SELinux
sestatus
# Installer les utilitaires de gestion
dnf install -y policycoreutils-python-utils
# Définir le contexte pour les partages
semanage fcontext -a -t samba_share_t "/srv/smb(/.*)?"
restorecon -Rv /srv/smb
# Activer les booléens nécessaires
setsebool -P samba_enable_home_dirs on
setsebool -P samba_export_all_rw on
5.2 Règles de pare-feu
# Activer et démarrer firewalld
systemctl enable --now firewalld
# Ouvrir les ports standards de Samba
firewall-cmd --permanent --add-service=samba
firewall-cmd --permanent --add-service=samba-client
firewall-cmd --reload
# Pour les contrôleurs de domaine, ajouter des ports supplémentaires
firewall-cmd --permanent --add-port=389/tcp
firewall-cmd --permanent --add-port=636/tcp
firewall-cmd --permanent --add-port=88/tcp
firewall-cmd --permanent --add-port=88/udp
firewall-cmd --reload
# Vérifier les règles actives
firewall-cmd --list-all