我已经通过SSL设置了一个mercurial服务器。在apache配置文件中,我使用mysql数据库设置了身份验证。
我希望每个人都能够在没有凭据的情况下从存储库中提取,但是将权限限制为经过身份验证的用户。现在的方式是,每个人都被认证为拉和推,或者没有人。
我的apache配置如下:
<Location /hg/repo>
AuthType Basic
AuthName "Repository Access"
AuthBasicAuthoritative Off
AuthUserFile /dev/null
AuthMySQL On
AuthMySQL_Authoritative On
AuthMySQL_Host localhost
AuthMySQL_DB repo
AuthMySQL_User repo
AuthMySQL_Password_Table users_auth_external
AuthMySQL_Group_Table users_auth_external
AuthMySQL_Username_Field username
AuthMySQL_Password_Field passwd
AuthMySQL_Group_Field groups
AuthMySQL_Encryption_Types SHA1Sum
Require group pink-image
<LimitExcept GET>
Require valid-user
</LimitExcept>
</Location>
hg还需要对ssl pull进行身份验证,无论在LimitExcept开关上如何。
是否有办法限制身份验证仅用于推送到存储库?
简单的http访问是不够的,因为如果某人是开发人员,她会通过https检出代码。
无法进行SSH访问,因为某些开发人员拥有防火墙禁止的ssh端口。
其中一个解决方案是,如果hg会记住https凭证。
感谢您阅读此问题。
答案 0 :(得分:3)
身份验证应该包含在例外规则中。
<Location /hg/repo>
<LimitExcept GET>
AuthType Basic
AuthName "Repository Access"
AuthBasicAuthoritative Off
AuthUserFile /dev/null
AuthMySQL On
AuthMySQL_Authoritative On
AuthMySQL_Host localhost
AuthMySQL_DB repo
AuthMySQL_User repo
AuthMySQL_Password_Table users_auth_external
AuthMySQL_Group_Table users_auth_external
AuthMySQL_Username_Field username
AuthMySQL_Password_Field passwd
AuthMySQL_Group_Field groups
AuthMySQL_Encryption_Types SHA1Sum
Require group pink-image
</LimitExcept>
</Location>
答案 1 :(得分:2)
One of the solutions would be if hg would remember the https credentials.
它可以记住推拉的凭据。如果您不介意将详细信息添加到其中一个配置文件(用户配置或存储库克隆的auth
)
hg help config
的{{1}}部分下的内容
这意味着将密码放在您可能不喜欢的配置文件中,这样您就可以使用Mercurial Keyring Extension来更安全地存储密码。
答案 2 :(得分:0)
事实证明,自动凭证还不够。可以通过Web界面访问存储库。但是,相同的配置文件会在浏览器中弹出一个验证对话框,使Web界面无法使用。