我有一个Linux SFTP服务器,我用它与其他人共享文件。
有一个脚本会自动查找和删除超过10天前上传的文件:
find . -not -path . -mtime +10 -exec rm -frv {} \;
我注意到一些SFTP客户端保留上次修改date,导致脚本比预期更快地删除文件。
例如,如果“今日”是十二月十五号,客户在十二月一日上传他在电脑上修改过的一个文件,那么文件立即被删除,而不是十二月二十五号。
那么,怎样才能拒绝客户端上传后修改上次修改的属性呢?
sftp-server (和兼容的internal-sftp )具有-P和-p开关,黑/白列出某些SFTP请求。
您可以使用它们来禁止setstat和fsetstat请求:
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 会导致文件被删除