Mettre en place un serveur Samba sous Slackware

Cet article décrit la mise en place d’un serveur de fichiers Samba sous Slackware pour un réseau hétérogène composé de clients sous Windows et sous Linux. Samba permet l’échange de fichiers entre Windows, Linux et Mac OS X. Le nom Samba est dérivé du protocole SMB (Server Message Block), utilisé par Microsoft depuis le début des années 90 pour le partage de données et d’imprimantes.

Prérequis

Dans le pare-feu, ouvrir les ports suivants :

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

Si les comptes utilisateurs des clients Linux sont sur un partage NFS, il faut impérativement utiliser l’option no_root_squash dans /etc/exports, sous peine de se retrouver avec une flopée de bugs bizarres de GVFS dûs à des problèmes de permissions.

Configuration

Créer les répertoires des partages respectifs :

# mkdir -pv -m 1777 /srv/samba/{public,confidentiel}
mkdir: création du répertoire « /srv/samba »
mkdir: création du répertoire « /srv/samba/public »
mkdir: création du répertoire « /srv/samba/confidentiel »

Éditer /etc/samba/smb.conf comme ceci par exemple :

# /etc/samba/smb.conf
 
[global]
workgroup = WORKGROUP
netbios name = %h
server string = Serveur de fichiers %h
dns proxy = yes 
domain master = no
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
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
  • workgroup = WORKGROUP définit le nom du groupe de travail. Les clients Windows doivent tous être membres de ce groupe de travail.
  • netbios name = %h 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 (%h).
  • server string = Serveur de fichiers %h indique le nom avec lequel le serveur s’identifie. Là aussi, %h sera remplacé par le nom d’hôte.
  • 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 », « le serveur qu’on éteint le moins souvent », etc.
  • 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 deux services Samba smbd et nmbd, ils utilisent des événements globaux dans les deux fichiers /var/log/samba/log.smbd et /var/log/samba/log.nmbd. Ni le nom ni l’emplacement de ces deux fichiers ne peuvent être modifiés.
  • 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.
  • syslog = 0 signifie que seuls les messages d’erreur sont journalisés dans /var/log/syslog. Pour obtenir une journalisation plus « bavarde », on remplacera la valeur 0 par 1, 2, 3, etc.
  • 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 réglages par interfaces sont activés par la directive bind interfaces only.
  • 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é. Elle est optionnelle, étant donné qu’il s’agit du réglage par défaut 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. Physiquement, les mots de passe sont stockés dans le fichier /etc/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 Samba" -g users -s /bin/false smbguest
# passwd -l smbguest
# smbpasswd -a smbguest -d
  • L’utilisateur ne dispose pas de shell de connexion (-s /bin/false).
  • 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).

Créer un ou plusieurs utilisateurs Samba normaux. Deux cas de figure se présentent ici. Si l’utilisateur a déjà un compte système :

# smbpasswd -a kikinovak

Éventuellement, vérifier si l’utilisateur fait bien partie du groupe users :

# groups kikinovak | grep users
kikinovak : users floppy audio video cdrom plugdev power netdev

Si ce n’est pas le cas, il faudra l’ajouter comme ceci :

# usermod -a -G users kikinovak

Autrement, s’il n’a pas de compte système :

# useradd -g users -d /dev/null -s /bin/false kikinovak
# passwd -l kikinovak
# smbpasswd -a kikinovak
  • Ici, l’utilisateur n’a ni répertoire utilisateur, ni shell de connexion.
  • Son compte Linux est également verrouillé.

Afficher la liste des utilisateurs Samba :

# pdbedit -L

Supprimer un utilisateur Samba :

# smbpasswd -d 

Éventuellement, on supprimera son compte Linux correspondant :

# userdel -r 

Gestion et utilisation

Tester la configuration :

# testparm

Activer et gérer Samba :

# chmod +x /etc/rc.d/rc.samba
# /etc/rc.d/rc.samba start|stop|restart

Afficher les partages sur le serveur :

# smbclient -L localhost -N

Émuler un dossier Corbeille

Lorsqu’un supprime un fichier sur un partage Samba, il va directement aux oubliettes. Or, tout le monde a pris l’habitude d’avoir une deuxième chance et de pouvoir récupérer des fichiers supprimés dans la Corbeille.

Il existe sous Samba une façon d’activer une corbeille grâce au module Recycle,
qui se situe dans /usr/lib/vfs/recycle.so.

Pour mettre en place cette corbeille, nous allons ajouter une stance correspondante à chacun de nos partages :

# /etc/samba/smb.conf 
...
[Confidentiel]
path = /srv/samba/confidentiel
comment = Partage Confidentiel
read only = no
invalid users = root nobody smbguest

vfs object = recycle
  recycle:repository = .Corbeille
  recycle:keeptree = Yes
  recycle:touch = Yes
  recycle:versions = Yes
  recycle:maxsixe = 0
  recycle:exclude = *.tmp
  recycle:exclude_dir = /tmp
  recycle:noversions = *.doc
...
  • recycle:repository = .Corbeille indique l’endroit où seront stockés les fichiers supprimés.
  • recycle:keeptree = Yes indique si la structure des répertoires doit être conservée (Yes) ou si les fichiers dans le répertoire qui est supprimé doivent être conservés séparément dans la corbeille (No).
  • recycle:touch = Yes indique si la date d’accès du fichier doit être modifiée lors du déplacement dans la corbeille.
  • recycle:versions = Yes permet de conserver deux fichiers supprimés ayant le même nom. La version la plus récente sera renommée en conséquence.
  • recycle:maxsize = 0 empêche les fichiers d’une taille de 0 octet d’être envoyés à la corbeille.
  • recycle:exclude = *.tmp liste les fichiers qui ne passeront pas par la Corbeille.
  • recycle:exclude_dir = /tmp offre la même fonctionnalité pour les répertoires.
  • recycle:noversions = *.doc spécifie la désactivation du contrôle de version pour certains types de fichiers. Évidemment, cette option est utile uniquement lorsque recycle:versions est activé.

Accéder à la corbeille d’un partage :

  • Sous Linux, activer l’affichage des fichiers cachés.
  • Sous Windows, ajouter \.Corbeille au chemin du partage.

Pour vider la corbeille régulièrement, on pourra utiliser le script suivant en l’adaptant à ses besoins :

#!/bin/sh
#
# /etc/cron.weekly/sambacleanup.sh

FIND=/usr/bin/find
RM=/bin/rm
SHARES="/srv/samba/public \
        /srv/samba/confidentiel"

for SHARE in $SHARES; do
  if [ -d $SHARE/.Corbeille ]; then
    $FIND $SHARE/.Corbeille -mtime +60 -exec $RM -rf {} \;
  fi
done
  • Le script est exécuté une fois par semaine.
  • Il supprime définitivement tous les fichiers vieux de plus de deux mois.

Téléchargement

Des modèles de fichiers pour smb.conf et sambacleanup.sh sont disponibles dans mon dépôt Github, dans le répertoire template/samba :

# git clone https://github.com/kikinovak/microlinux

 

Ce contenu a été publié dans Documentation Microlinux, Slackware, avec comme mot(s)-clé(s) , , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

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