我有一个使用mercurial-server的 Mercurial 服务器。我access.conf
在hgadmin
回购中编辑如下:
deny repo=a/b
read user=x/**
read user=y/**
write repo=a/b user=x/abc
write repo=a/b user=y/z
但是用户z
仍然无法访问这个 repo。有任何想法吗?
我有一个使用mercurial-server的 Mercurial 服务器。我access.conf
在hgadmin
回购中编辑如下:
deny repo=a/b
read user=x/**
read user=y/**
write repo=a/b user=x/abc
write repo=a/b user=y/z
但是用户z
仍然无法访问这个 repo。有任何想法吗?
文档提到:
user=globpattern
: 用户密钥的路径
所以 z 的 key 的路径可能是错误的,或者 repo 的路径是关闭的。
在考虑一个请求时,mercurial-server 会遍历 in 中的所有规则
/etc/mercurial-server/access.conf
,然后遍历 in 中的所有规则access.conf
,hgadmin
寻找在每个条件下都匹配的规则。
第一个匹配决定是否允许请求;如果两个文件中都不匹配,则请求将被拒绝。
其他可能性:可能首先找到拒绝规则(适用于 user z
)。
第一个匹配规则适用。在这种情况下,拒绝规则是第一位的,所以它会首先匹配;无论遵循什么其他规则,都不会授予用户访问 repo a/b 的权限。
尝试将两个写入规则置于拒绝规则之上。
另请注意,/etc/mercurial-server/access.conf 中的任何规则在逻辑上都将在这些规则之前。
您可能需要了解有关 mercurial 服务器的另一项特殊性。您不能在 hgadmin 的 keys/ 中多次复制密钥。因为在服务器端,这些密钥被编译成 /var/lib/mercurial-server/.ssh/authorized_keys。因此,如果您在 keys/ 的不同密钥文件中指定相同的密钥,那么当 hg 执行 ssh 时,它将使用 authorixed_keys 中密钥的第一次出现,并且可能首先仅引用 repo 并禁用对引用另一个文件的另一个 repos 的访问(但具有相同的钥匙)