Linux
拒絕在 SFTP 伺服器上修改時間戳
我有一個 linux SFTP 伺服器,用於與其他人共享文件。
有一個腳本可以自動查找和刪除超過 10 天前上傳的文件:
find . -not -path . -mtime +10 -exec rm -frv {} \;
我注意到一些 SFTP 客戶端保留最後修改日期,導致腳本比預期更早地刪除文件。
例如,如果今天是 12 月 15 日,並且客戶在 12 月 1 日上傳了他在電腦上修改的文件,則該文件會立即被刪除,而不是 12 月 25 日。
那麼,我怎樣才能拒絕客戶端在上傳後更改最後修改的屬性呢?
(
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