모든 유형의 연결에 ssh의 umask를 설정하는 방법


34

모든 연결 유형에서 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

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

  • scp - sftp의 설정에 관계없이 권한은 항상 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 파일에서 변경 사항을 명시 적으로 제공하지 않는 한 변경 사항 은 결과에 영향을 미치지 않았습니다.

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


Unode : "opensh를 수동으로 컴파일해야하는 패치를 피하고 싶습니다." 왜?
desasteralex

5
@desasteralex-(가능한 경우) 소스 기반 패키지와 함께 제공되는 추가 유지 관리 / 관리 작업을 피하고 싶고 Opening 패치 이외의 umask를 변경하는 다른 방법이 없다고 생각하기가 어렵 기 때문에. 특히 이것은 모든 시스템에서 다소 기본적인 보안 측면이라고 생각합니다.
Unode

1
/etc/pam.d/sshd (및 로그인)를 변경하고 ssh를 다시 시작한 후에는 동작이 변경되지 않습니다. 여기에 언급되었지만 언급되지 않은 다른 필요한 변경 사항이 있습니까?
Steve Clay

@mrclay- UsePAM yessshd_config에 있습니까?
Unode

1
사용자의 .bashrc 문제를 해결하려면에있는 umask 명령의 별명을 지정하십시오 /etc/profile. 뭔가 같은alias umask=/bin/true
Tobia

답변:


22

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

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

1
+1, pam_umask가 가장 간단한 솔루션 인 것 같습니다
Flexo

pam_umask가 트릭을 수행합니다. 답변을 반영하고 구체화하기 위해 편집 된 질문
Unode

stackoverflow.com/q/10220531/220060 만 사용하십시오 . 그러나 무언가를 잘못 입력하면 서버에서 자신을 잠 그게됩니다. 현재 세션을 닫기 전에 항상 다시 로그인 할 수 있는지 확인하십시오.
nalply

1
@nalply에 의해 코멘트에 추가 백업 가지고 있는지 확인 루트 , 세션 개방을 깨는 PAM 수단 때문에 당신은 할 수 없습니다 sudo또는 sudo su등.
Zero3

13

다음은 사용자별로 원하는 작업을 수행 할 수있는 솔루션입니다. 기본 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

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


이 방법은 효과가있는 것처럼 보이지만 약간의 유지 관리 악몽처럼 보입니다. pam을 사용할 수없는 경우에도 +1입니다.
Unode

3
나는 그것이 유지하기가 어렵다는 것을 모른다. PAM 기반 솔루션의 주요 이점은 특별한 권한이 필요하지 않다는 것입니다. 관리자의 개입없이 자신의 계정에 대해이를 설정할 수 있습니다.
larsks

나는 선택된 사용자 목록을 유지하는 관점에서 생각했지만 실제로는 일반 사용자 설정에서 작동하는 양상을 보지 못했습니다. 처음 읽을 때 ForceCommand가 "필수"이고 "설정 방법"이 아니라고 생각했습니다. command=실제로 ssh의 깔끔한 기능입니다.
Unode

5

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

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

session    optional     pam_umask.so

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

UMASK           0027

2

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

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


1

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

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


죄송하지만 DerfK이지만 이것이 성공하지 못한 첫 번째 시도 중 하나였습니다. 모든 로그인 쉘은 umask 0027(읽은 경우 /etc/profile) 있지만 ssh를 다시 시작해도 scp 또는 ssh에는 영향을 미치지 않습니다.
Unode

1

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

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


1

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

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

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

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


1

umask는 상위 프로세스에서 상속되므로 /etc/rc.d/rc.sshdsshd를 시작 / 중지 / 다시 시작 하는 데 사용되는 Slackware 시스템에서 umask 0027"sshd_start"또는 "sshd_restart"바로 위에 또는 그 이전의 어느 시점에서나 한 줄로 배치 할 수 있습니다. 주요 실행 섹션은 다음에서 시작됩니다 /etc/rc.d/rc.sshd.

case "$1" in
'start')
  umask 0027
  sshd_start
  ;;
'stop')
  sshd_stop
  ;;
'restart')
  umask 0027
  sshd_restart
  ;;
*)

또는 파일의 맨 위에 다음을 수행하십시오.

#!/bin/sh
# Start/stop/restart the secure shell server:
umask 0027

0

나는 solaris 11에서 larsks sshd_config 옵션에 대한 가능한 개선을 테스트했습니다.

관리 할 사용자로 그룹을 설정하고 스크립트를 구성 파일 자체로 이동하십시오. 필자의 경우 umask를 0002로 설정하고 싶습니다.

결과 구성이됩니다 ....

Match Group managedgroup
ForceCommand /bin/sh -c 'umask 0002; ${SSH_ORIGINAL_COMMAND:-$SHELL}'

0

나는이 문제, 특히 scp 사용하여 파일을 복사 한 후 파일 권한으로 어려움을 겪었고 마침내 ssh를 사용하여 복사 후 권한을 변경하는 것이 마침내 발생했습니다.

해결책은 다음과 같습니다.

  1. 파일을 복사하십시오. localhost$ scp filename remotehost:umask-test/filename
  2. 권한 수정 : localhost$ ssh remotehost "chmod go+r umask-test/filename"

무엇보다도이 솔루션에 영향을 미치는 루트 액세스가 필요하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.