Корзина Samba через vfs_recycle: настройка, проверка и очистка
Ниже — рабочая настройка корзины Samba для общей папки files. Удалённые через SMB файлы будут попадать в .recycle/имя_пользователя.
1. Проверяем Samba и сохраняем конфиг
smbd --version
testparm -s
cp -a /etc/samba/smb.conf /root/smb.conf.before-recycle2. Добавляем vfs_recycle в share
[files]
path = /srv/samba/files
read only = no
browseable = yes
vfs objects = recycle
recycle:repository = .recycle/%U
recycle:keeptree = yes
recycle:versions = yes
recycle:touch = yes
recycle:directory_mode = 0700
recycle:subdir_mode = 0700
recycle:exclude = *.tmp,*.temp,~$*
recycle:exclude_dir = .recycle,tmp,cacheЕсли в vfs objects уже есть другие модули, не заменяйте их: добавьте recycle в существующий список.
3. Проверяем и применяем
testparm -s --section-name=files
smbcontrol all reload-config
systemctl status smbd --no-pager4. Тестируем удаление через SMB
apt install smbclient
echo "recycle test" > /tmp/recycle-test.txt
smbclient //127.0.0.1/files -U testuser -c "put /tmp/recycle-test.txt recycle-test.txt; ls; del recycle-test.txt"5. Ищем файл в корзине
find /srv/samba/files/.recycle -type f -name "recycle-test*" -ls
namei -l /srv/samba/files/.recycle/testuser6. Восстанавливаем файл
cp -a /srv/samba/files/.recycle/testuser/recycle-test.txt /srv/samba/files/recycle-test-restored.txt
chown testuser:fileshare /srv/samba/files/recycle-test-restored.txt
ls -l /srv/samba/files/recycle-test-restored.txt7. Проверяем версии одноимённых файлов
echo first > /tmp/same-name.txt
smbclient //127.0.0.1/files -U testuser -c "put /tmp/same-name.txt same-name.txt; del same-name.txt"
echo second > /tmp/same-name.txt
smbclient //127.0.0.1/files -U testuser -c "put /tmp/same-name.txt same-name.txt; del same-name.txt"
find /srv/samba/files/.recycle/testuser -type f -name "same-name*" -ls8. Настраиваем очистку старше 30 дней
Сначала dry-run:
find /srv/samba/files/.recycle -xdev -type f -mtime +30 -printПосле проверки:
find /srv/samba/files/.recycle -xdev -type f -mtime +30 -delete
find /srv/samba/files/.recycle -xdev -depth -type d -empty -delete9. Диагностика и rollback
journalctl -u smbd --since "15 min ago" --no-pager
testparm -s --section-name=files
getfacl -p /srv/samba/files /srv/samba/files/.recycle
cp -a /root/smb.conf.before-recycle /etc/samba/smb.conf
testparm -s
smbcontrol all reload-configКритерий успеха: файл удаляется через SMB, появляется в корзине нужного пользователя, восстанавливается с корректными правами, а повторные удаления не перезаписывают старые версии.