你如何利用AclExtension和mercurial-server / hg-ssh?

时间:2009-11-17 04:55:05

标签: mercurial acl

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

AclExtension依赖于linux用户组通过ssh。

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

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

2 个答案:

答案 0 :(得分:3)

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

除非......

我只是查看了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规则中,并且可以为每个密钥设置不同的伪用户名,所有这些都在同一个UNIX帐户下运行。

BTW:每个人似乎都只使用hg-ssh,我再也看不到(非官方)mercurial-server app了。

答案 1 :(得分:1)

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

command="hg-ssh fakeusername" ssh-dss ...