OpenSSH SFTP 서버는 put 명령 (chrooted environment) 후에 umask를 사용하거나 클라이언트 측 권한을 유지합니까?


13

나는이 질문이 이미 논의되었다는 것을 알고 있지만, 게시물을 읽음으로써 일부 답변은 "예 umask는 작동 할 수있다"고 말하고 다른 사람들은 "OpenSSH put 명령은 항상 권한을 유지한다"고 대답합니다.

무엇보다도 정확하게 :

  • RHEL 6.2에서 OpenSSH 5.9를 사용합니다.
  • umask internal-sftp와 함께 서브 시스템을 사용하여 chroot 된 SFTP 서버를 구성했습니다.-u 0002
  • 나는 -p또는 -P옵션을 사용하지 않는 것이 정확합니다.

한 손으로 읽은 내용에서 SFTP 전송을 위해 umask를 정의하는 방법에는 여러 가지가 있습니다.

  • 옵션 -uinternal-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)

클라이언트 측 MYFILEMYDIR클라이언트 측의 권한을 변경 하고 다시 업로드하면 서버 측에서 새로운 권한을 얻습니다.

나는 pam.d해결책도 시도했지만 아무것도 바뀌지 않았다.

그래서 지금 혼란스러워합니다.

테스트 한 내용과 읽은 내용 중 일부에서 OpenSSH는 항상 권한을 유지한다고 말합니다. 그러나 umask가 정의 될 수 있다고 말하는 많은 게시물이 있으므로 테스트 구성에서 잘못된 일을한다고 상상할 수 있습니다.

경험이 풍부한 의견을 보내 주셔서 감사합니다.

감사합니다.

답변:


12

첫째, 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'를 적용해야합니다.


나는 클라이언트 측의 디렉토리에 대해 755를 가지고 처음에 많은 다른 권한으로 시도했지만 대신 775를 얻고 싶었습니다. 그러나 작동하지 않았습니다. (무엇이든지 권한) 나는 설명서를 읽어 -P 당신과 함께 동의하지만, 심지어 플래그없이 항상 서버에서 클라이언트에 비해 동일한 권한을 얻을
drkzs

의견 주셔서 감사합니다, 나는 제목을 개선하고 일부 용어를 수정하려고
drkzs

실제로 작동해야합니다. 내 업데이트를 참조하십시오.
Martin Prikryl

예, 귀하의 예는 효과가 있지만 umask를 0002로 변경하면 더 이상 작동하지 않습니다. 어쩌면이 게시물 이 같은 문제를 발생시키고 있습니까? 내가 openssh5.9에 있고 umask 옵션이 작동한다는 사실을 제외하고. SSHD 구성과 내 차이점은 ForceCommand를 사용하지 않는다는 것이므로 하위 시스템 줄에 umask를 지정합니다. (구성 및 결과를 게시하려고 시도하지만 네트워크 테스트에 쉽게 도달 할 수 없음)
drkzs

1
그 시점에서 명확히하기 위해 : 클라이언트가 권한 정보를 보낼The server SHOULD NOT apply a 'umask' 때만 적용 됩니다 . 클라이언트가 권한 정보를 보내지 않으면 umask를 적용하는 것입니다!
heiglandreas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.