Installer un serveur Samba sous CentOS 7

Serveur SambaSamba 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

Il faudra ouvrir les ports suivants dans le pare-feu.

  • 137 en UDP
  • 138 en UDP
  • 139 en TCP
  • 445 en TCP

Dans mon pare-feu personnalisé, la configuration ressemble à ceci.

# Samba
$IPT -A INPUT -p udp -i $IFACE_LAN --dport 137:138 -j ACCEPT
$IPT -A INPUT -p tcp -i $IFACE_LAN --dport 139 -j ACCEPT
$IPT -A INPUT -p tcp -i $IFACE_LAN --dport 445 -j ACCEPT

Installation

Les paquets relatifs à Samba sont tous fournis par les dépôts officiels.

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

# 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, il faut impérativement modifier le contexte SELinux de notre arborescence personnalisée.

# semanage fcontext -a -t samba_share_t '/srv/samba(/.*)?'
# 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
# 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 = no
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 utilisera yes sur le serveur principal et no 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 journal log.client est créé. Quant aux services Samba smbd et nmbd, ils utilisent des événements globaux dans les deux fichiers /var/log/samba/log.smbd et log.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 valeur 0 par 1, 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 en fichier.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 oublier localhost, faute de quoi les outils d’administration comme smbclient ne fonctionneront pas sur le serveur.
  • Les directives hosts allow et hosts 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 groupe users.
  • Les paramètres create mode = 660 et directory 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.

# useradd -c "Utilisateur Public Samba" -g users -d /dev/null \
  -s /sbin/nologin smbguest
# passwd -l smbguest
Locking password for user smbguest.
passwd: Success
# 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.

# usermod -a -G users kikinovak

Ensuite, on va créer l’utilisateur Samba correspondant.

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

# useradd -c "Jean Mortreux" -s /sbin/nologin -d /dev/null \
  jmortreux
# passwd -l jmortreux
Locking password for user jmortreux.
passwd: Success
# usermod -a -G users jmortreux
# smbpasswd -a jmortreux
New SMB password:
Retype new SMB password:
Added user jmortreux.

La commande pdbedit permet d’afficher la liste des utilisateurs Samba.

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

# smbpasswd -d adebuf
Disabled user adebuf.

Éventuellement, on songera à supprimer son compte Linux correspondant.

# 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 = No
  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.

# systemctl enable smb nmb
# systemctl start smb nmb
# systemctl status smb
# systemctl status 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 clients.

Téléchargement

Un fichier modèle smb.conf est disponible dans mon dépôt Github centos-7-server-lan, dans le répertoire config/samba.

$ git clone https://github.com/kikinovak/centos-7-server-lan
$ cd centos/samba
$ ls
smb.conf
Ce contenu a été publié dans CentOS, Documentation Microlinux, avec comme mot(s)-clé(s) , , . Vous pouvez le mettre en favoris avec ce permalien.

2 réponses à Installer un serveur Samba sous CentOS 7

  1. Ping : Installer un serveur Samba sous CentOS 7 – SVNET Libre

  2. Ping : Installer un serveur Samba sous CentOS 7 - My Tiny Tools

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.