ACL을 사용하여 다양한 Mercurial 저장소에 대한 세분화된 액세스 제어를 설정하려고 합니다. 저장소에 변경 사항을 푸시하면 그 아래에 생성된 새 파일에는 /myrepo/.hg/store/data
기본 권한이 없으므로 사용자가 해당 파일에 액세스할 수 없습니다.
문제가 재현 가능합니다. 사용자 "myuser"가 www-data 그룹의 일부라고 가정합니다. 서버에서:
hg init /tmp/test
chown root:root /tmp/test
chmod 770 /tmp/test
setfacl -Rdm g:www-data:rwx /tmp/test
setfacl -Rm g:www-data:rwx /tmp/test
TortoiseHg가 있는 Windows 상자에서 plink.exe
공유 키를 사용하여 SSH를 설정합니다.
hg clone ssh://myuser@servername//tmp/test test
#add file test1.txt and commit to test
hg push ssh://myuser@server//tmp/test
cd ..
hg clone ssh://myuser@servername//tmp/test test2 <---FAIL
ACL을 확인하려면 서버로 돌아가세요.
getfacl /tmp/test/.hg/store/data/test1.txt.i
# file: tmp/test/.hg/store/data/test1.txt.i
# owner: myuser
# group: myuser
user::rw-
group::rw-
other::r--
따라서 상위 폴더에 추가한 기본 권한으로는 새 파일이 생성되지 않습니다 /tmp/test
. 이 문제는 hg pull
서버와 hg serve
클라이언트 에서 이 작업을 수행할 때도 발생합니다.
/etc/fstab
"default,acl" 옵션을 사용하여 파티션을 마운트하겠습니다 . 또한 touch /tmp/test/test1
예상대로 적절한 기본 권한을 가진 파일을 생성합니다.
편집하다
- 머큐리얼 버전: 2.0.2-1ubuntu1
- 우분투12.04
답변1
일어날 수 있는 상황은 다음과 같습니다.
- 제한적인 umask로 인해 그룹 권한 없이 "hg init"를 통해 /tmp/test/.hg 디렉토리를 생성하고 있습니다.
- ACL을 재귀적으로 설정하지만 일치하도록 레거시 권한 비트를 재귀적으로 설정하지는 않습니다.
- 수은복사기존 권한 비트/tmp/테스트/.hg/.hg 아래에 새 파일을 생성하는 경우
- 따라서 새로 추가된 파일에는 그룹 권한이 없습니다.
- 정의에 따라 이는 사용자가 설정한 기본 ACL 항목을 차단합니다.
수정: 저장소에 대한 올바른 레거시 Unix 권한을 설정합니다.
답변2
더 이상 오류를 재현할 수 없습니다. 이 설정/테스트 중에 실수를 저지른 것 같습니다.