samba – сетевая корзина

После того как в конце года сотрудник по ошибке грохнул директорию с отчетами на сетевом диске я озаботился созданием корзины на шарах, для таких случаев.

Создаем директорию для корзины и меняем права:

# 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
image_pdfimage_print

Leave a Reply

Your email address will not be published. Required fields are marked *