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 !