두 명의 사용자 Alice와 Bob이 있고 GROUPNAME 그룹과 폴더가 있다고 가정합니다 foo
. 두 사용자 모두 GROUPNAME의 구성원입니다(Linux 및 ext3 사용).
사용자 Alice 로 파일을 저장하면 foo
권한은 다음과 같습니다 -rw-r--r-- Alice Alice
. 그러나 특정 하위 디렉터리에 저장된 모든 파일에 foo
권한 -rwxrwx--- Alice GROUPNAME
(예: 소유자 Alice, 그룹 GROUPNAME) 이 있도록 구현하는 것이 가능합니까 ?
답변1
가능하다면ACL(액세스 제어 목록).
Linux에서는 사용 중인 파일 시스템이 ACL을 지원하는지 확인하십시오(대부분의 UNIX 파일 시스템은 지원함). ACL을 활성화하려면 마운트 옵션을 변경해야 할 수도 있습니다. ext2/ext3/ext4의 경우2.6.39부터 ACL은 커널에서 기본적으로 활성화됩니다.. 이전 커널에서는 마운트 옵션을 명시적으로 지정해야 할 수 있으므로 재부팅하지 않고 ACL을 활성화하려면 acl
의 항목이 .Run 과 /etc/fstab
같아야 합니다 . 또한 일반적으로 이라는 패키지에 제공되는 ACL 명령줄 도구를 설치합니다 ./dev/sda1 / ext4 errors=remount-ro,acl 0 1
mount -o remount,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는 022입니다. 이는 파일이 그룹별 쓰기 및 기타 권한을 제외한 모든 권한을 가질 수 있음을 의미합니다. 002로 변경하면 다른 권한이 있는 쓰기만 금지됩니다. 일반적으로 이 설정을 다음 항목에 넣습니다 ~/.profile
.
umask 002 # or 007 to have files not readable by others
답변2
디렉토리를 생성하여 할당된 권한 비트 umask
및 그룹을 제어할 수 있습니다.설정도착하다 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
이는 기존 디렉터리에 자동으로 전파되지 않습니다. OS X에서는 이후에 다음 디렉터리 아래에 디렉터리를 만듭니다.설정디렉토리는 다음과 같습니다.설정, 후자는 그룹에 속하지만 GROUPNAME
. 대부분의 Linux 배포판에서는설정비트가 새 하위 디렉터리로 전파됩니다.
또한 이는 umask
프로세스 속성이며 해당 프로세스와 해당 하위 프로세스에서 생성된 모든 파일에 적용됩니다(이러한 파일은 umask
상위 프로세스 fork()
에서 사실상 상속 받습니다). 사용자는 에서 이를 설정해야 할 수 있으며 ~/.profile
, 다른 권한이 필요한 디렉토리와 관련되지 않은 사항에 주의해야 할 수도 있습니다. 기준 치수다른 작업을 수행할 때 다른 설정이 필요한 경우 유용할 수 있습니다.
POSIX ACL을 사용할 수 있다면 권한 마스크와 그룹을 지정하고 이를 현명하게 전파하는 것이 가능해집니다. 그러나 POSIX ACL에 대한 지원은 다소 다릅니다.
답변3
이 질문은 Linux에 매우 적합합니다.acl
. 운영 체제를 지정하지 않았으므로 다음에서는 Linux를 가정하겠습니다. 이것은 샘플 세션입니다.
나는 정말 좋은 튜토리얼을 모르지만 acl
, 당신은 그보다 더 잘할 수 있습니다Van Emery의 "Fedora Core 2(Linux 커널 2.6.5)에서 ACL 사용".
기본값은 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