
colleague
예를 들어, 사용자에게 디렉토리에 대한 읽기 액세스 권한을 부여하고 싶지만 /rather/long/path/to/the/directory
상위 디렉토리에 반드시 그럴 필요는 없습니다.
예를 들어 설명했듯이여기그리고거기colleague
, 먼저 그것이 경로를 통과할 수 있는지 확인해야 합니다 . 사용 setfacl
:
setfacl -m u:colleague:x /rather
setfacl -m u:colleague:x /rather/long
setfacl -m u:colleague:x /rather/long/path
setfacl -m u:colleague:x /rather/long/path/to
setfacl -m u:colleague:x /rather/long/path/to/the
setfacl -m u:colleague:xr /rather/long/path/to/the/directory
깊게 중첩된 경로의 경우 이는 매우 지루한 작업입니다. 이를 수행하는 더 우아한 방법이 있습니까?
PS 좀 더 어렵게 만들기 위해 일반 사용자인 경우 경로(예: )의 최상위 디렉터리에 대한 권한을 변경할 권한이 없을 수도 있습니다 /home
. 가능하다면 솔루션은 이러한 디렉터리를 무시하거나(이 디렉터리 colleague
를 탐색할 수 있다고 가정) 더 나은 방법으로는 해당 colleague
디렉터리를 탐색할 수 있는지 확인하고 그렇지 않은 경우 오류 메시지를 표시해야 합니다.
답변1
간단하고 어리석은 대답은 다음과 같습니다.
당신은 할 수 있습니다줄이다첫 번째 명령을 결합하여 명령 순서를 약간 변경하십시오.N– 그 중 1개:
setfacl -mu:동료:x /오히려 /오히려/긴 /오히려/긴/경로 /오히려/긴/경로/to /오히려/긴/경로/to/the setfacl -mu:동료:xr /오히려/긴/경로/to/the/디렉토리
"명백한" 경고:
대상(리프) 디렉터리를 소유하고 있더라도 경로의 모든 디렉터리에 대한 실행(트래버스) 액세스 권한이 있어야 합니다. 액세스할 수 없고 소유하지 않은 디렉토리가 있다면 운이 없는 것입니다. ( root
자신에게 액세스 권한을 부여할 수 있는 신원(즉, 디렉토리의 소유자) 을 가정하거나 그렇게 할 권한이 있는 누군가를 설득해야 합니다 . 이는 이 질문의 범위를 벗어납니다.)
그러나 자신이 소유하고 있지만 액세스할 수 없는 중간 디렉터리가 있는 경우(예: 누군가가 수행한 경우 chmod 0
) 자신에게 액세스 권한을 부여해야 합니다.위에서 아래로.
답변: (TL;DR)
나는 이것이 아래에서 위로 작동하기 때문에 위의 점을 지적했습니다.
leaf="/오히려/long/path/to/the/directory" 분기="$잎" while Branch="$(dirname "$branch")" 하다 setfacl -mu:동료:x "$브랜치" || 부서지다 if [ "$branch" = / ] 그 다음에 부서지다 fi 완료 setfacl -mu:동료:xr "$잎"
setfacl
선택적으로 를 추가하여 오류 메시지를 숨길 수 있습니다 2> /dev/null
. /rather/long
and 를 소유하고 있지만 /rather/long/path/to
소유하지 않은 병리적 상황이 있는 경우 /rather/long/path
(그러나 해당 권한은 열려 있음) 에 오류가 발생한 후에도 계속해서 트리를 올라야 하기 때문에 || break
를 제거하십시오 . 그렇지 않으면, 당신이 그렇지 않다면 , 당신은setfacl
setfacl … /rather/long/path
root
~할 수 있었다if [ "$branch" = / ]
실행할 수 없는 디렉터리 수준에 도달하면 루프가 종료되므로 테스트를 제거하세요 setfacl
. (그러나 그것은 좋은 생각이 아닙니다. 이것을 스크립트로 저장하면 언젠가는 로 실행하게 될 것이며 root
무한 루프가 발생하게 될 것입니다.)
물론, 이것을 스크립트로 만들면 디렉터리 경로와 동료 이름이 매개변수가 되어야 합니다.