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.
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
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.
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 :
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
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
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