2

我有一个使用mercurial-server的 Mercurial 服务器。我access.confhgadmin回购中编辑如下:

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。有任何想法吗?

4

3 回答 3

2

文档提到

user=globpattern: 用户密钥的路径

所以 z 的 key 的路径可能是错误的,或者 repo 的路径是关闭的。

在考虑一个请求时,mercurial-server 会遍历 in 中的所有规则/etc/mercurial-server/access.conf,然后遍历 in 中的所有规则access.confhgadmin寻找在每个条件下都匹配的规则。
第一个匹配决定是否允许请求;如果两个文件中都不匹配,则请求将被拒绝。

其他可能性:可能首先找到拒绝规则(适用于 user z)。

于 2012-02-01T11:39:27.787 回答
2

第一个匹配规则适用。在这种情况下,拒绝规则是第一位的,所以它会首先匹配;无论遵循什么其他规则,都不会授予用户访问 repo a/b 的权限。

尝试将两个写入规则置于拒绝规则之上。

另请注意,/etc/mercurial-server/access.conf 中的任何规则在逻辑上都将在这些规则之前。

于 2012-02-01T16:21:45.277 回答
1

您可能需要了解有关 mercurial 服务器的另一项特殊性。您不能在 hgadmin 的 keys/ 中多次复制密钥。因为在服务器端,这些密钥被编译成 /var/lib/mercurial-server/.ssh/authorized_keys。因此,如果您在 keys/ 的不同密钥文件中指定相同的密钥,那么当 hg 执行 ssh 时,它将使用 authorixed_keys 中密钥的第一次出现,并且可能首先仅引用 repo 并禁用对引用另一个文件的另一个 repos 的访问(但具有相同的钥匙)

于 2012-09-14T10:57:49.180 回答