Guide de configuration avancée pour le service Samba

  1. 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.

  1. 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
  1. 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
  1. 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
  1. 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

Étiquettes: Samba SMB CIFS Linux Windows

Publié le 24 juin à 04h32