После того как в конце года сотрудник по ошибке грохнул директорию с отчетами на сетевом диске я озаботился созданием корзины на шарах, для таких случаев.
Создаем директорию для корзины и меняем права:
# mkdir -p /home/.trash # chgrp sambagroup .trash # chmod a+w .trash
# ls -al ... drwxrwxrwx. 2 root sambagroup 6 Дек 30 22:18 .trash ...
В vi /etc/samba/smb.conf в секции [global] дописываем:
## recycled
recylce:excludedir = tmp, temp, cache
recycle:exclude = *.iso, *.tmp, *.temp, ?~$*, ~$*, *.TMP, ~*
recycle:versions = Yes
recycle:touch = Yes
recycle:touch_mtime = Yes
recycle:keeptree = Yes
recycle:repository = /home/.trash/%U
# В секцию vfs дописываем:
vfs objects = full_audit recycle
бегло по параметрам:
- recylce:excludedir – список исключения директорий, файлы из которых не будут попадать в корзину
- recycle:exclude – список исключений для файлов. В данном случае указан в виде масок некоторых расширений.
- recycle:versions – параметр отвечает за версионность удаленных файлов, если их имена совпадают. В таком случае к удаленном файлу в начале имени будет добавляться Copy #N of.
- recycle:touch – параметр отвечает за то, будет ли указана дата изменения файла на время удаления файла, либо останется оригинальное значение файла.
- recycle:keeptree – сохранять или нет дерево каталогов для удаленных файлов.
- recycle:repository – указываем директорию, где будут храниться удаленные файлы. Она может располагаться где угодно. Если параметр не указан, используется значение по-умолчанию — .recycle в корне сетевого диска. %U – при установке этого параметра к каталогу корзины, все удаленные файлы будут храниться в директориях, с именами пользователей, которые их удалили, что довольно удобно.
В этом случае корзина будет одна для всех шар но не видима для пользователей samba.
Если вы хотите настроить корзину для каждого сетевого диска отдельно, то укажите эти же параметры в каждой сетевой шаре, указав уникальный путь для каждой корзины. И дополнительно добавьте к каждой шаре параметр:
vfs objects = recycle
Если у вас и аудит настроен для каждой шары отдельно, то не забудьте указать и этот модуль:
vfs objects = recycle full_audit
Для применения изменений необходимо перезапустить самбу.
Если вынести в шару – то она будет доступна пользователям (но тогда будет видно кто и, что удаляет). Что бы избежать этого стоит скрыть с глаз корзину добавив в [global]
# по умолчанию все файлы, начинающиеся с точки будут иметь атрибут "скрытый" hide dot files = yes
а так же настроить права доступа к ней на уровне шары. И/или по ip ограничить доступ оставив только для системного администратора или избранных пользователей.
Не забывем о SELinux, пропишем для корзины:
# semanage fcontext -a -t samba_share_t "/home/.trash(/.*)?" # restorecon -Rv /home/.trash/
Проверяем:
# ls -aZl drwxrwxrwx. 4 unconfined_u:object_r:samba_share_t:s0 root sambagroup 31 Янв 4 18:05 .trash
Периодическая очистка корзины от файлов старше 30 дней:
/usr/bin/find /home/.trash/ -type f -mtime +30 -exec rm -rf {} \;
Добавляем в cron на ежедневное исполнение:
#Clean trash 0 3 * * * root /home/svm/bin/trash-clean.sh