Назад | Перейти на главную страницу

Запрещение модификации метки времени на сервере SFTP

У меня есть SFTP-сервер Linux, который я использую для обмена файлами с другими людьми.

Есть скрипт, который автоматически находит и удаляет файлы, загруженные более 10 дней назад:

find . -not -path . -mtime +10 -exec rm -frv {} \;

Я заметил, что некоторые клиенты SFTP сохраняют Последнее изменение date, в результате чего сценарий удалит файлы раньше, чем ожидалось.

Например, если сегодня 15 декабря, и клиент загружает файл, который он изменил на своем компьютере 1 декабря, файл удаляется немедленно, а не 25 декабря.

Итак, как я могу отказать клиентам в изменении Последнее изменение атрибут после загрузки?

Вы не можете сделать это чисто, и вы действуете «вопреки» устоявшейся практике Unix / Linux. Ожидаемый способ выполнить вашу задачу - использовать -mtime +10 -ctime +10, то есть удалить файлы, которые старше по сравнению с mtime и ctime.

Многие инструменты, которые работают с файлами, возвращают mtime в прошлое, когда содержимое осмысленно изменилось. Но ctime («время изменения inode») является индикатором того, что что-то в файле изменилось: mtime, его содержимое, разрешения или другие метаданные.

Также предупреждение: ваш сценарий будет иметь непредвиденные последствия, потому что он также проверяет mtime каталогов и удаляет целые каталоги. Когда вы пишете в файлы, mtime и ctime каталога не меняются, поэтому файлы воля быть удаленным в результате rm -r ./that/directory

В sftp-server (и совместимый internal-sftp) имеет -P и -p переключает в черный / белый список определенных запросов SFTP.

Вы можете использовать их, чтобы запретить setstat и fsetstat Запросы:

Subsystem sftp internal-sftp -P setstat,fsetstat

Обратите внимание, что это также запретит изменение разрешений (и других атрибутов).

Конечно, вы можете сделать это для каждого пользователя (или по другим критериям), используя Match директива.