Samba
Samba est une implémentation libre du protocole SMB/CIFS de Microsoft.
Nous allons voir comment configurer un serveur samba afin de partager des fichiers sur un réseau local.
Installation et configuration de base
Installez le serveur samba :
aptitude install samba smbclient
L'installeur vous demandera de choisir un domaine de travail. Vous pouvez laisser workgroup.
Éditez le fichier /etc/samba/smb.conf
:
interfaces = 192.168.0.1 bind interfaces only = yes security = user encrypt passwords = true passdb backend = tdbsam obey pam restrictions = yes unix password sync = no pam password change = no load printers = no [link] path = /srv/link/ read only = no writeable = yes valid users = link comment = link
Vous pouvez constater que j'ai choisi de désactiver la synchronisation entre les mots-de-passes linux et samba.
Créez l'utilisateur link :
adduser link --disabled-login --home /srv/link/ smbpasswd -a link
A partir d'une machine client, vous pouvez accéder au dossier partagé avec smbclient
:
smbclient //192.168.0.1/link -U link password
Éditer la liste des utilisateurs samba
Pour cela, il faut utiliser l'outil pdbedit
fournit avec le paquet samba
sous debian/ubuntu.
Pour lister les utilisateurs de la base de donnée :
pdbedit --list
Monter un partage automatiquement au boot
Si vous voulez que le partage soit monté automatiquement au démarrage du client, ajoutez les lignes suivantes dans le fichier /etc/fstab
du client :
//192.168.0.1/link /mnt/link smbfs credentials=/root/.smbpasswd 0 0
Le fichier /root/.smbpasswd
contient les informations de connexion :
username=link password=password
Remonter un partage automatiquement
Ce petit script, lancé en cron, permet de vérifier l'état d'un partage samba. Il nécessite d'avoir configuré le fichier /etc/fstab
comme décrit précédemment.
#! /bin/bash name="core-link" host="192.168.0.1" port="139" mount="/mnt/link" quiet=0 if [ "$1" = "--quiet" ]; then quiet=1 fi if nc -zv -w30 $host $port <<< ” &> /dev/null; then if [ "$quiet" = 0 ]; then echo "[$name] Service available, checking link status."; fi for i in `cat /proc/mounts | cut -d' ' -f2`; do if [ "$i" = "$mount" ]; then #already mounted, stop here if [ "$quiet" = 0 ]; then echo "[$name] Link is up."; fi exit 0 fi done #nothing found, so it's not mounted if [ "$quiet" = 0 ]; then echo "[$name] Link is down. Trying to mount."; fi if mount /mnt/link; then if [ "$quiet" = 0 ]; then echo "[$name] Link established."; fi else echo "[$name] Link mount failed. See error logs above." fi else echo "[$name] Service unavailable. Will wait until next cron." fi
Et le fichier crontab /etc/cron.d/link
(lancement toutes les 5 minutes) :
# m h dom mon dow user command */5 * * * * root /root/services/link.sh --quiet