mercurial-server管理密钥文件夹下的用户数据库。用户和组由文件和文件夹表示。
AclExtension依赖于linux用户组通过ssh。
他们似乎不匹配。还是我错过了什么?我设法让mercurial-server工作。但只是没有看到如何将AclExtension与它集成,所以我可能有更精细的访问控制。
答案 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 ...