기본 ACL 항목이 할당된 디렉터리가 있지만 해당 하위 파일 및 하위 디렉터리 중 일부 또는 전체에 액세스 권한이 있거나 해당 기본값과 일치하지 않는 기본 ACL이 있는 경우 해당 기본 ACL 항목을 모든 하위 항목에 반복적으로 (재)적용하려면 어떻게 해야 합니까? ? 자격 있는. 기존의 모든 하위 ACL을 완전히 교체하고 싶습니다.와는 별개로파일의 현재 실행 상태입니다. 그렇지 않으면 모든 하위 항목이 현재 위치에 새로 생성된 ACL을 가져야 합니다.
로가흐가 물었다."ACL이 활성화된 상태에서 디렉터리에 대해 반복적으로 권한을 설정하는 방법은 무엇입니까?"하지만 추가하고 싶습니다새로운기존 기본 ACL을 (재)적용하는 대신 ACL을 반복적으로 입력합니다. Rogach는 요청하지 않았지만이 질문에 대한 프랭클린 피아트(Franklin Piatt)의 답변또한 내 문제에 대한 해결책을 제공했지만 그의 솔루션에 결함이 있다고 생각합니다. Piat는 다음 명령 쌍을 사용할 것을 권장합니다.
find . -mindepth 1 -type d| xargs -n 50 setfacl -b --set-file=<(getfacl . | sed -e 's/x$/X/') find . -mindepth 1 -type f| xargs -n 50 setfacl -b --set-file=<(getfacl . | grep -v '^default:' | sed -e 's/x$/X/')
고치고 싶은 결함:
- 현재 디렉터리의 액세스 ACL이 기본 ACL 대신 하위 항목으로 전파되고 있습니다. 이는 ACL이 작동하도록 이해하는 방식이 아닙니다.
- 모든 파일의 실행 비트가 지워졌습니다(sed유효하지 않습니다).
- 전형적인수도르이 정책은 루트 권한이 필요할 때 프로세스 교체가 작동하는 것을 방지합니다. "closefrom_override" 옵션을 참조하세요.스도(5).
이상적으로는 이 작업을 수행하려면 명령줄도 필요할 것입니다.
답변1
나는 이 추악하고 비효율적인 해결책을 생각해 냈지만 더 나은 방법이 있을 것입니다.
( cd '/some/dir' && sudo find . -mindepth 1 -path './leave/alone' -prune -o \( -type d -exec bash -c 'getfacl -cd . | sed -nre "p;/^\$/!s/^/default:/p" | setfacl -bM - "{}"' \; \) -o \( -type f -exec bash -c 'getfacl -cd . | sed -re "/^#/!s/x\$/X/" | setfacl -bM - "{}"' \; \) )
이 괴물에 대한 몇 가지 의견:
- 이러한 빈번한 요구 사항을 보여주기 위해 하위 디렉터리 제외를 포함했습니다.
- 이것CD오류가 발생하기 쉬운 소스 디렉터리 경로의 중복이 제거되고 외부 대괄호는 변경 사항을 임시로 만듭니다.
- 어떤 것의 목적을 가리킨다.세게 때리다"-exec"는 파이프를 허용하지 않기 때문에 필요합니다. 또한 기록 교체를 호출하고 악명 높은 "이벤트를 찾을 수 없음" 오류를 발생시키는 "!" 역할을 방지합니다.
- 하위 디렉터리의 경우 소스를 적용해야 합니다.기본두 개의 액세스 ACL로서의 ACL그리고기본 ACL.
- 파일의 경우 소스 기본 ACL을 액세스 ACL로 적용해야 하지만 "디렉터리만 기본 ACL을 가질 수 있습니다." 경고를 피하려면 기본 ACL을 전혀 적용하지 마세요.설정값.
- 파일의 경우 강제로 종료되지 않도록 소스 기본 ACL의 "x" 권한을 "X"로 바꿔야 합니다.모두파일이 실행 가능해집니다. 이 솔루션은 기존 파일의 실행 상태도 유지하지만오직"--set-file=-" 대신 "-bM -"을 사용하기 때문입니다.설정값.
- 이 명령줄은매우"-exec...+" 또는 "-exec...+" 사용법을 모르기 때문에 비효율적입니다.매개변수"-exec ...\;" 대신.
- 이 명령줄은 작동하지만 하위 파일에서 획득한 ACL은효과적으로새 하위 파일이 새로 생성될 때 발생하는 상황과 동일하지만 기술적으로 동일하지는 않습니다.
"유닉스 철학"은 훌륭하지만, 내가 성취하고 싶은 작업이 너무 빈번해서 그렇게 서투른 명령줄이 필요하지 않습니다. 추가 기능을 얻기 위해 로비보다 더 좋은 방법이 있습니까?설정값?