Avec Samba, il est effectivement possible de fournir une " corbeille réseau ", ou plus explicitement un répertoire dans lequel viendraient se jeter les fichiers ou dossiers effacés par les utilisateurs.
Note : Pensez à ajouter une fonction de suppression du contenu de cette corbeille, à 30 jours par exemple (via crontab ou autre).

Pour info, nous activons également l'option "versioning", puisqu'elle existe, pour le cas ou plusieurs fichiers du même nom viendraient à être supprimés à des dates différentes.

Première Solution - Une corbeille commune pour tous les utilisateurs et tous les dossiers partagés


Ici, on considère que tous les fichiers supprimés (dans le partage) vont atterrir dans le même dossier ".recycle". Samba va reproduire une arborescence dans ce dernier pour permettre à l'admin réseau de s'y retrouver. Dans ce cas, c'est lui qui doit récupérer les fichiers supprimés, depuis le serveur Samba Linux.

  • Création du dossier dédié à la corbeille réseau (si " /share " correspond à votre arborescence de partage, c'est à dire le répertoire racine qui contient les dossiers partagés) :
# mkdir /share/.recycle
# chmod 775  /share/.recycle


  • Modification de la partie " Global " du smb.conf. Ajout de la partie " corbeille reseau " comme ci après :
## fichier conf samba
## exemple 3 corbeille reseau

[global]
        workgroup = WORKGROUP
        server string = samba-test
	security = users
        passdb backend = tdbsam
        load printers = no
	disable spoolss = Yes

# securite reseau
	hosts allow = 192.168.0.

# corbeille reseau
        vfs objects = recycle
        recycle:repository = /share/.recycle
        recycle:keeptree = Yes
        recycle:versions = Yes

#===================== Share Definitions =======================



Attention ! Ca peut déborder une corbeille :


corbeille_trop_pleine


  • Avoir une corbeille c'est bien, mais si elle n'est jamais vidée, cela va vite poser un problème de place. Une solution parmi d'autres consiste à faire tourner une routine (via crontab) avec la commande " find " associée à " rm ". Celle-ci va "zieuter" les fichiers contenus dans la corbeille et virer ceux qui ont été "supprimés" par les utilisateurs il y a plus de 30 jours (remplacez 30 par la valeur qui vous convient dans l'exemple ci dessous). Notez l'option "mtime" et non pas "ctime", qui prend en compte la date de dernière modification du fichier plutôt que sa date de création, on ne sait jamais..
# /usr/bin/find /share/.recycle  -mtime +30 -exec /bin/rm -Rf {} \;


  • Vous pourriez également vouloir partager directement ce modèle de corbeille via Samba, à destination des utilisateurs. C'est tout à fait possible mais vivement déconseillé. En effet, supposons pour l'exemple, dans une société lambda, que le comptable supprime un fichier " paye.xls " du dossier partagé et sécurisé " Compta ". Ce fichier va se retrouver dans la corbeille (.recycle) que vous aurez partagée. Il deviendra donc accessible à toute personne ayant accès à la corbeille, même si cette personne n'avait pas accès au dosssier "compta". En d'autres termes, une corbeille globale accessible sur le réseau présente un risque sérieux de contournement des règles d'accès que vous aurez installées sur vos partages.




Seconde solution - Une corbeille dans chaque partage


Dans ce cas, le problème décrit ci-dessus ne se pose plus. Si une corbeille se trouve dans chaque partage, elle hérite de fait des droits d'accès inhérents au dit partage. Vous me suivez ?

Donc on utilise un dossier ".recycle" dans le partage concerné (et un pour chaque dossier partagé par Samba dont on souhaite qu'il bénéficie d'une Corbeille), en expliquant (ou pas) aux utilisateurs comment retrouver les fichiers qu'ils ont viré.

La partie "global" reste inchangée, et la modif (4 dernières lignes) se fait dans chaque partage à l'image du dossier compta dans l'exemple ci dessous :

## fichier conf samba
## exemple 3 corbeille reseau

[global]
        workgroup = WORKGROUP
        server string = samba-test
	security = users
        passdb backend = tdbsam
        load printers = no
	disable spoolss = Yes

# securite reseau
	hosts allow = 192.168.0.

#===================== Share Definitions =======================

[compta]
	path = /share/compta
        Les options habituelles user, group etc

	vfs objects = recycle
	recycle:repository = .recycle
	recycle:keeptree = yes
	recycle:versions = yes




Notez le point au début de ".recycle " pour obtenir un dossier caché. Inutile de le créer (.recycle), Samba le fera pour vous à la première suppression de fichiers.


recycle_samba

  • Depuis Windows, on accèdera à la corbeille, soit en rajoutant ".recycle" à la fin de l'adresse d'exploration réseau, soit en affichant les dossiers et fichiers cachés dans les options de l'explorateur Microsoftien.
  • Depuis une Station Linux (et donc une CentOS), via Nautilus, un "ctrl + H" affichera les fichiers cachés et donc le dossier ".recycle". Sinon, comme pour Windows, ajoutez "/.recycle" à l'adresse d'exploration.




Petit inconvénient de cette solution : Pour vider la corbeille régulièrement, il faudra traiter tous les dossiers ".recycle" en s'inspirant de la ligne ci dessous. Soit via un script avec une ligne par corbeille, soit par une boucle "While" associée à notre commande "find". Mais ceci est un autre sujet..

Dans l'exemple ci dessus, la corbeille (.recycle) se trouve dans /share/compta, donc la ligne de "nettoyage" devient :

# /usr/bin/find /share/compta/.recycle  -mtime +30 -exec /bin/rm -Rf {} \;







Les autres pages Samba Linux sur le site :

Partage de fichiers Samba - 1ere partie - Installation et Configuration de base
Partage de fichiers Samba - 2eme partie - Gestion utilisateurs et options de partage
Partage de fichiers Samba - 3eme partie - Optimisations et quelques additionnels


Vous pouvez commenter ou participer à l'amélioration de cet article via le topic dédié du forum.