2012-05-15 29 views
1

我已經通過SSL設置了一個mercurial服務器。在Apache配置文件中,我使用mysql數據庫設置了身份驗證。mercurial ssl訪問允許拉動BUT要求身份驗證推送

我希望每個人都可以從存儲庫中取出沒有憑據的權限,但限制向認證用戶推送權限。現在完成的方式要麼是所有人都被拉和推,要麼沒有人。

我的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> 

汞也需要認證的SSL拉,不管LimitExcept中開關。

有沒有一種方法來限制僅用於推送到存儲庫的身份驗證?

簡單的http訪問是不夠的,因爲如果某人是開發人員,她通過https檢出代碼。

SSH訪問是不可能的,因爲一些開發人員有防火牆禁止的ssh端口。

其中一個解決方案是如果hg會記住https憑據。

謝謝你閱讀這個問題。

回答

2
One of the solutions would be if hg would remember the https credentials. 

它可以記住push和pull的憑據。看看下面的hg help configauth部分,如果你不介意增加細節的配置文件中的一個(用戶的配置或倉庫克隆的hgrc

這將意味着把密碼在配置文件中,你可能不就像你可以使用Mercurial Keyring Extension來代替它一樣更安全地存儲密碼。

0

事實證明,自動憑證是不夠的。存儲庫可以通過Web界面進行訪問。然而,相同的配置文件會在瀏覽器中彈出一個驗證對話框,導致Web界面無法使用。

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> 
+0

這是正確的方法。另外需要注意的是,只有'Require'選項('Require group','Require valid-user'等)需要封裝在LimitExcept子句中。這允許關於訪問控制的進一步粒度(即,某些用戶/組被讀取,其他人被讀取/寫入) –

相關問題