Samba permet l’échange de fichiers dans un réseau hétérogène, avec des postes clients tournant sous Windows, Mac OS X ou Linux. Le nom « Samba » est dérivé du protocole SMB (Server Message Block), utilisé par Microsoft depuis le début des années 1990 pour le partage de données et d’imprimantes.
Dans cet article, je décris la mise en place d’un partage de fichiers Samba sur un serveur CentOS pour un réseau composé de clients sous Windows et sous Linux. La configuration relativement simple fournie en exemple répond à un besoin assez répandu chez mes clients, avec un partage public ouvert à tous ainsi qu’un partage privé qui nécessite une authentification.
- Prérequis
- Installation
- Création de l’arborescence des partages
- Modification du contexte SELinux
- Configuration des partages
- Créer et gérer les utilisateurs Samba
- Gestion et utilisation
Prérequis
Il faudra ouvrir les ports suivants dans le pare-feu.
- 137 en UDP
- 138 en UDP
- 139 en TCP
- 445 en TCP
Concrètement, il suffit d’autoriser le service samba
dans FirewallD.
$ sudo firewall-cmd --permanent --add-service=samba $ sudo firewall-cmd --reload $ sudo firewall-cmd --list-all internal (active) target: default icmp-block-inversion: no interfaces: enp2s0 sources: services: samba ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Installation
Les paquets relatifs à Samba sont tous fournis par les dépôts officiels.
$ sudo yum install samba samba-client
Création de l’arborescence des partages
Dans un premier temps, on va créer les répertoires des partages respectifs.
$ sudo mkdir -pv -m 1777 /srv/samba/{public,confidentiel} mkdir: created directory ‘/srv/samba’ mkdir: created directory ‘/srv/samba/public’ mkdir: created directory ‘/srv/samba/confidentiel’ $ ls -l /srv/samba/ total 8 drwxrwxrwt. 2 root root 4096 Oct 20 08:21 confidentiel drwxrwxrwt. 2 root root 4096 Oct 20 08:21 public
On notera la présence du sticky bit (drwxrwxrwt
, valeur octale 1000) sur les répertoires des partages. On évite ainsi la suppression accidentelle des fichiers et des répertoires d’un autre utilisateur, même si l’on possède théoriquement les droits d’écriture dessus.
Modification du contexte SELinux
Si l’on utilise SELinux en mode renforcé, il faut impérativement modifier le contexte SELinux de notre arborescence personnalisée.
$ sudo semanage fcontext -a -t samba_share_t '/srv/samba(/.*)?' $ sudo restorecon -R -v /srv/samba/
Configuration des partages
La configuration de Samba s’effectue par le biais du fichier /etc/samba/smb.conf
. Le paquet samba
fournit pas moins de deux fichiers modèles smb.conf
et smb.conf.example
. Pour commencer, on va renommer smb.conf
.
$ cd /etc/samba $ sudo mv smb.conf smb.conf.orig
Ensuite on va créer notre propre configuration personnalisée comme ceci.
# /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
netbios name = AMANDINE
server string = Serveur de fichiers AMANDINE
dns proxy = yes
domain master = yes
log file = /var/log/samba/log.%m
log level = 0
max log size = 1000
bind interfaces only = yes
interfaces = 192.168.2.0/24 localhost
hosts allow = 192.168.2. 127.
security = user
passdb backend = tdbsam
unix password sync = no
invalid users = root
encrypt passwords = yes
guest account = smbguest
map to guest = bad user
force group = users
create mode = 0660
directory mode = 0770
[Public]
path = /srv/samba/public
comment = Partage Public
public = yes
only guest = yes
read only = no
[Confidentiel]
path = /srv/samba/confidentiel
comment = Partage Confidentiel
read only = no
invalid users = root nobody smbguest
Les options méritent quelques explications.
workgroup = WORKGROUP
définit le nom du groupe de travail. Les clients Windows doivent tous être membres de ce groupe de travail.netbios name = AMANDINE
définit le nom qui apparaîtra dans le Voisinage Réseau de Windows. Théoriquement, on pourrait très bien indiquer deux noms de machine différents pour les protocoles TCP/IP et NetBIOS. En pratique, on essaiera de rester cohérent, et on utilisera le nom d’hôte du serveur (AMANDINE
).server string = Serveur de fichiers AMANDINE
indique le nom avec lequel le serveur s’identifie.dns proxy = yes
active l’utilisation du serveur DNS local pour résoudre les noms d’hôtes Windows.- La directive
domain master
désigne un serveur Samba « maître » pour le domaine local. On utiliserayes
sur le serveur principal etno
sur les autres serveurs. « Serveur principal » signifie ici quelque chose comme « la machine la plus fiable » ou « le serveur qu’on éteint le moins souvent ». log file = /var/log/samba/log.%m
définit la journalisation. Pour chaque client qui utilise Samba, un fichier journallog.client
est créé. Quant aux services Sambasmbd
etnmbd
, ils utilisent des événements globaux dans les deux fichiers/var/log/samba/log.smbd
etlog.nmbd
. Ni le nom ni l’emplacement de ces deux fichiers ne peuvent être modifiés.log level = 0
signifie que seuls les messages d’erreur sont journalisés. Pour obtenir une journalisation plus « bavarde », on remplacera la valeur0
par1
,2
,3
, etc.max log size = 1000
limite la taille maximale du fichier journal à 1000 kilooctets. Lorsqu’un fichier journal dépasse cette taille, Samba le renomme enfichier.old
.- La directive
interfaces
définit les interfaces réseau par lesquelles Samba est censé communiquer. On veillera à faire apparaître les partages uniquement dans le réseau local. Ne pas oublierlocalhost
, faute de quoi les outils d’administration commesmbclient
ne fonctionneront pas sur le serveur. - Les directives
hosts allow
ethosts deny
permettent respectivement d’autoriser et d’interdire l’accès de certaines machines du réseau à Samba. - La directive
security = user
définit le modèle de sécurité de Samba. passdb backend = tdbsam
définit la gestion des mots de passe. TDB signifie Trivial Database et désigne un format de stockage binaire. Les mots de passe sont stockés dans le fichier/var/lib/samba/private/passdb.tdb
.unix password sync = no
désactive la synchronisation des mots de passe Samba avec les mots de passe Linux. Celle-ci est liée à toute une série de restrictions qui risquent de nous compliquer la vie, et il vaut mieux s’en passer.guest account = smbguest
désigne l’utilisateur Linux auquel on fait correspondre les utilisateurs invités.map to guest = bad user
renvoie vers le compte invité toute tentative de connexion avec un identifiant inexistant.force group = users
attribue tous les fichiers et répertoires nouvellement créés au groupeusers
.- Les paramètres
create mode = 660
etdirectory mode = 770
assurent que tous les fichiers (rw-rw----
) et répertoires (rwxrwx---
) créés par un membre du groupe puissent être lus par tous les autres membres du groupe. - Le nom du partage (
[Public]
,[Confidentiel]
) ne doit pas dépasser douze caractères.
Créer et gérer les utilisateurs Samba
Créer un utilisateur public smbguest
pour Samba.
$ sudo useradd -c "Utilisateur Public Samba" -g users -d /dev/null \ -s /sbin/nologin smbguest $ sudo passwd -l smbguest Locking password for user smbguest. passwd: Success $ sudo smbpasswd -a smbguest -d Added user smbguest.
- L’utilisateur
smbguest
ne dispose pas de shell de connexion (-s /sbin/nologin
) ni de répertoire d’utilisateur (-d /dev/null
). - Le mot de passe du compte Linux est verrouillé par
passwd -l
(lock). - L’option
-a
(add) indique àsmbpasswd
d’ajouter un utilisateur. - Celui-ci sera immédiatement désactivé par l’option
-d
(disabled).
La prochaine étape consiste à créer un ou plusieurs utilisateurs Samba normaux. Deux cas de figure se présentent ici.
Si l’utilisateur dispose déjà d’un compte système, on va d’abord l’ajouter au groupe système users
.
$ sudo usermod -a -G users kikinovak
Ensuite, on va créer l’utilisateur Samba correspondant.
$ sudo smbpasswd -a kikinovak New SMB password: Retype new SMB password: Added user kikinovak.
Les utilisateurs qui ne disposent pas de compte système pourront être créés comme ceci.
$ sudo useradd -c "Jean Mortreux" -s /sbin/nologin -d /dev/null \ jmortreux $ sudo passwd -l jmortreux Locking password for user jmortreux. passwd: Success $ sudo usermod -a -G users jmortreux $ sudo smbpasswd -a jmortreux New SMB password: Retype new SMB password: Added user jmortreux.
La commande pdbedit
permet d’afficher la liste des utilisateurs Samba.
$ sudo pdbedit -L smbguest:1000:Utilisateur Public Samba kikinovak:1001:Kiki Novak adebuf:1003:Agnès Debuf jmortreux:1002:Jean Mortreux
La suppression d’un utilisateur Samba pourra s’effectuer grâce à la commande smbpasswd
.
$ sudo smbpasswd -d adebuf Disabled user adebuf.
Éventuellement, on songera à supprimer son compte Linux correspondant.
$ sudo userdel -r adebuf
Gestion et utilisation
La commande testparm
permet de tester la configuration.
$ testparm
Load smb config files from /etc/samba/smb.conf
...
Processing section "[Public]"
Processing section "[Confidentiel]"
Loaded services file OK.
Server role: ROLE_STANDALONE
# Global parameters
[global]
bind interfaces only = Yes
domain master = Yes
guest account = smbguest
interfaces = 192.168.2.0/24 localhost
log file = /var/log/samba/log.%m
map to guest = Bad User
max log size = 1000
security = USER
server string = Serveur de fichiers AMANDINE
idmap config * : backend = tdb
create mask = 0660
directory mask = 0770
force group = users
hosts allow = 192.168.2. 127.
invalid users = root
[Public]
comment = Partage Public
guest ok = Yes
guest only = Yes
path = /srv/samba/public
read only = No
[Confidentiel]
comment = Partage Confidentiel
invalid users = root nobody smbguest
path = /srv/samba/confidentiel
read only = No
L’option -v
permet d’afficher la totalité des directives utilisées dans la configuration.
Activer et démarrer Samba.
$ sudo systemctl enable smb nmb --now $ sudo systemctl status smb nmb
Afficher les partages sur le serveur.
$ smbclient -L localhost -N Sharename Type Comment --------- ---- ------- Public Disk Partage Public Confidentiel Disk Partage Confidentiel IPC$ IPC IPC Service (Serveur de fichiers AMANDINE) Reconnecting with SMB1 for workgroup listing. Server Comment --------- ------- Workgroup Master --------- ------- WORKGROUP AMANDINE
À partir de là, on pourra se connecter depuis les postes Windows, ce qui fera l’objet de notre prochain article.
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.
1 commentaire
tuxmika · 26 juin 2022 à 14 h 48 min
Bonjour
Je cherche à comprendre les droits sur les partages
Vous indiquez : sudo mkdir -pv -m 1777 /srv/samba/{public,confidentiel}
Pourquoi ne pas avoir fais un chown -R :users avec un chmod 1770 sur le partage confidentiel et un chown -R nobody:nogroup et un chmod 1777 sur le partage public ?
Cordialement
Les commentaires sont fermés.