setfacl :이 두 명령이 동일합니까?


10

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이해할 수있는 것에서 두 번째 명령은 첫 번째 명령이 추가 옵션 (정확히 이해하지 못함)으로 수행하는 작업을 정확하게 수행합니다. 내 질문은, 내 가정이 맞습니까? 그렇다면 첫 번째 명령을 제거해도 동일한 효과가 있습니까?

답변:


15

첫 번째 명령은 기존 파일 / 디렉토리의 권한을 변경합니다. -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--

아, 확인하기 위해, app/cache라는 디렉토리 가 들어있는 디렉토리 dev가 있다면 첫 번째 명령이 적용되지만 두 번째 명령은 적용되지 않습니까? 나중에 다른 디렉토리가 추가되면 (예 :) prod두 번째 명령이 권한을 설정합니까? 그렇지 않은 경우 두 번째 명령을 건너 뛸 수 있습니까?
Hosh Sadiq

1
@HoshSadiq-아니요는 -R재귀 명령이므로 권한이 적용됩니다. -d가드 사람이 디렉토리를 만들거나 나중에 너무 너무이 ACL을 적용했을 것이라고 트리에 어떤 디렉토리를 이동한다면.
slm

대단해! 일을 훨씬 더 명확하게 만듭니다 :) 감사합니다!
Hosh Sadiq
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.