我有一个 linux SFTP 服务器,用于与其他人共享文件。
有一个脚本可以自动查找和删除超过 10 天前上传的文件:
find . -not -path . -mtime +10 -exec rm -frv {} \;
我注意到一些 SFTP 客户端保留最后修改日期,导致脚本比预期更早地删除文件。
例如,如果今天是 12 月 15 日,并且客户在 12 月 1 日上传了他在计算机上修改的文件,则该文件会立即被删除,而不是 12 月 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
请求:请注意,这也将不允许权限(和其他属性)更改。
您当然可以使用该
Match
指令为每个用户(或根据其他标准)执行此操作。