拒绝SFTP服务器上的时间戳修改

我有一个Linux SFTP服务器,我用它与其他人共享文件。

有一个脚本会自动查找和删除超过10天前上传的文件:

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

我注意到一些SFTP客户端保留上次修改date,导致脚本比预期更快地删除文件。

例如,如果“今日”是十二月十五号,客户在十二月一日上传他在电脑上修改过的一个文件,那么文件立即被删除,而不是十二月二十五号。

那么,怎样才能拒绝客户端上传后修改上次修改的属性呢?

sftp-server (和兼容的internal-sftp )具有-P-p开关,黑/白列出某些SFTP请求。

您可以使用它们来禁止setstatfsetstat请求:

 Subsystem sftp internal-sftp -P setstat,fsetstat 

请注意,这将不允许权限(和其他属性)的更改。

当然,您可以使用Match指令按用户(或其他标准)来执行此操作。

你不能干净地做这个,而且你正在“反对”Unix / Linux的惯例。 完成任务的预期方式是使用-mtime +10 -ctime +10 ,即删除mtime 和ctime较老的文件。

当内容有意义的改变时,许多运行文件的工具将mtime设置回过去。 但ctime(“inode更改时间”)是一个有关该文件已更改的指示符:mtime或内容或权限或其他元数据。

另外警告:你的脚本会有意想不到的后果,因为它也检查目录的mtime并删除整个目录。 当您写入文件时,目录的mtime和ctime不会更改,因此rm -r ./that/directory 导致文件被删除