我有一个 Linux SFTP 服务器,我用它与其他人共享文件。
有一个脚本可以自动查找并删除10天前上传的文件:
find . -not -path . -mtime +10 -exec rm -frv {} \;
我注意到一些 SFTP 客户端保留上一次更改日期,导致脚本比预期更早地删除文件。
例如,如果今天是 12 月 15 日,并且客户上传他在 12 月 1 日在其计算机上修改的文件,则该文件会被立即删除,而不是在 12 月 25 日删除。
那么,我怎样才能拒绝客户改变上一次更改上传后的属性?
答案1
这sftp-server
(和兼容的internal-sftp
)具有-P
并-p
切换到黑名单/白名单某些 SFTP 请求。
您可以使用它们来禁止setstat
和fsetstat
请求:
Subsystem sftp internal-sftp -P setstat,fsetstat
请注意,这也将禁止权限(和其他属性)的更改。
您当然可以使用Match
指令针对每个用户(或根据其他标准)执行此操作。
答案2
您无法干净利落地完成此操作,并且您正在“违背”Unix / Linux既定惯例。完成任务的预期方法是使用-mtime +10 -ctime +10
,即删除相对于mtime较旧的文件和 ctime。
许多操作文件的工具将修改时间设置回以前的文件内容有意义地已更改。但是 ctime(“inode 更改时间”)指示文件的某些内容已更改:mtime 或内容或权限或其他元数据。
另外警告:您的脚本将产生意想不到的后果,因为它还会检查目录的 mtime 并删除整个目录。当您写入文件时,目录的 mtime 和 ctime 不会改变,因此文件将要被删除,因为rm -r ./that/directory