/var/www/mysite/
내 목표는 기본값을 사용하여 www-data 그룹의 사용자에게만 폴더에 대한 읽기 액세스를 허용하는 것입니다.전방십자인대.
이는 일반 ACL에는 작동하지만 기본 ACL에는 작동하지 않습니다. 왜?
이것이 내가 하는 방법이다:
나는 사용자로 로그인했습니다www-데이터그룹에 누구야?www-데이터. 나는 디렉토리에 있습니다/var/www
.
디렉토리를 만들었습니다나의 웹 사이트그리고 권한을 0으로 해주세요. 그런 다음 그룹의 모든 사람이 사용할 수 있도록 ACL 권한을 추가했습니다.www-데이터디렉터리에 대한 읽기 액세스 권한이 있습니다.나의 웹 사이트/.
$ mkdir mysite
$ chmod 0 mysite
$ setfacl -m g:www-data:r-x mysite
$ ls -la
d---------+ 2 root root 4096 Sep 6 11:16 mysite
$ getfacl mysite/
# file: mysite/
# owner: root
# group: root
user::---
group::---
group:www-data:r-x
mask::r-x
other::---
이때 사용자는www-데이터폴더에 접근할 수 있습니다. 그러나 기본 ACL을 추가하면 액세스가 거부됩니다!
$ setfacl -m d:g:www-data:r-x mysite # <---- NOTE the default acl rule.
$ ls -la
d---------+ 2 root root 4096 Sep 6 11:16 mysite
$ getfacl mysite/
# file: mysite/
# owner: root
# group: root
user::---
group::---
other::---
default:user::---
default:group::---
default:group:www-data:r-x
default:mask::r-x
default:other::---
답변1
기본 ACL은 이 디렉터리에 새로 생성된 파일에 적용되는 ACL입니다. 또한 해당 디렉터리 아래에 생성된 하위 디렉터리에 대한 기본 ACL로 복사되므로 이를 재정의하기 위한 작업을 수행하지 않는 한 반복적으로 적용됩니다.
기본 ACL은 디렉터리 자체나 기본 ACL이 변경될 때 존재하는 모든 파일에 영향을 주지 않습니다.
따라서 귀하의 경우에는 디렉터리에 ACL을 설정하고(디렉터리 자체에 대해) 기본 ACL을 설정해야 합니다(디렉터리에 생성할 파일에 대해).
답변2
액세스 제어 목록의 의미는 복잡합니다. 다음은man -s 5 acl
1. If the effective user ID of the process matches the user ID of the
file object owner, then
if the ACL_USER_OBJ entry contains the requested permissions,
access is granted,
else access is denied.
2. else if the effective user ID of the process matches the qualifier
of any entry of type ACL_USER, then
if the matching ACL_USER entry and the ACL_MASK entry contain
the requested permissions, access is granted,
else access is denied.
3. else if the effective group ID or any of the supplementary group IDs
of the process match the file group or the qualifier of any entry of
type ACL_GROUP, then
if the ACL contains an ACL_MASK entry, then
if the ACL_MASK entry and any of the matching ACL_GROUP_OBJ
or ACL_GROUP entries contain the requested permissions,
access is granted,
else access is denied.
else (note that there can be no ACL_GROUP entries without an
ACL_MASK entry)
if the ACL_GROUP_OBJ entry contains the requested permis‐
sions, access is granted,
else access is denied.
4. else if the ACL_OTHER entry contains the requested permissions,
access is granted.
5. else access is denied.
귀하의 특정 문제에 어떤 규칙이 적용되는지 이해하는 데 어려움을 겪고 있다는 것을 알고 있습니다. 당신이 그것들을 완전히 이해했다면 여기서 질문을 하지 않을 것입니다. 특히, 사용자, 그룹 등이 적용되는지, 기본값이 특정 값보다 우선하는지 여부를 판단하기가 어렵습니다. 다음은 ACL 사용의 예입니다.
$ ls -ld mysite
drwxr-x---+ 2 www-data www-data 4096 Sep 6 08:22 mysite
$ getfacl mysite
# file: mysite
# owner: www-data
# group: www-data
user::rwx
group::r-x
other::---
default:user::rwx
default:group::rwx
default:group:www-data:r-x
default:mask::rwx
default:other::r-x
$ ls -l mysite
total 4
-rw-rw-r--+ 1 www-data www-data 56 Sep 6 08:15 example.html
그룹에서 www-data를 사용하여 실행 중이므로 ACL 매개변수에 문제가 없습니다. 그러나 모드를 변경하면 mysite/
액세스가 비활성화됩니다.
$ sudo chmod 000 mysite
$ ls -ld mysite
d---------+ 2 www-data www-data 4096 Sep 6 08:22 mysite
$ ls mysite
ls: cannot open directory mysite: Permission denied
저는 ACL을 전혀 변경하지 않았습니다.
관련 메모에서 루트는 웹 서비스의 일부가 될 디렉터리를 절대로 소유해서는 안 됩니다. 한 번. 진짜. 이것이 바로 www-data
.
원하는 대로 일이 이루어지도록 하려면 어떻게 해야 합니까? 나는 모른다.