umask / PAM / permissions를 완전히 제어하는 ​​방법은 무엇입니까?


11

// 2 월 8 일에 업데이트-뛰어난 문제 요약 :

  • 디렉토리를 파일과 다르게 umask하는 방법은 무엇입니까?
  • 노틸러스 복사 / 붙여 넣기에 대한 마스크 방법?
  • SSHFS에 umask를 설정하는 방법?

우리의 상황

회사의 여러 사람들이 서버에 로그인하여 파일을 업로드합니다. 모두 동일한 파일을 업로드하고 덮어 쓸 수 있어야합니다. 사용자 이름이 다르지만 모두 같은 그룹에 속합니다. 그러나 이것은 인터넷 서버이므로 "다른"사용자에게는 일반적으로 읽기 전용 액세스 권한 만 있어야합니다. 그래서 내가 갖고 싶은 것은 다음 표준 권한입니다.

파일 : 664
디렉토리 : 771

내 목표는 모든 사용자가 권한에 대해 걱정할 필요가 없다는 것입니다. 서버는 이러한 권한이 모든 파일 및 디렉토리, 새로 작성, 복사 또는 덮어 쓰기에 적용되도록 구성해야합니다. 특별한 권한이 필요한 경우에만 수동으로 변경하십시오.

우리는 sshfs를 사용하여 서버를 마운트하고 마치 로컬 폴더 인 것처럼 노틸러스에서 서버에 액세스하고 명령 줄에서 SCP-ing하여 파일을 서버에 업로드합니다. 그것은 기본적으로 우리의 상황과 우리의 목표를 다룹니다.

이제 아름다운 umask 기능에 대해 많은 것을 읽었습니다. 내가 이해하는 것에서 umask (PAM과 함께) 사용하면 원하는 것을 정확하게 수행 있어야합니다 . 새 파일과 디렉토리에 대한 표준 권한을 설정하십시오. 그러나 많은 시간 동안 독서와 시행 착오 후에도 여전히 작동하지 않습니다. 예기치 않은 결과가 많이 발생합니다. 나는 umask를 확실하게 이해하고 많은 질문에 대답하지 않았습니다. 나는이 질문들을 찾은 결과들과 나의 질문들에 대한 설명과 함께 아래 질문들을 게시 할 것이다. 많은 일들이 잘못되는 것 같아서, 나는 여러 가지 일을 잘못하고 있다고 생각합니다. 따라서 많은 질문이 있습니다.

참고 : Ubuntu 9.10을 사용하고 있으므로 SFTP 서버의 umask를 설정하기 위해 sshd_config변경할 수 없습니다 . SSH OpenSSH_5.1p1 Debian-6ubuntu2 <필수 OpenSSH 5.4p1을 설치했습니다. 여기 질문이 있습니다.

1. PAM 변경을 적용하려면 다시 시작해야합니까?

이것부터 시작하겠습니다. 너무 많은 파일이 포함되어 있었고 PAM 변경 사항을 적용하기 위해 전체 시스템을 다시 시작해야하는지 여부를 알지 못했기 때문에 무엇이 영향을 미치며 영향을 미치지 않는지 알 수 없었습니다. 예상 결과를 보지 못했지만 그렇게해야합니까? 아니면 서버에서 로그 아웃했다가 다시 로그인 할 수 있습니까? 새로운 PAM 정책이 효과적이어야합니까? 아니면 다시로드 할 'PAM'프로그램이 있습니까?

2. 모든 세션에 대해 모든 사용자에게 영향을 미치는 단일 파일이 있습니까?

그래서 많은 것을 읽었을 때 많은 파일을 바 꾸었습니다. 다음 파일에서 umask를 설정했습니다.

~/.profile -> umask=0002
~/.bashrc -> umask=0002
/etc/profile -> umask=0002
/etc/pam.d/common-session -> umask=0002
/etc/pam.d/sshd -> umask=0002
/etc/pam.d/login -> umask=0002

이 변경 사항이 모든 사용자에게 적용되기를 원하므로 시스템 전체의 변경이 가장 좋습니다. 달성 할 수 있습니까?

3.이 UMASK가 모두 작동하면 작동합니까?

따라서 가능한 모든 장소에서 umask를 0002로 변경 한 후 테스트를 실행합니다.

------------ SCP -----------

테스트 1 :

scp testfile (which has 777 permissions for testing purposes) server:/home/
testfile                                      100%    4     0.0KB/s   00:00   

권한을 확인하자 :

user@server:/home$ ls -l
total 4
-rwx--x--x 1 user uploaders 4 2011-02-05 17:59 testfile (711)

업데이트 : pam.d / common-sessions에서만 umask를 설정하여 수정되었습니다 (주석 참조)

--------- SSH ------------

테스트 2 :

ssh server
user@server:/home$ touch anotherfile
user@server:/home$ ls -l
total 4
-rw-rw-r-- 1 user uploaders 0 2011-02-05 18:03 anotherfile (664)

-------- SFTP -----------

노틸러스 : sftp : // server / home /

클라이언트에서 서버로 새 파일 복사 및 붙여 넣기 (클라이언트의 777)

테스트 3 :

user@server:/home$ ls -l
total 4
-rwxrwxrwx 1 user uploaders 3 2011-02-05 18:05 newfile (777)

노틸러스를 통해 새 파일을 만듭니다. 터미널에서 파일 권한을 확인하십시오.

테스트 4 :

user@server:/home$ ls -l
total 4
-rw------- 1 user uploaders    0 2011-02-05 18:06 newfile (600)

내말은 ... 무슨 일이야? 우리는 해야 644 매번 얻을. 대신 711, 777, 600을 얻은 다음 644를 얻습니다. 그리고 644는 SSH를 통해 빈 파일을 새로 만들 때만 가능합니다. 이는 가장 가능성이 낮은 시나리오입니다.

그래서 umask / pam이 결국 작동합니까?

업데이트 : pam.d / common-sessions에서만 umask를 설정하여 테스트 4를 수정했습니다 (주석 참조)

4. UMASK SSHFS는 무엇을 의미합니까?

때때로 sshfs를 사용하여 서버를 로컬로 마운트합니다. 매우 유용한. 그러나 다시 한 번 권한 문제가 있습니다.

다음은 마운트 방법입니다.

sshfs -o idmap=user -o umask=0113 user@server:/home/ /mnt

참고 : 우리는 sshfs가 666 대신 777에서 시작하기 때문에 umask = 113을 사용하므로 113으로 원하는 파일 권한 인 664를 얻습니다.

그러나 이제는 모든 파일과 디렉토리가 664 인 것처럼 보입니다 . Nautilus에서 / mnt를 찾아 다음과 같이합니다.

  • 마우스 오른쪽 버튼으로 클릭-> 새 파일 (newfile) --- 테스트 5
  • 마우스 오른쪽 버튼으로 클릭-> 새 폴더 (새 폴더) --- 테스트 6
  • 로컬 클라이언트에서 777 파일을 복사하여 붙여 넣기 --- 테스트 7

명령 행을 확인하자 :

user@client:/mnt$ ls -l
total 8
-rw-rw-r-- 1 user 1007    3 Feb  5 18:05 copyfile (664)
-rw-rw-r-- 1 user 1007    0 Feb  5 18:15 newfile (664)
drw-rw-r-- 1 user 1007 4096 Feb  5 18:15 newfolder (664)

그러나 서버 측에서 동일한 폴더를 확인하십시오.

user@server:/home$ ls -l
total 8
-rwxrwxrwx 1 user uploaders    3 2011-02-05 18:05 copyfile (777)
-rw------- 1 user uploaders    0 2011-02-05 18:15 newfile (600)
drwx--x--x 2 user uploaders 4096 2011-02-05 18:15 newfolder (711)

뭐?! REAL 파일 권한은 우리가 노틸러스에서 보는 것과 매우 다릅니다. sshfs 에서이 umask는 단지 비 실제 파일 권한을 보여주는 '필터'를 생성합니까? 그리고 다른 사용자에게서 파일을 열려고했지만 실제 600 권한은 있지만 644 '가짜'권한을 가진 동일한 그룹에서 파일을 열려고했지만 여전히 읽을 수 없었습니다.

5. UMASK는 파일에 관한 것입니다. 그러나 디렉토리는 어떻습니까?

내 테스트에서 적용중인 umask도 디렉토리 권한에 영향을 미친다는 것을 알 수 있습니다. 그러나 내 파일은 664 (002)이고 디렉토리는 771 (006)이되고 싶습니다. 디렉토리에 대해 다른 umask를 가질 수 있습니까?

6. PERHAPS UMASK / PAM은 정말 멋지지만 우분투는 버기입니까?

한편으로, 나는 PAM / UMASK와 우분투에서 성공한 사람들의 주제를 읽었습니다. 반면에 우분투에서 umask / PAM / fuse에 관한 많은 오래된 버그가 발견되었습니다.

그래서 나는 더 이상 무엇을 믿어야할지 모르겠습니다. 그냥 포기해야합니까? 겠습니까 ACL은 내 모든 문제를 해결? 아니면 우분투 사용에 다시 문제가 있습니까?

tar를 사용하는 백업에주의해야 할 단어입니다. Red Hat / Centos 배포판은 tar 프로그램에서 acls를 지원하지만 Ubuntu는 백업시 acls를 지원하지 않습니다. 즉, 백업을 만들 때 모든 acl이 손실됩니다.

문제가 해결되면 Ubuntu 10.04로 업그레이드하고 싶지만 먼저 무슨 일이 일어나고 있는지 이해하고 싶습니다.

답변:


3

많은 일들이 여기서 일어날 수 있습니다.

첫 생각 :

  • 예, pam.d 변경 사항은 즉시 적용됩니다
  • /etc/pam.d/common-session 기본값을 설정하기 가장 좋은 곳입니다 umask
  • 어떤 pam.d의 umask를 어떤 항목에 의해 재정의 얻을 것입니다 .bashrc,
    하지만 .bashrc특정 상황 (대화 형, 비 로그인 쉘)에서 읽을됩니다
  • testfile (711) 매우 이상하다
    • 어떻게 /home마운트되며 ACL을 사용하고 있습니까?
      (예 : 무엇을 ls -ld /home하고 getfacl /home인쇄합니까?)
    • testfile이미 사본을했다 전에하기 때문에, 존재 scp이미 존재하는 파일에 대한 권한을 변경하지 않습니다 (당신이 사용하지 않는 -p플래그)
  • 노틸러스는 파일을 다른 방식으로 만드는 것으로 알려져 있으며, 이유 또는 규칙이 무엇인지 잘 모르겠습니다.
  • umask=0113 아마 문제를 일으킬 것입니다
  • 서버와 클라이언트가 동일한 운영 체제를 실행하고 있습니까?
    예를 들어 클라이언트에 ACL이 활성화되어 있거나 Cygwin 인 경우 동작이 다를 수 있습니다
  • 올바른 권한을 강제로 설정하는 가장 좋은 방법은 기본 ACL을 사용하는 것입니다. 정확하게 검색 한대로 및 umask의 사용자가이를 무시할 수 있기 때문 입니다..bashrc.bash_profile

최신 정보:

  • umask=0113 sshfs가 잘못되었습니다.
    1. 지정하지 않고 장착을 시도하십시오 umask
    2. 를 사용하여 마운트 지점 내에 새 파일을 작성하십시오 touch.
    3. 당신은 비트 -rw-r--r--없이 예를 들어 얻는 것을보아야합니다.x
    4. x비트 를 마스킹하면 디렉토리가 손상
      되고 컴파일러가 실행 파일을 제대로 작성하지 못할 수 있습니다.

해결 방법 :

더 나은 것을 생각할 수 없다면 새 파일을 사용 fam하거나 gamin보고 새 파일에 대한 권한을 수정하거나 주기적으로 실행되고 모든 파일에 대한 권한을 설정하는 스크립트 일 수도 있습니다.


감사! pam.d / common-sessions를 제외한 모든 umask 설정을 제거 했습니다. 이것은 몇 가지 문제를 해결했습니다! 테스트 1 (SCP) 및 테스트 4 (노틸러스의 새 파일)가 이제 제대로 작동합니다. 허들은 이제 노틸러스의 모든 권한을 가진 파일을 서버에 복사하고 있습니다 (테스트 3-664 대신 777). 그리고 디렉토리 문제. 서버와 클라이언트는 모두 Ubuntu (9.10 vs 10.10)이며 추가 ACL을 사용할 수 없습니다.

노틸러스로 복사하는 것 같 cp -p거나 똑같은 권한을 유지하는 scp -p것 같습니다.
미켈

이것을 바꾸는 방법에 대한 아이디어가 있습니까 ??

어떤 행동을 원하십니까? 기본 ACL을 사용하여 새 파일에 대한 기본 권한을 설정할 수 있습니다. 노틸러스는 기본 ACL을 준수합니다. 개요는 vanemery.com/Linux/ACL/linux-acl.html 및 모든 세부 사항 은 suse.de/~agruen/acl/linux-acls/online 을 참조 하십시오.
Mikel

기본 ACL은 최대 권한 세트를 시행하지 않으며 해당 권한을 기본값으로 설정합니다. cp -p,, scp -p및 노틸러스를 통한 복사는 여전히 복사 권한을 복사중인 파일과 동일하게 만들려고 시도합니다.
Mikel

0

이것은 PAM / umask와 관련이 없지만 유용 할 수 있습니다.

당신이 경우 setgid로 디렉토리를 모든 파일과 그 안에 생성 된 디렉토리는 자동으로 그룹에 할당됩니다.

root@ricarda ~ # mkdir hello      
root@ricarda ~ # chown :users hello 
root@ricarda ~ # chmod g+s hello
root@ricarda ~ # ls -l |grep hello 
drwxr-sr-x. 2 root users  4096 Feb  7 04:05 hello
root@ricarda ~ # touch hello/some_file
root@ricarda ~ # mkdir hello/some_dir
root@ricarda ~ # ls -l hello/       
total 4
drwxr-sr-x. 2 root users 4096 Feb  7 04:16 some_dir
-rw-r--r--. 1 root users    0 Feb  7 04:06 some_file

감사! 나는 이것에 대해 몰랐다. 권한 문제를 해결하지는 않지만 실제로 유용합니다!


0

ACL이 잘 작동합니다.

그룹의 모든 폴더에 기본 ACL을 설정하면 이후의 모든 파일과 디렉토리에 상속됩니다.

같은 setfacl -m d:g:uploaders:rwx것이 작동해야합니다.

기존 권한을 수정하려면

find /shared/folder -type d -exec setfacl -m d:g:uploaders:rwx {} \;
find /shared/folder -type f -exec setfacl -m g:uploaders:rw {} \;

파일을 복사 할 때 "preserve"가 설정되어 있으면 기본 ACL이 작동하지 않는 것 같습니다. 이 경우 cron에서 find 명령을 실행하거나 파일 시스템에서 변경 사항을 모니터링하는 것만 제안 할 수 있습니다.

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