Linux

拒絕在 SFTP 伺服器上修改時間戳

  • September 12, 2017

我有一個 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 請求。

您可以使用它們來禁止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

引用自:https://serverfault.com/questions/821760