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

답변2

이 문제에 대해 제가 본 한 가지 해결책은 touch문서를 받자마자 문서를 제출하는 것입니다. 이렇게 하면 해당 파일의 액세스 및 수정 타임스탬프가 수정됩니다.

원천:수동 터치

답변3

파일 수가 많지 않은 경우 inotifywait도착하는 새 파일을 모니터링하고 타임스탬프를 수정하는 데 사용할 수 있습니다. (기본 제한은 8192개의 파일 및 디렉터리입니다. 이 제한을 늘릴 수 있지만 너무 많이 늘리는 것은 비용이 많이 들기 때문에 좋은 생각이 아닙니다.) 예를 들어, 기록된 후 닫힌 파일을 찾거나 디렉토리에서 권한 또는 시간 속성에 대한 변경 사항을 반복적으로 찾으려면 다음을 수행하십시오 /dir.

inotifywait -m -r -e close_write -e attrib /dir

지속적으로 실행되며 다음과 같은 결과가 출력됩니다.

/dir/subdir ATTRIB filea
/dir/subdir CLOSE_WRITE,CLOSE filea

파일 변경의 경우 /dir/subdir/filea. 파일 이름을 재구성하기 위한 쉘 스크립트를 작성한 다음 $f(공백이 있는 이름 참고) 이벤트를 사용하여 stat -c %Z $f현재 수정 date +%s시간touch 을 얻을 수 있으므로 타이밍의 작은 차이는 무시해야 합니다.

관련 정보