Linux

Корзина Samba через vfs_recycle: настройка, проверка и очистка

Ниже — рабочая настройка корзины Samba для общей папки files. Удалённые через SMB файлы будут попадать в .recycle/имя_пользователя.

1. Проверяем Samba и сохраняем конфиг

smbd --version
testparm -s
cp -a /etc/samba/smb.conf /root/smb.conf.before-recycle

2. Добавляем 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-pager

4. Тестируем удаление через 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/testuser

6. Восстанавливаем файл

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.txt

7. Проверяем версии одноимённых файлов

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*" -ls

8. Настраиваем очистку старше 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 -delete

9. Диагностика и 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, появляется в корзине нужного пользователя, восстанавливается с корректными правами, а повторные удаления не перезаписывают старые версии.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *