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
ブラックリストオプションを使用します。-P
sshd_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