Samba

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Partage de fichiers/imprimantes (SMB/CIFS)
Paquets samba · samba-client · samba-common
Config /etc/samba/smb.conf
Voir aussi Options samba · Rhcsa samba · Samba rhel7 · Selinux samba · Sendmail

Samba est une suite logicielle libre sous licence GPL qui implémente le protocole SMB/CIFS, utilisé par Windows pour le partage de fichiers et d'imprimantes. Elle permet aux systèmes Unix/Linux d'accéder aux ressources partagées par des machines Windows, et inversement de partager leurs propres ressources vers des clients Windows — sans que les utilisateurs des deux mondes n'aient à changer d'habitudes.

Le nom vient du protocole SMB (Server Message Block, d'origine IBM puis repris par Microsoft) auquel deux voyelles ont été ajoutées pour former « SaMBa ». Développé à l'origine par Andrew Tridgell à partir de 1991, le projet reçoit aujourd'hui les contributions d'une vingtaine de développeurs. Samba n'est pas compatible IPv6 sur les implémentations anciennes (à vérifier selon la version) et reste, à fonctionnalités égales, moins performant que NFS en transfert pur entre systèmes Unix.

Installation

apt-get install samba samba-client smbfs   # Debian/Ubuntu
yum install samba samba-client             # RHEL/CentOS

Configuration minimale

vi /etc/samba/smb.conf
[global]
    workgroup = WORKGROUP
    netbios name = monserveur
    hosts allow = 192.168.0.0/24

Tester et gérer le service

testparm               # valide la syntaxe de smb.conf avant de (re)démarrer

systemctl restart smb  # RHEL/CentOS 7+ (démon smbd)
systemctl restart nmb  # démon nmbd (résolution NetBIOS)
service smbd restart   # Debian/Ubuntu (init classique)

smbstatus               # affiche les partages actifs et les connexions en cours

Monter un partage Windows (client)

Préférer l'adresse IP au nom NetBIOS, et éviter les majuscules dans les noms de partage :

mount -t cifs -o username=utilisateur,password=motdepasse //192.168.0.10/partage /mnt/partage

Montage persistant via /etc/fstab — préférer un fichier credentials séparé (chmod 600) à un mot de passe en clair dans fstab :

//192.168.0.10/partage /mnt/partage cifs credentials=/etc/samba/creds-partage,uid=utilisateur 0 0

Correspondance utilisateurs Linux ↔ Samba

Chaque utilisateur Samba doit correspondre à un compte Linux existant. Le mot de passe Samba est distinct du mot de passe système et stocké séparément (/etc/samba/smbpasswd ou base tdbsam selon passdb backend) :

smbpasswd -a utilisateur   # ajoute/active un utilisateur Samba (compte Linux déjà existant)

Clients Samba

smbclient //machine/partage -U login       # connexion interactive à un partage
smbclient -L hostname -U login             # liste les partages exposés par un serveur
smbclient -L hostname                      # idem, en accès anonyme si autorisé

Montage rapide en ligne de commande (obsolète sur les distributions récentes au profit de mount -t cifs) :

smbmount //machine/partage /mnt/mountpoint -o username=login

Intégration à un domaine Active Directory

L'intégration d'un serveur Samba à un domaine AD nécessite un client Kerberos, Active Directory reposant sur DNS, LDAP, Kerberos, NTP et SMB/CIFS.

Client Kerberos

apt-get install krb5-user   # ou krb5-workstation sur RHEL/CentOS
ntpdate ntp.example.com     # synchroniser l'heure avant tout (Kerberos est sensible au décalage horaire)
# /etc/krb5.conf
[libdefaults]
    default_realm = EXAMPLE.COM

[realms]
EXAMPLE.COM = {
    kdc = ad.example.com
    admin_server = ad.example.com
}
[domain_realm]
    .example.com = EXAMPLE.COM

⚠️ La casse doit être scrupuleusement respectée : le nom de royaume Kerberos (majuscules, EXAMPLE.COM) et le nom de domaine DNS (minuscules, example.com) ne sont volontairement pas les mêmes chaînes.

kinit administrateur@EXAMPLE.COM   # obtenir un ticket
klist                              # vérifier le ticket en cours
kdestroy                           # le détruire

Configuration Samba pour l'ADS

[global]
    realm = EXAMPLE.COM
    workgroup = EXAMPLE
    security = ADS
    encrypt passwords = true
    invalid users = root

Rejoindre le domaine

net ads join -U administrateur    # rejoint le domaine AD (pour quitter : net ads leave)
net ads info                      # infos sur le domaine joint
kinit administrateur@EXAMPLE.COM
smbclient -L //ad -k              # vérifie l'accès Kerberos aux partages du contrôleur AD

Authentification unifiée avec Winbind

Winbind, combiné à PAM et NSS, permet de faire apparaître les comptes d'un domaine Windows comme des comptes UNIX classiques.

apt-get install winbind
# ajout dans /etc/samba/smb.conf, section [global]
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
winbind separator = +
winbind use default domain = yes
template shell = /bin/bash
template homedir = /home/%D/%U
wbinfo -u   # liste les comptes utilisateurs vus via Winbind
wbinfo -g   # liste les groupes

Intégration à NSS (/etc/nsswitch.conf) puis vérification :

passwd: compat winbind
group:  compat winbind
getent passwd   # doit mélanger comptes locaux et comptes AD
getent group

Intégration à PAM (exemple Debian, /etc/pam.d/common-auth) :

auth    sufficient      pam_winbind.so
auth    required        pam_unix.so nullok_secure

⚠️ Adapter précisément à la distribution et à la configuration PAM existante — une erreur dans ces fichiers peut bloquer toute authentification locale, y compris pour root.

Voir aussi

  • Options samba — glossaire des directives de smb.conf
  • Rhcsa samba — configuration détaillée d'un partage (sécurité, impression, homes)
  • Samba rhel7 — mise en œuvre RHEL7 (systemd, firewalld, montage multiuser)
  • Selinux samba — contextes, ports et booléens SELinux propres à Samba
  • Sendmail — autre service historique de la même famille RHCSA