SAMBA dispose d’un système permettant de gérer des corbeilles réseau : si un utilisateur supprime par mégarde un fichier, ce fichier peut être récupéré dans une corbeille à la racine de l’arborescence.
La configuration doit pourtant être réfléchie : il ne faut pas qu’un utilisateur puisse consulter un fichier auquel il n’aurait pas droit, simplement parce qu’il aurait été supprimé.
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
ou :
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
Popularity: 17%