Mercurial (hg) 不尊重默认 ACL 设置

Mercurial (hg) 不尊重默认 ACL 设置

我正在尝试使用 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

我无法再重现该错误。看起来我在设置/进行测试时搞砸了。

相关内容