Вы можете использовать встроенную корзину на файловом сервере Samba для автоматического сохранения всех файлов, удаленных пользователями. Для этого используется модуль vfs_recycle (Virtual File System).
В большинстве дистрибутивов Linux модули CIFS vfs устнавливаются вместе с пакетом samba. Если нужно, вы можете установить модули vfs вручную. Например, в Ubuntu / Linux Mint / Debian:
$ sudo apt update
$ sudo apt install samba-vfs-modules
Проверьте, что модуль установлен:
$ apt list | grep samba-vfs
По умолчанию при удалении файлов из общей папки samba, они удаляются безвозвратно. Администратор файлового сервера Linux может создать сетевую корзину. Сетевая корзина Samba Recycle Bin это скрытый каталог, в который перемещаются все объекты samba, удаленные пользователями.
Мы рассмотрим вариант создания глобальной корзины Samba (для всех пользователей).
Создайте каталог корзины и предоставьте права:
# mkdir –p /mnt/smb/.recycle
# mkdir chmod –r 777 /mnt/smb/.recycle
Откройте файл /etc/samba/smb.conf и добавьте следующие настройки секцию [global]:
# mcedit /etc/samba/smb.conf
vfs object = recycle recycle:repository = /mnt/smb/.recycle recycle:keeptree = yes recycle:versions = yes recycle:touch = yes recylce:exclude_dir = /tmp /TMP /temp /TEMP /public /cache /CACHE recycle:exclude = *.TMP *.tmp *.temp ~$* *.log *.bak
- vfs objects = recycle — включить корзину samba; Если вы уже используете другие модули VFS, их нужно перечислить в одной строке: vfs object = recycle full_audit shadow_copy2
- recycle:repository — каталог корзины samba, в котором будут хранится удаленные объекты. Каталог должен находится на той же файловой системе, где находится SMB папка. Если задать имя каталога в формате
/mnt/smb/.recycle/%U
, то удаленные файлы будут сохранены в каталог с именем пользователя, удалившего файл или папку. Если параметр не задан, каталог .recycle будет создан в корне каждой общей SMB папки; - recycle:keeptree — удалять объекты с сохранением дерева каталогов Если вы используете путь к recyclebin в формате
/mnt/smb/.recycle/%U
, то при удалении файла /mnt/share/docs/1.txt он будет доступен в корзине по пути /mnt/smb/.recycle/username/docs/1.txt - recycle:touch — поменять время последнего доступа к файла при его перемещении в корзину;
- recycle:touch_mtime = yes – обновить дату последней модификации файл при перемещении в корзину;
- recycle:versions — при удалении файлов с совпадающими именами, добавлять к имени номер версии (Copy #N of.);
- recylce:exclude_dir – не помещать объекты из указанных каталогов в корзину;
- recycle:exclude — добавить исключения для определенные типы файлов. Файлы с этими расширениями будут удалены безвозвратно;
- recycle:maxsize – можно задать максимальный размер файлов, которые нужно помещать в корзину. Размер указывается в байтах.
По умолчании корзина создается с правами 0700. Эти права наследуются на все объекты в корзине. Вы можете задать права по-умолчанию так:
recycle:directory_mode = 2770
Также вы можете изменить права по-умолчанию для вложенных директорий.
recycle:subdir_mode = MODE
Для применения изменения нужно перезапустить samba:
# systemctl restart smb
Для автоматической удаления файлов старше 60 дней из сетевой корзины samba используйте такой bash скрипт:
#!/bin/bash recyclePath="/mnt/smb/.recycle" maxStoreDays="60" /usr/bin/find $recyclePath -name "*" -ctime +$maxStoreDays -exec rm {} \;
Разрешите запуск скрипта
# chmod +x /rootb/bin/cleanup_samba_recycle.sh
Создайте задание в планировщик cron для ежедневного запуска очистки корзины:
# crontab -e
0 4 * * * /root/bin/cleanup_samba_recycle.sh
2 комментария
А можно ли задать права для файлов, помещаемых в корзину?
А можно ли задать автоматически права для файлов, помещаемых в корзину?
Прошу разобрать 2 варианта — права те, что и были, и перезапись прав на те, что будут указаны в конфиге