mercurial-server管理密钥文件夹下的用户数据库。用户和组由文件和文件夹表示。你如何使用AclExtension和mercurial-server/hg-ssh?
AclExtension依靠linux用户组通过ssh。
他们似乎不匹配。还是我错过了什么?
我设法让mercurial-server工作。但只是没有看到如何整合AclExtension它,所以我可能有更细粒度的访问控制。
mercurial-server管理密钥文件夹下的用户数据库。用户和组由文件和文件夹表示。你如何使用AclExtension和mercurial-server/hg-ssh?
AclExtension依靠linux用户组通过ssh。
他们似乎不匹配。还是我错过了什么?
我设法让mercurial-server工作。但只是没有看到如何整合AclExtension它,所以我可能有更细粒度的访问控制。
不幸的是,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应用程序。
环境技巧似乎不适用于我的Solaris机器;我的解决方案是将fakeusername作为参数传递给hg-ssh,然后设置os.environ ['LOGNAME'],以便getpass可以看到它。
command="hg-ssh fakeusername" ssh-dss ...