我正在尝试使用 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
按预期创建具有适当默认权限的文件
编辑
- Mercurial版本:2.0.2-1ubuntu1
- 乌班图12.04
答案1
以下是可能发生的情况:
- 由于限制性 umask,您正在通过“hg init”创建 /tmp/test/.hg 目录,可能没有组权限
- 您正在递归设置 ACL,但没有递归设置传统权限位来匹配
- 水银副本传统的权限位/tmp/测试/.hg/在 .hg 下创建新文件时
- 因此,新添加的文件没有组权限
- 根据定义,这会屏蔽您设置的任何默认 ACL 条目
修复:在存储库上设置正确的传统 Unix 权限。
答案2
我无法再重现该错误。看起来我在设置/进行测试时搞砸了。