2009-10-26 1 views

답변

2

체크인 후 업로드를주의 :이 원자하지 않고 경쟁 조건 (또는 TOCTOU 취약점)가 발생할 수 있습니다.

더 나은 방법은 업로드 된 파일에 쓰기 권한이 없도록 (예 : UNIX 계열 시스템에서 400 또는 444 또는 유사한 방식으로) 파일 권한을 설정하는 것일 수 있습니다. 그러면 이후의 동일한 파일 이름으로의 업로드가 실패하게됩니다. (약간의 해석이있을 수 있습니다 (예 : 업로드 디렉토리 권한이 변경 되었습니까?).이 방법의 단점 중 하나입니다.

원격 파일에 대한 사용 권한을 어떻게 설정합니까? 가장 간단한 방법은 로컬 파일에 설정 한 다음 업로드 할 때 파일을 보존하는 것입니다. Ruby의 Net :: SCP README은 실제로 "전송을 가로 질러 파일 속성을 보존"할 수 있다고 말합니다.

9

scp에서는이 작업을 수행 할 수 없습니다. 당신이 sftp. 함께 할 수 그러나 그것은 다음과 같이 보일 것입니다 :

require 'net/sftp' 

remote_path = "/path/to/remote/file" 
Net::SFTP.start('host', 'username', :password => 'password') do |sftp| 
    sftp.stat!(remote_path) do |response| 
    unless response.ok? 
    sftp.upload!("/path/to/local/file", remote_path) 
    end 
end 
+0

'sftp.stat! (...)'줄은'remote_path'가 존재하지 않으면 예외를 발생시킵니다. 'sftp.stat (...)'이라고 써야합니다. – Karl

관련 문제