SFTP転送ファイルのタイムスタンプ

SFTP転送ファイルのタイムスタンプ

sshd異なるタイムゾーン/ DSTの複数のユーザーからSFTP経由でファイルを受信するSSHサーバー(一般)を実行します。これにより、一連のアクションがこれらのファイルをポーリングしてさらに処理します。

ファイルが処理されない場合(エラーやスローワーカープロセスなど)、SFTPマップされたすべてのディレクトリを確認し、すべてのファイルを報告する簡単なチェックを実装することにしました。以前の

問題は、SFTPがサーバーから受け取ったファイルには、明らかに次の特徴があることです。ユーザータイムスタンプのローカルタイムゾーン/ DSTそしてmtime- 驚いたことに - でもctime。これにより、スキャンは正のタイムゾーンオフセットで到着するファイルを検出できず、負のタイムゾーンオフセットで到着するファイルをすぐに報告します。

受信したファイルのタイムスタンプをサーバーのローカルタイムゾーンまたはUTCに正規化する方法が見つからないようです。

ベストアンサー1

ファイルタイムスタンプ変更要求を拒否するようにSFTPサーバーを構成できます。現在の構成ラインを見つけます/etc/ssh/sshd_config。私の場合

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

サーバーを実行して-Q実行できる要求を一覧表示するように選択します。

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

私が知っている限り、これには時代の変化が含まれており、おそらくこれに該当しますsetstat。ファイルからこれらの要求を拒否するには、fsetstatブラックリストオプションを使用します。-Psshd_config

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

設定の再読み込みは、SIGHUP信号を使用して設定を終了することによって信号を受信しますsshd

当時sftp試してみると置く-p時間を維持するオプションを使用してサーバーにファイルを送信すると、ファイルはコピーされますが、最後に変更された時間はまだ「今」です。顧客には警告が表示され、ユーザーに次のことを紹介する必要があります。

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

おすすめ記事