2009-11-17 57 views
1

mercurial-server管理密钥文件夹下的用户数据库。用户和组由文件和文件夹表示。你如何使用AclExtension和mercurial-server/hg-ssh?

AclExtension依靠linux用户组通过ssh。

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

我设法让mercurial-server工作。但只是没有看到如何整合AclExtension它,所以我可能有更细粒度的访问控制。

回答

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应用程序。

1

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

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