Sftp

SFTP 傳送文件的時間圖

  • June 5, 2020

我執行一個 SSH 伺服器(一個普通的sshd),它通過 SFTP 從不同時區/DST 的多個使用者接收文件。這些文件然後由一組工作作業輪詢和進一步處理。

為了防止文件未被處理(故障或緩慢的工作人員等),我決定實施一個簡單的檢查,將檢查所有 SFTP 映射的目錄並報告所有早於 X 的文件。

問題是伺服器上 SFTP 接收的文件顯然在他們的時間戳中包含使用者的本地時區/DST,mtime而且 - 令我驚訝的是 - 甚至ctime. 這導致檢查無法檢測到帶有正時區偏移的文件,並立即報告帶有負時區偏移的文件。

我似乎找不到如何將接收到的文件的時間圖示準化為伺服器的本地時區或 UTC 的方法。

您可以配置您的 sftp 伺服器以拒絕更改文件時間戳的請求。查找/etc/ssh/sshd_config目前的配置行,在我的例子中是

Subsystem      sftp    /usr/libexec/openssh/sftp-server

使用選項執行伺服器-Q以列出可以發出的請求:

/usr/libexec/openssh/sftp-server -Q requests

在我的情況下,這包括setstat並且fsetstat可能對應於改變時代。使用黑名單選項-P拒絕sshd_config文件中的這些請求:

Subsystem       sftp    /usr/libexec/openssh/sftp-server -P setstat,fsetstat

sshd通過使用信號 SIGHUP 終止配置來通知重新讀取配置。

sftp然後,當我嘗試使用保留時間的選項將文件放入伺服器時,該文件被複製,但其最後修改時間停留在“現在”。-p客戶看到了一個警告,您必須向您的使用者介紹以下內容:

sftp> put -p localfile remotefile
Uploading localfile to remotefile
Couldn't fsetstat: Permission denied

引用自:https://unix.stackexchange.com/questions/591012