디렉토리와 모든 상위 디렉토리에 facl을 설정하는 방법은 무엇입니까?

디렉토리와 모든 상위 디렉토리에 facl을 설정하는 방법은 무엇입니까?

다음과 같은 디렉토리 구조가 있다고 가정합니다.


a
  b1
    c1
    c2
  b2
    c3
    c4

setfacl을 사용하여 사용자에게 c1에 직접 액세스할 수 있는 권한을 제공하고 싶습니다. 다음과 같이 할 수 있습니다.

setfacl -m u:frank:rX a/b1/c1

그러나 이로 인해 a와 b1에 자동으로 액세스할 수 있는 것은 아닙니다.

-R 옵션은 c1의 하위 항목(있는 경우)에 ACL을 적용하므로 이 문제를 해결합니다.

답변1

ACL을 적용할 디렉터리 목록을 지정해야 합니다. 이는 재귀 작업 모드가 있는지 여부 에 관계없이 파일 메타데이터(예 chown: , chmod, , )를 수정할 수 있는 모든 명령에 대해 chattr동일합니다 . 필요 모든 경로 구성 요소가 심볼릭 링크가 아닌지 확인하십시오.setfattrtouch

그래서:

setfacl -m u:frank:rX a a/b1 a/b1/c1

또는 csh와 유사한 중괄호 확장을 지원하는 셸에서:

setfacl -m u:frank:rX a{,/b1{,/c1}}

쉘이 이면 다음 zsh과 같은 함수를 정의할 수 있습니다.

upward() until [[ $argv[-1] = . ]] { "$@"; argv[-1]=$argv[-1]:h; }

그 다음에:

$ upward echo setfacl -m u:frank:rX a/b1/c1
setfacl -m u:frank:rX a/b1/c1
setfacl -m u:frank:rX a/b1
setfacl -m u:frank:rX a

( echo실제 실행을 제거하십시오 setfacl).

또는 다음 중 하나를 정의할 수 있습니다.

ancestry() until [[ $REPLY = . ]] { reply+=($REPLY); REPLY=$REPLY:h; }

glob 한정자로 사용되는 함수:

$ echo setfacl -m u:frank:rX a/b1/c1(+ancestry)
setfacl -m u:frank:rX a a/b1 a/b1/c1

또는 depth o순서의 경우:

$ echo setfacl -m u:frank:rX a/b1/c1(od+ancestry)
setfacl -m u:frank:rX a/b1/c1 a/b1 a

어떤 경우든 한 쌍에 검색 액세스 권한을 부여하면 frank디렉터리 액세스가 제한되지 않은 경우(위의 액세스는 제한되어 있으므로) a해당 쌍의 액세스를 열 수 있다는 점에 유의하세요.a/b2

관련 정보