나는이 질문이 이미 논의되었다는 것을 알고 있지만, 게시물을 읽음으로써 일부 답변은 “예 umask는 작동 할 수있다”고 말하고 다른 사람들은 “OpenSSH put 명령은 항상 권한을 유지한다”고 대답합니다.
무엇보다도 정확하게 :
- RHEL 6.2에서 OpenSSH 5.9를 사용합니다.
 - umask 
internal-sftp와 함께 서브 시스템을 사용하여 chroot 된 SFTP 서버를 구성했습니다.-u 0002 - 나는 
-p또는-P옵션을 사용하지 않는 것이 정확합니다. 
한 손으로 읽은 내용에서 SFTP 전송을 위해 umask를 정의하는 방법에는 여러 가지가 있습니다.
- 옵션 
-u의internal-sftp(또는sftp-serverOpenSSH를 5.4 이후) - 래퍼를 만듭니다 
sftp-server(명시 적으로 umask를 설정합니다-이것은 chroot 환경에 적합하지 않습니다). pam.d/sshd파일에 특정 구성을 추가
반면에 나는 읽었습니다.
OpenSSH SFTP 클라이언트 및 서버는 권한을 확장명으로 전송하고 로컬 측의 권한으로 원격 파일을 작성합니다. AFAICT에서는이 동작을 비활성화 할 수 없습니다.
그래서 다음 테스트를 수행했습니다.
내 클라이언트 에서 권한 600 및 700으로 파일 MYFILE과 디렉토리 MYDIR를 만들었습니다 .
그런 다음 sftp명령 을 사용하십시오.
mkdir => the new directory has permissions following the umask (OK)
put MYFILE => MYFILE has same permissions as on client (KO)
put -r MYDIR => MYDIR has same permissions as on client (KO)
클라이언트 측 MYFILE과 MYDIR클라이언트 측의 권한을 변경 하고 다시 업로드하면 서버 측에서 새로운 권한을 얻습니다.
나는 pam.d해결책도 시도했지만 아무것도 바뀌지 않았다.
그래서 지금 혼란스러워합니다.
테스트 한 내용과 읽은 내용 중 일부에서 OpenSSH는 항상 권한을 유지한다고 말합니다. 그러나 umask가 정의 될 수 있다고 말하는 많은 게시물이 있으므로 테스트 구성에서 잘못된 일을한다고 상상할 수 있습니다.
경험이 풍부한 의견을 보내 주셔서 감사합니다.
감사합니다.
답변
첫째, umask는 클라이언트가 아닌 서버에 관한 것입니다. 따라서 putOpenSSH 클라이언트의 명령이 umask를 사용 하는지 묻는 것이 잘못되었습니다. SFTP 업로드 결과 파일을 작성할 때 OpenSSH 서버가 umask를 사용하는지 묻어 야합니다.
어쨌든 OpenSSH SFTP 클라이언트의 기능 :
- 
put-P플래그가 없으면 서버는 로컬 파일과 동일한 권한을 가진 파일을 작성하도록 요청합니다. OpenSSH 서버는 (* nix 규칙에 의해 암시 적으로) umask를 적용합니다. - 
put과-P플래그, 같은를 시작하지만 업로드를 완료 한 후, 클라이언트가 명시 적으로 (재)에 서버를 묻는 로컬 파일이 있습니다 ( “chmod를”요청) 같은에 권한을 설정합니다. “chmod”의 경우 umask가 적용되지 않습니다. - 
mkdir서버는 권한 0777을 가진 디렉토리를 작성하도록 요청합니다. umask는 내재적으로 적용됩니다. 
어쨌든 umask 0002는 상호 배타적이므로 권한이 0600 인 파일에는 영향을 미치지 않습니다. 0644와 같은 권한이있는 파일에 대해 umask를 시도해야합니다.
따라서 설명에 따라 시스템을 구성한 경우 실제로 작동합니다. 내 상자에서 증거를 참조하십시오 (OpenSSH 6.2p2가 설치된 Ubuntu)
Match user user2
  ChrootDirectory /home/user2/chroot
  ForceCommand internal-sftp -u 0077
  AllowTcpForwarding no
  PermitTunnel no
  X11Forwarding no
후 권한의 차이보기 put대를 put -P:
user1:~$ touch file.txt
user1:~$ ls -l
total 0
-rw-r--r-- 1 user1 ftpuser    0 Oct 23 15:34 file.txt
user1:~$ sftp user2@localhost
user2@localhost's password:
Connected to localhost.
sftp> cd somefolder
sftp> put file.txt
Uploading file.txt to /somefolder/file.txt
file.txt                                         100%     0    0.0KB/s    0:00
sftp> ls -l
-rw-------    1 1003 1001    0 Oct 23 15:35 file.txt
sftp> put -P file.txt
Uploading file.txt to /somefolder/file.txt
file.txt                                         100%     0    0.0KB/s    0:00
sftp> ls -l
-rw-r--r--    1 1003 1001    0 Oct 23 15:34 file.txt
Btw, 최신 SFTP 사양 은 umask와 관련된 클라이언트 및 서버의 동작을 정의합니다. 보시다시피 OpenSSH는 실제로 umask에 대한 언급이없는 SFTP 버전 3을 구현하지만 실제로 위반합니다.
7.6. 권한
…
서버는 모드 비트에 ‘umask’를 적용해서는 안된다. 클라이언트가 지정한 모드 비트를 설정해야합니다. 클라이언트는 전송하기 전에 모드 비트에 적절한 ‘umask’를 적용해야합니다.