Symfony2 설치를 위해 특정 서버에 대한 권한을 설정하는 배포 스크립트(capifony 기반)가 있습니다. 여러 디렉터리에서 이 작업을 수행하는 다음 두 명령이 포함되어 있습니다.
setfacl -R -m u:www-data:rwx -m u:`whoami`:rwX app/cache
setfacl -dR -m u:www-data:rwx -m u:`whoami`:rwX app/cache
이 두 명령은 권한을 수정하는 방법으로 Symfony2 사이트에 있지만 제 눈에는 놀라울 정도로 유사해 보입니다. 그래서 맨페이지를 살펴봤고 setfacl
두 번째 명령은 첫 번째 명령과 정확히 동일한 작업을 수행하지만 추가 옵션이 하나 더 포함된 것으로 이해했습니다. 내 질문은 내 가정이 맞습니까? 그렇다면 첫 번째 명령을 제거해도 동일한 효과가 있습니까?
답변1
첫 번째 명령은 기존 파일/디렉토리의 권한을 변경합니다. 두 번째 명령의 명령은 -d
모든 디렉터리에 대한 기본 권한을 설정하는 데 필수적입니다. 그러면 해당 디렉터리의 모든 파일에 대한 기본 ACL 세트가 제공됩니다.
노트:두 경우 모두 명령은 -R
스위치를 통해 반복적으로 실행됩니다.
스위치에 관해서는 매뉴얼 페이지 -d
에서 다음을 참조하십시오 .setfacl
-d, --default
All operations apply to the Default ACL. Regular ACL entries in the
input set are promoted to Default ACL entries. Default ACL entries
in the input set are discarded. (A warning is issued if that happens).
이 발췌문도 이에 대해 잘 설명하고 있습니다.
ACL에는 액세스 ACL과 기본 ACL이라는 두 가지 유형이 있습니다. 액세스 ACL은 특정 파일이나 디렉터리에 대한 액세스 제어 목록입니다. 기본 ACL은 디렉터리에만 연결할 수 있습니다. 디렉터리의 파일이 ACL에 액세스하지 않는 경우 디렉터리의 기본 ACL 규칙을 사용합니다. 기본 ACL은 선택 사항입니다.
원천:8.2. 액세스 ACL 설정.
예
이 디렉터리 구조가 있다고 가정해 보겠습니다.
$ tree
.
|-- dir1
| |-- dirA
| | `-- file1
| `-- fileA
`-- file1
2 directories, 3 files
setfacl
이제 질문의 첫 번째 명령을 사용하여 권한을 설정해 보겠습니다.
$ setfacl -R -m u:saml:rwx -m u:samtest:rwX .
결과는 다음과 같습니다.
$ getfacl dir1/ file1
# file: dir1
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
# file: file1
# owner: saml
# group: saml
user::rw-
user:saml:rwx
user:samtest:rwx
group::rw-
mask::rwx
other::r--
-dR
여기에서 명령을 실행 하지 않으면 ACL이 새 디렉터리를 포함하지 않습니다.
$ mkdir dir2
$ getfacl dir2
# file: dir2
# owner: saml
# group: saml
user::rwx
group::rwx
other::r-x
하지만 이 디렉터리를 삭제하고 명령을 실행 setfacl -dR ...
하고 위의 내용을 반복하면:
$ rmdir dir2
$ setfacl -dR -m u:saml:rwx -m u:samtest:rwX .
이제 권한이 완전히 다르게 보입니다.
$ getfacl dir1/ file1
# file: dir1/
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:saml:rwx
default:user:samtest:rwx
default:group::rwx
default:mask::rwx
default:other::r-x
# file: file1
# owner: saml
# group: saml
user::rw-
user:saml:rwx
user:samtest:rwx
group::rw-
mask::rwx
other::r--
이제 새로 생성된 디렉터리에는 다음과 같은 "기본" 권한이 부여됩니다.
$ mkdir dir2
$ getfacl dir2
# file: dir2
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:saml:rwx
default:user:samtest:rwx
default:group::rwx
default:mask::rwx
default:other::r-x
이러한 권한이 있으면 dir2
이제 그 안에 있는 파일에도 적용됩니다 dir2
.
$ touch dir2/fileA
$ getfacl dir2/fileA
# file: dir2/fileA
# owner: saml
# group: saml
user::rw-
user:saml:rwx #effective:rw-
user:samtest:rwx #effective:rw-
group::rwx #effective:rw-
mask::rw-
other::r--