1

mercurial-server 在 keys 文件夹下管理用户数据库。用户和组由文件和文件夹表示。

AclExtension 通过 ssh 依赖 linux 用户组。

他们似乎不匹配。还是我错过了什么?

我设法使 mercurial-server 工作。但只是看不到如何将 AclExtension 与它集成,所以我可能有更细粒度的访问控制。

4

2 回答 2

3

不幸的是,AclExtension 确实关闭了用户名的访问权限。如果您使用 hg-ssh 为每个使用创建单独的 UNIX 用户帐户,那么您已经获得了所需的一切,但是如果您的所有 ssh 用户都使用相同的 Unix 用户帐户,那么 AclExtension 将无法为您工作。

除非...

我只是查看了 acl.py 文件,看起来它使用了 getpass.py 模块的 getuser,它使用以下代码检查用户名的环境:

for name in ('LOGNAME', 'USER', 'LNAME', 'USERNAME'):
    user = os.environ.get(name)
    if user:
        return user

因此可以通过在 hg-ssh 用户的 authorized_keys 文件中设置一个环境变量来伪造它,如下所示:

command="hg-ssh path/to/repo" environment="LOGNAME=fakeusername" ssh-dss ...

然后您可以将 fakeusername 放入 ACL 规则中,并且可以为每个密钥设置不同的 fakeusername,所有这些都在同一个 UNIX 帐户下运行。

顺便说一句:每个人似乎都只是单独使用 hg-ssh,我再也没有看到使用过(非官方)mercurial-server 应用程序。

于 2009-11-17T05:54:30.943 回答
1

环境技巧似乎不适用于我的 Solaris 机器;我的解决方案是将 fakeusername 作为参数传递给 hg-ssh 并设置 os.environ['LOGNAME'] 以便 getpass 看到它。

command="hg-ssh fakeusername" ssh-dss ...
于 2009-12-06T17:58:52.680 回答