Ubuntu 20.04 LTS를 실행하고 Nginx 1.18.0 및 PHP-FPM을 실행하여 웹 사이트를 제공합니다.
/var/www
FPM 사용자가 소유하고 foo
사이트를 호스팅할 문서 루트로 새 폴더를 만듭니다 .
$ sudo mkdir foo
$ sudo chown -R foo:foo
$ sudo chmod -R u=rwX,g=rX,o= foo
$ sudo chmod -R g+s foo
$ ls -la
drwxr-s--- ... foo foo ... foo
그룹 에 Nginx를 추가했는데 foo
쓰기가 불가능하길 바라기 때문에 그룹 권한을 rX
위와 같이 설정했습니다.
기본 ACL을 설정했습니다.기본적으로 모든 새 파일에 동일한 권한을 부여하고 싶습니다.
$ sudo setfacl -Rm d:u::rwX foo
$ getfacl foo
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
default:other::---
rwX
나는 디렉토리를 탐색할 수 있지만 기본적으로 파일을 실행 가능하게 만들지 않기를 원했기 때문에 특별히 사용했습니다 .
이제 Alice와 Bob은 거기서 뭔가를 하고 싶어하므로 두 사람을 모두 foo
그룹에 추가합니다.
$ sudo usermod -aG foo bob
$ sudo usermod -aG foo alice
Bob에게 액세스 권한을 부여했습니다.foo
Alice와 Bob이 그룹의 인간 사용자로 쓸 수 있도록 ACL 재정의를 추가하고 싶습니다 . 먼저 밥:
$ sudo setfacl -Rm u:bob:rwX,d:u:bob:rwX foo
$ getfacl foo
user::rwx
user:bob:rwx
group::r-x
mask::rwx
other::---
default:user::rwx
default:user:bob:rwx
default:group::r-x
default:mask::rwx
default:other::---
Bob은 새로 발견한 능력을 테스트합니다.
$ touch foo/bobfile
$ ls -la foo
drwxrws---+ ... foo foo ... .
drwxr-xr-x ... root root ... ..
-rw-rw----+ ... bob foo ... bobfile
ls
이제 그룹 쓰기 권한이 있는 것으로 나타났지만 이는 bobfile
담당자 ls
가하나 이상의 엔터티에 적용되는 사용 가능한 가장 높은 권한모든 사용자가 그것을 가지고 있는 것은 아닙니다.
앨리스에게 접근 권한을 부여합니다.나는 그녀가 Bob과 동일한 권한을 갖기를 원합니다.
$ sudo setfacl -Rm u:alice:rwX,d:u:alice:rwX foo
$ getfacl foo
user::rwx
user:bob:rwx
user:alice:rwx
group::r-x
mask::rwx
other::---
default:user::rwx
default:user:bob:rwx
default:user:alice:rwx
default:group::r-x
default:mask::rwx
default:other::---
이제 Alice는 Bob의 명령을 실행할 수 있습니다.문서.아?
$ ls -la foo
drwxrws---+ ... foo foo ... .
drwxr-xr-x ... root root ... ..
-rw-rwx---+ ... bob foo ... bobfile*
실제로 Alice는 이제 을 실행할 수 있습니다 foo/bobfile
. 한편 소유자 Bob은 자신의 파일을 실행할 수 없습니다.
이제 Alice가 새 파일을 생성하면 해당 파일을 실행할 수 없으며 bobfile
ACL이 추가될 때 이미 존재했던 파일만 실행됩니다.
흥미롭게도 Bob은 Alice의 파일도 실행할 수 없습니다. 나에게 이것은 ACL 기본 항목과 기본이 아닌 항목 간의 차이점을 보여줍니다.
제가 두 가지를 잘못 이해한 것 같습니다.
x
중요도는X
적어도 ACL에 있어서는 그렇습니다. Alice가 여기서 기존 파일에 대한 실행 권한을 얻는 이유는 무엇입니까?X
ACL 항목을 추가하면 기존 파일을 실행할 수 있지만 새 파일은 실행할 수 없으므로 ACL 기본 규칙과 기본이 아닌 규칙이 중요합니다 .
원하는 결과를 얻기 위한 올바른 명령은 무엇입니까?
고쳐 쓰다:상황이 더욱 이상해집니다.
위 결과 후에 모든 파일에 대한 실행 권한을 제거했습니다.
$ sudo chmod -R ug-x+X foo
이것은 예상대로 작동합니다.
그러나 그런 다음 Alice의 ACL 항목을 삭제했습니다.
$ sudo setfacl -Rx u:alice,d:u:alice foo
뭔지 맞춰봐? 이렇게 하면 모든 파일이 bob
실행 가능해 집니다 alice
.
$ ls -la foo
-rw-rwx---+ ... alice foo ... alicefile*
-rw-rwx---+ ... bob foo ... bobfile*
-rw-rw----+ ... foo foo ... foofile
이러한 파일의 테스트 실행은 다음을 보여줍니다.
- 이제 앨리스는 소유한 파일을 다시 실행할 수 있습니다.
bob
- 이제 Bob은 소유한 다음 파일을 실행할 수 있습니다.
alice
alice
이제 foo 및 foo 파일을 실행할 수 있습니다bob
.- Alice와 Bob 모두 자신의 파일을 실행할 수 없습니다.
- 어느 쪽도 소유한 파일을 실행할 수 없습니다.
foo
이 행동으로 인해 완전히 당황했기 때문에 여기에 도움과 통찰력을 주시면 감사하겠습니다. 감사해요.
참고: 이전에 이 내용을 게시한 적이 있습니다.서버 장애깨닫기 전에는 이것이 더 나은 곳일 수도 있습니다. 이것이 규칙을 위반하는 경우 알려주시면 다른 질문을 삭제하겠습니다.