Créer une corbeille sur un partage Samba Linux

La mascotte Tux de Linux

Les partages de fichiers Samba sont d’une efficacité et d’une polyvalence à toute épreuve. Mais pour tous ceux qui se sont retrouvés avec des fichiers supprimés par erreur et devenus irrécupérables je n’ai que trois choses à dire :

  • Faites des sauvegardes !
  • Faites vraiment des sauvegardes !!
  • Créez une corbeille sur votre partage Samba !

Samba VFS recycle

Le module recycle de Samba permet de créer justement une corbeille ! Celui-ci intercepte les tentative de suppression et déplace le fichier dans un dossier à la place (le principe même d’une corbeille). Attention cependant, il n’y a pas de suppression automatique des éléments placés dans ce dossier ! J’y reviendrai par la suite.

Pour activer le module recycle il suffit de modifier votre classique /etc/samba/smb.conf :

[partage]
comment = partage
path = /share
vfs objects = recycle
recycle:repository = .recycle
recycle:keeptree = yes
recycle:versions = yes

À savoir que vous pouvez ajoutes ces lignes dans un partage spécifique comme ici, ou bien uniquement dans la section [global] auquel cas cela s’appliquera pour tous les partages.

Je détailles les effets de chaque ligne :

  • vfs objects = recycle : active le module recycle
  • recycle:repository = .recycle : défini le dossier .recycle dans le partage comme le dossier destination de notre corbeille
  • recycle:keeptree = yes : préserve les dossiers et sous-dossiers des fichiers dans la corbeille
  • recycle:versions = yes : permet de conserver plusieurs copies d’un même fichier avec un renommage automatique

Et si l’on customisait un peu tout ça ?

[partage]
comment = partage
path = /share
vfs objects = recycle
recycle:repository = Corbeille/%U/
recycle:keeptree = yes
recycle:versions = yes
recycle:exclude_dir = Corbeille
recycle:maxsize = 1048576
recycle:touch = yes
recycle:directory_mode = 0700

Les détails :

  • recycle:repository = Corbeille/%U/ : un dossier par utilisateur sera automatiquement créé dans le dossier Corbeille
  • recycle:exclude_dir = Corbeille : le dossier Corbeille est exclu des dossiers à déplacer dans la … Corbeille. Si vous n’appliquez pas ça, vous allez vous retrouver avec un problème récursif de dossiers qui se crées dans la Corbeille à chaque fois que vous essayez de supprimer un élément de la Corbeille.
  • recycle:maxsize = 1048576 : les fichiers ayant une taille supérieure à 1 Mo seront supprimés directement sans passer par la Corbeille.
  • recycle:touch = yes : modifie la date de dernier accès du fichier lors du déplacement dans la corbeille.
  • recycle:directory_mode = 0700 : lors de la création des corbeilles appliques ces droits. Si le paramètre recycle:subdir_mode n’est pas défini, alors ces droits sont aussi appliqués lors de la création de sous-dossiers. Ici on bloque l’accès des autres utilisateurs à la corbeille de chaque utilisateur.

On a maintenant une belle corbeille par utilisateur !

Pour connaître les diverses options de recycle : https://www.samba.org/samba/docs/current/man-html/vfs_recycle.8.html

Mais il faut toujours qu’on s’occupe de ce problème de suppression automatique qui est inexistant.

Suppression auto avec cron

Notre amis cron est à la rescousse !

Un coup de crontab -e pour éditer votre configuration :

0 18 * * * find /share/Corbeille/ -type f -atime +6 -exec rm -f '{}' \; && find /share/Corbeille/ -type d -empty -exec rmdir '{}' \;

Décortiquons cette ligne en 3 morceaux :

  • 0 18 * * * : on exécute la commande tous les jours à 18h00
  • find /share/Corbeille/ -type f -atime +6 -exec rm -f ‘{}’ \; : on supprime tous les fichiers de la corbeille dont la date de dernier accès date d’il y a 7 jours ou plus (pour rappel cette date est mise à jour lors du déplacement grâce au paramètre Samba recycle:touch comme vu plus haut)
  • find /share/Corbeille/ -type d -empty -exec rmdir ‘{}’ \; : enfin on supprime tous les dossiers vides de la Corbeille

Voilà pour la création d’une corbeille complète et fonctionnelle avec Samba et cron !