ACL에서 ACL을 활성화 한 상태에서 권한을 재귀 적으로 설정하려면 어떻게합니까?


24

예를 들어, 동료에게 특정 디렉토리에 대한 쓰기 권한을 부여하려고합니다. 하위 디렉토리에 액세스 권한 775, 파일 664가 있고 dir-775에 일부 실행 파일이 있다고 가정하십시오.

이제 쓰기 권한을 추가하고 싶습니다. chmod를 사용하면 다음과 같은 것을 시도 할 수 있습니다.

chmod o+w -R mydir/

그러나 dir을 세계 쓰기 가능으로 만들고 싶지 않기 때문에 멋지지 않습니다. 특정 사용자에게만 액세스 권한을 부여하고 싶습니다. 그러나 이러한 권한을 설정하는 쉬운 방법이 있습니까? 내가 본 것처럼 적어도 세 가지 경우 (디렉토리, 파일, 실행 파일)를 별도로 처리해야합니다.

find -type d -exec setfacl -m u:colleague:rwx {} \;
find -type f -executable -exec setfacl -m u:colleague:rwx {} \;
find -type f \! -executable -exec setfacl -m u:colleague:rw {} \;

그런 간단한 작업을 위해 많은 코드 줄이 보입니다. 더 좋은 방법이 있습니까?

답변:


39

setfacl다음 과 같이 재귀 옵션 ( -R)이 있습니다 chmod.

  -R, --recursive
      Apply operations to all files and directories recursively. This
      option cannot be mixed with `--restore'.

또한 capital-x X권한을 사용할 수 있습니다 . 이는 다음을 의미합니다.

  execute only if the file is a directory or already has
  execute permission for some user (X)

따라서 다음을 수행하면 효과가 있습니다.

setfacl -R -m u:colleague:rwX .

(모든 인용문은 데비안과 함께 제공되는 acl-2.2.52에man setfacl 대한 것입니다 )


4
setfacl 명령은 FreeBSD의 9에서 '-R'플래그가없는
아론 C. 드 Bruyn

6
OP가 질문에 [linux]로 태그를 달았습니다.
umläute

그것을 놓쳤다. ;)
Aaron C. de Bruyn

이후에 생성 된 새 파일 / 폴더에 자동으로 적용됩니까?
Enigma

setfacl 버전에 대한 매뉴얼 페이지를 확인하십시오. 에 포함 된 옵션 -X이 예상대로 작동하지 않습니다 setfacl 2.2.49.
phyatt

4

umläute에서 언급했듯이 setfacl -R대문자 "X"가있는 명령 은 다음과 같은 방법입니다.

setfacl -R -m u:colleague:rwX .

그러나 ACL을 철저 하게 다시 적용해야하는 경우 (예 : Windows의 "하위 디렉토리에 대한 권한 다시 적용").

find . -mindepth 1 | xargs -n 50 setfacl -b --set-file=<(getfacl . | sed -e 's/x$/X/')

이 명령은과 같은 오류를 피하기 위해 분할 될 수 있습니다 setfacl: foobar: Only directories can have default ACLs.

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/')

구문 <( something )은 bash에만 적용되는 Process Substitution 입니다. 다른 쉘을 사용하는 경우 임시 파일을 작성해야 할 수도 있습니다.


-1
for i in $(find /data -mindepth 0 -type d)
do setfacl -m  u:zabbix:r-x $i
    echo "ACL rules set for "$i
done


@muru 호기심에서 벗어나지 않겠습니까?
Shadur

전체 의견은 링크입니다. 그것을 따라 알아 내십시오.
muru

이 접근법을 사용하려면find /data -mindepth 0 -type d -exec setfacl -m u:zabbix:r-X {} \;
sibaz

1
사용하지 마십시오. $(find /data -mindepth 0 -type d)줄 단위로 결과를 반환하지 않고 전체 결과를 버퍼링합니다. 줄에 공백이 있으면 $i변수에 잘못된 레코드가 표시됩니다 .
Gnought
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.