디렉토리의 모든 새 파일을 그룹이 액세스 할 수 있도록합니다.


131

두 명의 사용자 Alice와 Bob이 있고 그룹 GROUPNAME과 폴더가 foo있고 두 사용자가 모두 Linux 및 ext3을 사용하는 GROUPNAME의 구성원이라고 가정합니다.

Alice 아래에 파일을 사용자 Alice로 저장 foo하면 권한은 다음과 같습니다 -rw-r--r-- Alice Alice. 그러나 일부 하위 디렉토리에 저장된 모든 파일에 foo권한 -rwxrwx--- Alice GROUPNAME(예 : 소유자 Alice, 그룹 GROUPNAME)이있을 수 있습니까?


답변:


91

umask디렉토리를 setgid 로 설정 하여 그룹 및 그룹을 사용하여 할당 된 권한 비트를 제어 할 수 있습니다 GROUPNAME.

$ umask 002            # allow group write; everyone must do this
$ chgrp GROUPNAME .    # set directory group to GROUPNAME
$ chmod g+s .          # files created in directory will be in group GROUPNAME

모든 서브 디렉토리에 대해 chgrp/ 를 수행해야합니다 chmod. (즉, 아래에있는 A 기존의도 연속적으로 만들어도 디렉토리되어 자동으로 전파되지 않습니다 setgid를 디렉토리가됩니다 setgid로 후자의 그룹에있을 것입니다 있지만 GROUPNAME).

또한 umask이는 프로세스 속성이며 해당 프로세스 및 해당 하위 프로세스에서 작성된 모든 파일에 적용됩니다 (이는 umask해당 fork()시간에 상위의 영향 을 상속 함 ). 사용자는이 설정을해야 할 ~/.profile수도 있고 다른 권한이 필요한 디렉토리와 관련이없는 것을 조심해야합니다. 다른 일을 할 때 다른 설정이 필요한 경우 모듈 이 유용 할 수 있습니다.

POSIX ACL을 사용할 수 있다면 약간 더 잘 제어 할 수 있습니다. 권한 마스크와 그룹을 모두 지정하고 적절하게 전파 할 수 있어야합니다. POSIX ACL에 대한 지원은 다소 가변적입니다.


6
상위 디렉토리에서 setgid를 설정 한 후 작성된 서브 디렉토리는 setgid가 자동으로 설정됩니다.
Arrowmaster

2
@Arrowmaster : 일부 시스템에서는 아마도 전부는 아닙니다. OSX에서 테스트했으며 적어도 루트가 아닌 경우 전파되지 않습니다.
geekosaur

2
데비안에서 (그리고 대부분의 다른 리눅스 배포판을 가정합니다) setgid와 그룹 이름이 모두 전파됩니다.
Arrowmaster

3
OS X에서 디렉토리의 setgid 비트는 무시됩니다. 새 파일과 디렉토리에는 항상 포함 디렉토리 그룹이 제공됩니다.
John Flatness

cp resp. mv를 사용하여 foo로 복사 또는 이동 된 파일이 원하는 권한을 자동으로 얻을 수 -rwxrwx--- A G있습니까 ( )?
학생

106

가능하면 액세스 제어 목록 (ACL)을 사용하십시오 .

Linux에서 사용중인 파일 시스템이 ACL을 지원하는지 확인하십시오 (대부분의 유닉스 파일 시스템이 지원함). ACL을 활성화하기 위해 마운트 옵션을 변경해야 할 수도 있습니다. ext2 / ext3 / ext4에서는 acl마운트 옵션을 명시 적으로 지정 /etc/fstab해야합니다 /dev/sda1 / ext4 errors=remount-ro,acl 0 1. mount -o remount,acl /재부팅하지 않고 ACL을 활성화하기 위해 실행 합니다. 또한 ACL 명령 줄 도구를 설치 getfacl하고 setfacl일반적이라는 패키지로 제공 acl.

일회성 설정이 완료되었으므로 디렉토리의 ACL을 변경하여 그룹에 쓰기 권한을 부여하고 이러한 권한을 새로 작성된 파일에서 상속 받으십시오. 리눅스에서 :

setfacl -d -m group:GROUPNAME:rwx /path/to/directory
setfacl -m group:GROUPNAME:rwx /path/to/directory

ACL이 옵션이 아닌 경우 그룹이 소유 한 디렉토리를 만들고 GROUPNAME권한을 2775 또는 2770 :으로 설정하십시오 chmod g+rwxs /path/to/directory. 은 s여기 setgid를 비트 수단; 디렉토리의 경우이 디렉토리에서 작성된 파일이 디렉토리를 소유 한 그룹에 속한다는 것을 의미합니다.

또한 기본적으로 모든 파일을 그룹 쓰기 가능하도록 Alice와 Bob의 umask 를 설정해야합니다 . 대부분의 시스템에서 기본 umask는 022이며, 이는 그룹 및 기타에 의한 쓰기를 제외한 모든 권한을 파일에 가질 수 있음을 의미합니다. 다른 사람에 의한 쓰기 권한 만 금지한다는 의미로 002로 변경하십시오. 일반적으로 해당 설정을 다음에 넣습니다 ~/.profile.

umask 002    # or 007 to have files not readable by others

6
+1-매우 철저한 답변. 나는 사람이 다시 마운트 / 즉석에서 할 수 있다는 것을 몰랐다. 알아 둘만 한.
boehj

1
해당 디렉토리에 포함 된 파일에는 쓰기 권한을 무효화하는 r-- 마스크가 있으므로 setfacl -d 명령이 작동하지 않습니다. 도움이 필요합니다. unix.stackexchange.com/questions/71743/…
Ben McCann

2
@its_me Q1 : 옵션 mount과 함께 명령을 표시 remount하므로 사용하지 않습니다 fstab. 데 acl두 번하면 파일 시스템이 장착 된 것을 의미 acl이미 옵션, 그리고 무해한. 그건 그렇고 최근 커널에서 ext4 acl 의 기본값 입니다 (패치 가이 답변을 쓸 때 여전히 최신 상태였습니다). 질문 2 : 어느 순서로나 명령을 실행할 수 있습니다.
Gilles

1
@its_me 예, 이해가 정확합니다. 항목을 추가하는 순서가 중요하지 않습니다.
Gilles

8
보다 명확하게하기 위해, GROUPNAME대신에 사용하도록 답변을 개선해야합니다.G
knocte

24

이 질문은 리눅스에 적합하다 acl. OS를 밝히지 않았으므로 Linux를 다음과 같이 가정합니다. 다음은 예제 세션입니다.

정말 좋은 acl튜토리얼을 모르지만 http://www.vanemery.com/Linux/ACL/linux-acl.html 보다 더 나빠질 수 있습니다 .

기본값 acl은 로컬 umask처럼 작동합니다. 적어도 Linux에서는 umask가 전체적으로 적용되므로 이것이 로컬 umask의 효과를 얻는 유일한 방법입니다. 어떤 이유로 이것은 조금 알려진 기능입니다. 그물은 로컬 umask 재정의에 대해 묻는 사람들로 가득 차 있지만 거의 아무도 사용을 생각하지 않는 것 같습니다 acl.

또한 acl지원을 받고있는 파티션을 마운트해야합니다 ( 예 :

/dev/mapper/debian-acl /mnt/acl        ext3    defaults,acl        0       2

세션은 다음과 같습니다.

/mnt/acl$ mkdir foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: faheem
user::rwx
group::r-x
other::r-x

의 그룹으로 설정 foo될 수를 staff, 그룹 및 사용자의 ACL 설정 foo에를 rwx.

/mnt/acl$ chgrp staff foo
/mnt/acl$ setfacl -R -m u::rwx,g::rwx foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x

사용자 및 그룹의 기본 acl도 설정하십시오 rwx. 파일 및 디렉토리가 상속하는 권한을 정의합니다 foo. 따라서 foo 아래에 생성 된 모든 파일과 디렉토리에는 그룹 권한이 rw있습니다.

/mnt/acl$ setfacl -d --set u::rwx,g::rwx,o::- foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::---

이제 foo사용자 faheem및 로 일부 파일을 만듭니다 john.

/mnt/acl$ cd foo
/mnt/acl/foo$ touch bar

# switch to user john for this next command.

/mnt/acl/foo$ touch baz

파일을 나열하십시오. 소유 한 faheem파일과 소유 한 파일은 모두 john그룹 권한으로 생성됩니다 rw.

/mnt/acl/foo$ ls -la
total 3
drwxrwxr-x+ 2 faheem staff  1024 May  9 01:22 .
drwxr-xr-x  4 faheem faheem 1024 May  9 01:20 ..
-rw-rw----  1 faheem faheem    0 May  9 01:20 bar
-rw-rw----  1 john   john      0 May  9 01:22 baz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.