Linux에서 그룹 권한을 상속하기 위해 새 파일 가져 오기


87

Linux 서버의 권한에 문제가 있습니다. 나는 BSD에 익숙하다. 그룹이 디렉토리를 소유 한 경우 디렉토리를 소유 한 사용자가 www-data와 같은 디렉토리에 있지 않은 경우 디렉토리에서 작성된 파일은 해당 그룹이 소유합니다. 이것은 루트로 실행되지 않는 웹 서버에서 파일을 읽을 수 있기를 원하지만 사용자는 여전히 디렉토리에 새 파일을 넣을 수 있기 때문에 중요합니다. 다른 모든 사용자 웹 사이트를 읽을 수 있기 때문에 사용자를 www-data에 넣을 수 없습니다.

웹 서버가 모든 웹 사이트를 읽을 수 있기를 원하며 사용자가 자신의 웹 사이트를 변경할 수 있기를 바랍니다.

권한은 현재 폴더에서 이와 같이 설정됩니다 ....

drwxr-x--- 3 john www-data 4096 Feb 17 21:27 john

이 방식으로 작업 할 수있는 권한은 BSD에서 표준 동작입니다. Linux에서이를 수행하려면 어떻게해야합니까?


2
ACL을 사용할 수 있습니까?
slm

답변:


128

setgid 비트 기능을 설명하는 것처럼 들립니다 . 디렉토리가 설정되어 있으면 디렉토리 내에 작성된 새 파일이 그룹이 상위 디렉토리에 설정된 것과 동일한 그룹으로 설정됩니다.

$ whoami
saml

$ groups
saml wheel wireshark

권한 + 소유권을 가진 디렉토리를 설정하십시오

$ sudo mkdir --mode=u+rwx,g+rs,g-w,o-rwx somedir
$ sudo chown saml.apache somedir
$ ll -d somedir/
drwxr-s---. 2 saml apache 4096 Feb 17 20:10 somedir/

이 디렉토리에서 파일을 saml로 터치하십시오.

$ whoami
saml

$ touch somedir/afile
$ ll somedir/afile 
-rw-rw-r--. 1 saml apache 0 Feb 17 20:11 somedir/afile

이것은 대략 당신이 원하는 것 같은 것을 줄 것입니다. 정확히 당신이 묘사 한 것을 정말로 원한다면, 그것을 얻기 위해 액세스 제어 목록 기능에 의지해야한다고 생각합니다 (ACL).

ACL

디렉토리 아래에 작성된 파일에 대한 권한을 조금 더 제어 somedir하려면 다음 ACL 규칙을 추가하여 기본 권한을 설정하십시오.

전에

$ ll -d somedir
drwxr-s---. 2 saml apache 4096 Feb 17 20:46 somedir

권한 설정

$ sudo setfacl -Rdm g:apache:rx somedir
$ ll -d somedir/
drwxr-s---+ 2 saml apache 4096 Feb 17 20:46 somedir/

을주의 +말에, 즉,이 디렉토리가 적용된 ACL을 의미합니다.

$ getfacl somedir
# file: somedir
# owner: saml
# group: apache
# flags: -s-
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
default:group:apache:r-x
default:mask::r-x
default:other::---

$ touch somedir/afile
$ ll somedir/afile 
-rw-r-----+ 1 saml apache 0 Feb 17 21:27 somedir/afile
$ 

$ getfacl somedir/afile
# file: somedir/afile
# owner: saml
# group: apache
user::rw-
group::r-x              #effective:r--
group:apache:r-x        #effective:r--
mask::r--
other::---

기본 권한 ( setfacl -Rdm)이 설정된 상태에서 기본적으로 권한이 ( )이되도록합니다 r-x( g:apache:rx). 그러면 새 파일이 r비트 만 활성화됩니다.


그것은 내가 원하는 기능을 제공하는 것 같습니다. 감사합니다.
존 테이트

이것은 비슷한 문제를 해결하는 것으로 보입니다. 그러나 나는 마지막 문장을 이해하지 못한다. x 권한이 활성화되지 않은 이유는 무엇입니까? 기본적으로 활성화하는 방법이 있습니까 ??
yaobin

1
나는 그것이 보안 것은 생각 @yaobin, 당신은 정말 기본적으로 파일을 실행하고 싶지 않아요
cdarken

이 작동하지 unzip않습니까?
datasn.io

@ datasn.io-의 매뉴얼 페이지를보십시오 unzip. 특히 -X스위치입니다.
slm

37

TL : DR; 하기 위해 새로운 파일이 컨테이너 폴더의 그룹을 상속 할 :

$ chmod g+s somefolder

참고 : 허용 된 답변에 암시되어 있으며 이것은 단지 스 니펫입니다.


3
setgid는 파일과 폴더가 올바른 그룹을 가지지 만 파일을 트리로 이동하면 올바른 소유자가 구성되지 않음을 기억하십시오. ACL 접근 방식은 일반적으로 이에 대응합니다.
Chris Morgan

@ChrisMorgan 그것은 어떻게 대처합니까? 허용 된 답변의 솔루션은 필자의 경우 이동 된 파일에 대해 아무것도하지 않았습니다.
Dan M.

@DanM .: 파일 모드에서는 상속되지 않은 권한을 설정합니다. 하지만 ACL을, 당신은 권한이 설정 되어 런타임에 확인하고 (아이들이 오버라이드 자신의 ACL을 지정할 수 있지만) 상속을.
크리스 모건

@ChrisMorgan 예. 어떻게합니까? ACL 양식 허용 답변을 사용한 솔루션이 작동하지 않습니다.
Dan M.

10

slm의 답변을 보완하기 위해 ext2 / 3 / 4 파일 시스템 bsdgroups에서 파티션 의 mount 옵션을 사용하여 설명하는 BSD 동작을 복제 할 수 있습니다 . 로부터 mount(1)매뉴얼 페이지

grpid|bsdgroups and nogrpid|sysvgroups
              These options define what group id a newly  created  file  gets.
              When  grpid  is  set,  it takes the group id of the directory in
              which it is created; otherwise (the default) it takes the  fsgid
              of  the current process, unless the directory has the setgid bit
              set, in which case it takes the gid from the  parent  directory,
              and also gets the setgid bit set if it is a directory itself.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.