setfacl을 사용하여 rsync로 Apache에 대한 재귀 권한 생성

setfacl을 사용하여 rsync로 Apache에 대한 재귀 권한 생성

저는 로컬에 Dokuwiki를 설치하고 있으며 정기적으로 rsync를 사용하여 서버에 동기화합니다. 나는 또한 내 친구에게 SSH 계정을 주고 그의 공개 Dokuwiki 설치를 호스팅할 예정입니다. 그러나 액세스 권한에 문제가 있습니다. 미러가 읽기 전용임에도 불구하고 Dokuwiki는 여전히 캐시 등을 위해 데이터 디렉토리에 대한 쓰기 권한이 필요합니다. Apache 서버는 사용자 www-data로 실행되며, 그럴 때마다 rsync를 사용하면 권한이 재설정됩니다.

이 사이트의 다른 답변을 바탕으로 setfacl을 사용하여 기본 권한을 설정하려고 시도했지만 작동하지 않는 것 같습니다. getfacl은 권한이 있음을 나타내지만 Dokuwiki는 실행되지 않으며 다음과 같이 파일을 쓰려고 할 때 사용자 www-data도 작동하지 않습니다. 내가 무엇을 놓치고 있나요?

wiki/data$ sudo su www-data
$ pwd
/var/www/wiki/data
$ whoami
www-data
$ touch hi
touch: cannot touch `hi': Permission denied
$ getfacl /var/www/wiki/data
getfacl: Removing leading '/' from absolute path names
# file: var/www/wiki/data
# owner: stian
# group: admin
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:www-data:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

권한을 설정하는 데 사용한 명령은 다음과 같습니다.

setfacl -R -d -m u:www-data:7 /var/www/*

답변1

문제 #1: Rsync가 ACL을 삭제합니다.

ACL 권한을 적용한 후에는 또는 스위치를 rsync사용하는 작업을 수행할 때 주의해야 합니다 . 이는 동기화를 수행할 때 이를 보존하도록 지시합니다.-A--aclsrsync

rsync 매뉴얼 페이지에서 발췌

    -A, --acls                  preserve ACLs (implies -p)

문제 #2: ACL 권한 없음

귀하의 예를 보면 다음과 같은 권한이 포함되어 있습니다.

전통 파마

# owner: stian
# group: admin
user::rwx
group::r-x
other::r-x

ACL

default:user::rwx
default:user:www-data:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

그러나 이러한 ACL은 새로운 개체를 생성하기 위한 것이며 생각한 대로 정확히 작동하지 않습니다. www-data기본 ACL 권한 외에도 사용자에 대한 항목을 생성해야 합니다 .

$ pwd
/tmp/somedir

$ mkdir data
$ setfacl -R -d -m u:gopher:7 data

$ getfacl data
# file: data
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:gopher:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

실험

data이제 사용자로 디렉토리 에 파일을 작성해 보겠습니다 gopher.

$ sudo -u gopher touch /tmp/somedir/data/afile
touch: cannot touch `/tmp/somedir/data/afile': Permission denied

낯익어 보이나요?

추가 ACL 권한 추가

사용자에 대한 ACL을 추가해야 하기 때문에 www-data기본 규칙은 액세스를 위한 것이 아니라 새 파일/디렉터리를 생성하기 위한 것입니다.

$ setfacl -R -m u:gopher:7 data

이제 data디렉토리를 다시 확인하십시오.

$ getfacl data
# file: data
# owner: root
# group: root
user::rwx
user:gopher:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:gopher:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

gopher이제 사용자에게 액세스 권한이 있다는 ACL이 있다는 유일한 차이점은 다음과 같습니다 rwx.

user:gopher:rwx

실험을 반복하세요

디렉터리에 데이터를 다시 쓰십시오.

$ sudo -u gopher touch /tmp/somedir/data/afile
$

효과가 있었어요!!! 결과 파일을 다시 확인하세요.

$ ls -l /tmp/somedir/data/afile
-rw-rw-r--+ 1 gopher gopher 0 Oct  7 21:36 /tmp/somedir/data/afile

관련 정보