Paramétrer correctement les corbeilles réseau

Paramétrage de la corbeille dans samba

Editer le fichier smb.conf, et, pour le partage considéré, rajouter les informations suivantes :

[donnees]
       recycle:touch = yes
       writeable = yes
       recycle:excludedir = /tmp /temp /trash
       path = /opt/donnees
       vfs object = recycle
       recycle:exclude = *.tmp *.temp
       recycle:keeptree = True
       public = yes
       recycle:versions = no
       recycle:repository = .recycle

Recharger ensuite samba pour que la corbeille soit prise en compte.

Modification des droits sur l’arborescence de la corbeille

Comme on peut le voir dans le fichier smb.conf, le nom de la corbeille est .recycle (recycle:repository).

Créer, à la racine de l’arborescence (ici, dans /opt/donnees, variable path), le dossier .recycle :

mkdir .recycle

Modifier ensuite les droits sur .recycle. On considère que tous les utilisateurs sont membres du groupe "utilisa. du domaine" :

setfacl -R -m g:"utilisa. du domaine":wx .recycle
setfacl -R -m d:g:"utilisa. du domaine:wx .recycle

Ainsi, les utilisateurs peuvent écrire dans ce dossier, mais ne peuvent lire son contenu.

On va également inhiber la lecture par le groupe par défaut (cf. l’article sur les ACLs :

setfacl -R -m g::- .recycle
setfacl -R -m d:g::- .recycle

Restaurer un fichier effacé malencontreusement

Avec cette configuration, les utilisateurs ne peuvent accéder à la corbeille. Pour récupérer un fichier, il suffit de se connecter en ssh sur le serveur, et de déplacer le fichier malencontreusement supprimé vers son emplacement d’origine. Les droits initiaux du fichier ont été conservés.

Par contre, la corbeille ne règle pas le cas du fichier qui a été vidé, mais qui existe toujours sur le système : des sauvegardes régulières restent nécessaires.

Vider la corbeille

La corbeille doit être vidée régulièrement, pour éviter qu’elle enfle dans des proportions trop importantes... On va donc programmer une tâche qui va se charger de supprimer les fichiers :

cat /root/vidage_corbeille
find /opt/donnees/.recycle -ignore_readdir_race -type f -atime +30 -exec rm -f {} \;
find /opt/donnees/.recycle -ignore_readdir_race -type d -empty -delete

Ce script va :

  • supprimer tous les fichiers qui ont été intégrés à la corbeille il y a plus de 30 jours
  • vider les dossiers vides

Il reste à programmer le nettoyage tous les jours, en rajoutant le script soit dans /etc/cron.daily, soit dans le crontab :

ln -s /root/vidage_corbeille /etc/cron.daily/vidage_corbeille
crontab -e
00 18 * * * /root/vidage_corbeille

Cas particulier des dossiers home des utilisateurs

Si on souhaite mettre en place une corbeille pour les dossiers /home des utilisateurs, on va utiliser la configuration suivante dans /etc/samba/smb.conf :

[homes]
   path = /home/%u
   comment = Home Directories
   browseable = yes
   writable = yes
   vfs object = recycle
   recycle:touch = yes
   recycle:keeptree = yes
   recycle: path = .recycle/%u
   recycle:versions = no
   recycle: touch = yes
   recycle: maxsize = 0
   recycle: exclude = *.tmp|*.temp|*.obj|~$*|*.$$$
   recycle: excludedir = /tmp|/temp|/trash

Les dossiers des utilisateurs sont montés dans /home/, la corbeille dans leur dossier personnel.

La commande de vidage de la corbeille va alors prendre la forme suivante :

find /home/*/.recycle -ignore_readdir_race -type f -atime +30 -exec rm -f {} \;
find /home/*/.recycle -ignore_readdir_race -type d -empty -delete

Pour aller plus loin...

Un petit tour sur le site de Samba n’est pas forcément inutile. Pour toutes les options concernant la corbeille :

http://samba.org/samba/docs/man/Samba-HOWTO-Collection/VFS.html#id2644353