모든 유형의 연결에 ssh의 umask를 설정하는 방법 sftp의 설정에 관계없이 권한은 항상

모든 연결 유형에서 OpenSSH의 umask0027일관된 방식 으로 설정하는 방법을 찾고 있습니다.

연결 유형에 따라 다음을 참조합니다.

  1. sftp
  2. scp
  3. ssh 호스트 이름
  4. ssh 호스트 이름 프로그램

3과 4의 차이점은 전자가 쉘을 시작하고 일반적으로 /etc/profile정보를 읽지 만 쉘 은 그렇지 않습니다.

또한 이 게시물 을 읽음으로써 최신 버전의 OpenSSH에있는 -u 옵션을 알게되었습니다. 그러나 이것은 작동하지 않습니다.

또한 /etc/profile지금 포함 하는 것을 추가해야합니다 umask 0027.

포인트 별 진행 :

  • sftp- 여기 에 언급 -u 0027sshd_config대로 설정 하는 것만으로 는 충분하지 않습니다.

이 매개 변수를 설정하지 않으면 sftp가 기본적으로 사용합니다 umask 0022. 이것은 내가 두 파일을 가지고 있다면 의미합니다.

-rwxrwxrwx 1 user user 0 2011-01-29 02:04 execute
-rw-rw-rw- 1 user user 0 2011-01-29 02:04 read-write

sftp를 사용하여 대상 컴퓨터에 넣으면 실제로 얻을 수 있습니다.

-rwxr-xr-x 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write

그러나 내가 설정 한 경우 -u 0027sshd_config실제로 얻을 대상 컴퓨터의 :

-rwxr--r-- 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write

실제로 다음과 같아야하므로 예상되지 않습니다.

-rwxr-x--- 1 user user 0 2011-01-29 02:04 execute
-rw-r----- 1 user user 0 2011-01-29 02:04 read-write

왜 이런 일이 발생하는지 이해합니까?

  • scpsftp의 설정에 관계없이 권한은 항상 umask 0022있습니다. 나는 현재 이것을 바꾸는 방법을 모른다.

  • ssh 호스트 이름-쉘은 /etc/profile기본적으로 umask 0027현재 설정에서 읽기 때문에 문제가 없습니다 .

  • ssh 호스트 이름 프로그램 -scp 와 동일한 상황 .


요컨대,에 umask를 설정 sftp변경합니다 결과를하지만 예상대로하지, ssh hostname예상 읽기로 작동 /etc/profile하고 모두 scpssh hostname program것 같다 umask 0022곳을 하드 코딩.

위의 사항에 대한 통찰력을 환영합니다.

편집 : openssh를 수동으로 컴파일 해야하는 패치를 피하고 싶습니다. 시스템 openssh에서 maverick의 패키지 와 함께 Ubuntu Server 10.04.01 (lucid) LTS를 실행 중 입니다.

답 : poige로 표시된 것처럼 pam_umask를 사용하여 트릭을 수행했습니다.

정확한 변경 사항은 다음과 같습니다.

라인 추가 /etc/pam.d/sshd:

# Setting UMASK for all ssh based connections (ssh, sftp, scp)
session    optional     pam_umask.so umask=0027

또한 모든 로그인 쉘이 소스 /etc/profile인지 여부에 관계없이 모든 로그인 쉘에 영향을주기 위해 동일한 행이에 추가되었습니다 /etc/pam.d/login.

편집 : 의견 중 일부 후에이 문제를 다시 테스트했습니다.

적어도 우분투 (내가 테스트 한 곳)에서 사용자가 쉘의 init 파일 (.bashrc, .zshrc, …)에 다른 umask 세트를 설정하면 PAM umask가 무시되고 대신 사용자 정의 umask가 사용되는 것으로 보입니다. /etc/profile사용자가 init 파일에서 변경 사항을 명시 적으로 제공하지 않는 한 변경 사항 은 결과에 영향을 미치지 않았습니다.

이 동작이 모든 배포판에서 발생하는지 확실하지 않습니다.



답변

나는 두 가지를 시도해 볼 수 있습니다.

  1. pam_umask
  2. LD_PRELOAD 랩퍼 (자체 작성?)

답변

다음은 사용자별로 원하는 작업을 수행 할 수있는 솔루션입니다. 기본 sshd기능 만 사용 하며 로컬에서 유지 관리되는 패치를 사용하지 않아도됩니다. 이 솔루션은 ForceCommandsshd 의 동작을 활용 하여 모든 ssh 연결에 환경 설정 스크립트를 삽입 한 다음 원래 명령을 실행합니다.

먼저, 시스템의 어딘가에 다음 내용으로 스크립트를 작성하십시오.

#!/bin/sh

umask 0027
exec /bin/sh -c "${SSH_ORIGINAL_COMMAND:-$SHELL}"

이 예제의 목적을 위해 이것을 호출했다고 가정합니다 /usr/bin/umask-wrapper.

이제 몇 가지 옵션을 설정할 수 있습니다. 이것이 모든 사용자에 대해 필수 구성이되도록하려면 (아마도 보이지는 않지만) 다음을 포함하도록 sshd 구성을 수정할 수 있습니다.

ForceCommand /usr/bin/umask-wrapper

이 기능을 일부 사용자 에게만 적용하려면 Match블록을 사용할 수 있습니다 sshd_config.

Match User user1,user2
ForceCommand /usr/bin/umask-wrapper

이를 사용자가 제어 할 수있는 동작으로하려면 파일 의 command=옵션을 사용하여 authorized_key특정 키에 대해이 동작을 선택할 수 있습니다 . 예를 들어, 이것을 테스트하는 동안 authorized_keys파일에 다음과 같은 항목을 추가했습니다 .

command="/home/lars/bin/umask-wrapper" ssh-rsa AAAAB3NzaC1 ... umask-test

그리고 내 테스트 결과는 다음과 같습니다.

ssh명령없이 사용 :

localhost$ ssh remotehost
remotehost$ touch umask-test/file1
remotehost$ ls -l umask-test/file1
-rw-r-----. 1 lars lars 0 Feb  2 06:02 file1

ssh명령과 함께 사용 :

localhost$ ssh remotehost touch umask-test/file2
localhost$ ssh remotehost ls -l umask-test/file2
-rw-r-----. 1 lars lars 0 Feb  2 06:03 file2

사용 scp:

localhost$ touch file3
localhost$ ls -l file3
-rw-r--r--  1 lars  staff  0 Feb  2 06:03 file3
localhost$ scp file3 remotehost:umask-test/file3
localhost$ ssh remotehost ls -l umask-test/file3
-rw-r-----. 1 lars lars 0 Feb  2 06:03 file3

사용 sftp:

localhost$ sftp remotehost
sftp> put file3 umask-test/file4
sftp> ls -l umask-test/file4
-rw-r-----    0 500      500             0 Feb  2 06:05 umask-test/file4

그리고 거기 있습니다. 나는 이것이 당신이 찾고있는 행동이라고 생각합니다. 이 솔루션에 대해 궁금한 점이 있으면 추가 세부 정보를 제공해 드리겠습니다.


답변

설정을 중앙 집중화하기 위해 약간 다른 접근 방식을 취했습니다.

이것은 다음에 추가되었습니다 /etc/pam.d/common-session.

session    optional     pam_umask.so

이것은 다음에서 수정되었습니다 /etc/login.defs.

UMASK           0027

답변

ssh와 함께 작동하도록 pam_umask를 얻었지만 scp 또는 sftp에서는 작동하지 않습니다.

랩퍼 메소드는 sftp 또는 scp에 대해서는 아무 것도 수행하지 않습니다. 대부분의 배포판에 이미 umask가 설정되어 있기 때문에 027이 좋은 예인지 확실하지 않습니다. 002로 시도하고 작동하는지 확인하십시오.


답변

고유 한 umask를 설정하지 않은 프로그램은이를 시작한 응용 프로그램의 umask를 상속합니다. sshd를 완전히 중지하고 umask를 0027로 설정 한 다음 다시 시작하십시오. (나중에 다시 부팅하기 위해 init 스크립트에 umask 명령을 추가 할 수 있습니다.)

scp와 함께 작동하도록 테스트되었습니다.


답변

경우 pam_umask귀하의 SFTP 세션에 영향을 미칠 것 같지 않는 경우, 확인 UsePam으로 설정되어 Yes/etc/ssh/sshd_config파일.

당신이 사용할 암호 인증을 가지고있는 경우 UsePam설정하거나 디폴트로했다 No. 그렇지 않으면 해당 시스템을 통해 실수로 비밀번호 인증을 사용할 수 있기 때문에 파일 ChallengeResponseAuthentication No에서 설정할 수 있습니다 sshd_config.


답변

위의 user188737 님의 답변에 추가 된 메모 :

말할 필요도 없지만 openssh-server 패키지를 사용 하지 않고 OpenSSH를 수동으로 컴파일 한 경우 --with-pam구성 플래그 를 전달하여 “PAM 지원 활성화”를 확인하십시오 .

그렇지 않으면 UsePAM=yessshd_config에서에 대한 모든 변경 사항이에 /etc/pam.d/*의해 효과적으로 무시됩니다 sshd.

마침내 권장 PAM 솔루션 중 비대화 형 SFTP 연결을 통한 테스트에 영향을 미치지 않는 이유는 무엇입니까?