=========== Samba HOWTO (c) Nicolas Kovacs =========== Dernière révision : 8 juin 2015 Ce HOWTO 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. * Généralités * Prérequis * Configuration * Créer et gérer les utilisateurs Samba * Gestion et utilisation * Émuler un dossier Corbeille Généralités ----------- 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 : --8<---------- /etc/samba/smb.conf ------------------------------------------- # /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 --8<-------------------------------------------------------------------------- > '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 '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 Public 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 : --8<---------- /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 ... --8<-------------------------------------------------------------------------- > '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 : --8<---------- /etc/cron.weekly/sambacleanup.sh ------------------------------ #!/bin/sh # # sambacleanup.sh FIND=$(which find) RM=$(which 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 --8<-------------------------------------------------------------------------- > Le script est exécuté une fois par semaine. > Il supprime définitivement tous les fichiers vieux de plus de deux mois. ------------------------------------------------------------------------------ # vim: syntax=txt