내 Linux 서버에 권한 문제가 있습니다. 나는 BSD에 익숙하다. 디렉터리를 그룹이 소유하고 디렉터리를 소유한 사용자가 www-data에 없으면 디렉터리에 생성된 파일은 해당 그룹의 소유가 됩니다. 웹 서버가 파일을 읽을 수 있기를 원하지만(루트로 실행되지는 않음) 사용자는 여전히 새 파일을 디렉토리에 넣을 수 있기 때문에 이는 중요합니다. 사용자를 www-data에 넣을 수는 없습니다. 왜냐하면 다른 사용자의 웹사이트를 읽을 수 있기 때문입니다.
나는 웹 서버가 모든 웹사이트를 읽을 수 있기를 원하고, 사용자가 자신의 웹사이트를 변경할 수 있기를 원합니다.
현재 폴더 권한 설정은 다음과 같습니다...
drwxr-x--- 3 john www-data 4096 Feb 17 21:27 john
이러한 방식으로 권한이 작동하는 것은 BSD의 표준 동작입니다. Linux에서 이 작업을 수행하려면 어떻게 해야 합니까?
답변1
설명하고 있는 것 같네요GID 비트 설정디렉토리에 이 기능 세트가 있으면 그 안에 생성된 모든 새 파일은 해당 그룹이 상위 디렉토리에 설정된 그룹과 동일한 그룹으로 설정되도록 강제됩니다.
예
$ 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
비트만 활성화됩니다.
답변2
TL: 의사;새로운컨테이너 폴더의 그룹을 상속하는 파일은 다음을 수행합니다.
$ chmod g+s somefolder
참고: 이는 허용되는 답변에 암시되어 있으며 이는 단지 스니펫일 뿐입니다.
답변3
bsdgroups
slm의 답변을 보완하기 위해 ext2/3/4 파일 시스템에서는 파티션의 마운트 옵션을 사용하여 설명하는 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.