1

我已经通过 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 凭据。

感谢您阅读问题。

4

3 回答 3

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>
于 2012-05-15T13:19:25.190 回答
2
One of the solutions would be if hg would remember the https credentials.

它可以记住推送和拉取的凭据。如果您不介意将详细信息添加到配置文件之一(用户的配置或存储库克隆的) ,请查看以下auth部分hg help confighgrc

这意味着将密码放在您可能不喜欢的配置文件中,以便您可以使用Mercurial Keyring Extension来更安全地存储密码。

于 2012-05-15T12:33:59.043 回答
0

事实证明,自动凭据是不够的。可以通过 Web 界面访问存储库。但是,相同的配置文件会在浏览器中弹出一个身份验证对话框,这会使 Web 界面无法使用。

于 2012-05-15T12:43:10.390 回答