通过apache_mod_krb进行Git身份验证

时间:2010-08-06 14:23:50

标签: git http authentication kerberos

我正在使用git repo和git-http-backend。在apache2中我有位置需要身份验证克隆和推送操作。当我用AuthType Basic保护它的位置时 所有工作都很好,git通过身份验证,可以克隆和推送,但如果我将类型更改为KerberosV5 git无法使用正确的凭据访问repo。如果我正在使用我的浏览器,我可以访问位置以保护kerberos。

git clone http://user@mydomain.com/git/myapp.git
Initialized empty Git repository in /tmp/myapp/.git/
Password:
error: The requested URL returned error: 401 while accessing http://user@mydomain.com/git/myapp.git/info/refs
fatal: HTTP request failed

和apache错误日志

[Fri Aug 06 17:15:50 2010] [debug] src/mod_auth_kerb.c(1579): [client 192.168.12.153]  kerb_authenticate_user entered with user (NULL) and auth_type KerberosV5 
[Fri Aug 06 17:15:50 2010] [debug] src/mod_auth_kerb.c(1579): [client 192.168.12.153]kerb_authenticate_user entered with user (NULL) and auth_type KerberosV5

git-core 1:1.7.1-1~bpo50 + 1 apache2 2.2.9-10 + lenny8 libapache2-mod-auth-curb 5.3-5

3 个答案:

答案 0 :(得分:3)

  

curl中的问题,因为debian中的git是使用curl选项ANY_AUTH编译的,当git客户端尝试连接到webserver并首先要求它协商auth并且它无法执行此操作时,git don&#39 ;尝试基本身份验证。

使用Git 2。3。1(2015年第1季度/第2季度)会更加强大:commit 4dbe664brian m. carlson (bk2204)

  

remote-curl:如果Basic失败,则回退到Negotiate身份验证

     

使用mod_auth_kerb的Apache服务器可以配置为允许用户   使用Negotiate(使用Kerberos票证)或进行身份验证   基本身份验证(使用Kerberos密码)。通常,一个人会   想要使用谈判认证(如果可用),但要退回   如果故障单丢失或过期,则进行基本身份验证。

     

但是,libcurl会尽力使用Basic之外的其他内容   auth,甚至通过HTTPS   如果提供了Basic和其他内容,libcurl将永远不会尝试使用Basic,即使其他选项失败。   教授HTTP客户端代码以停止尝试其身份验证机制   在第一次失败后不要使用密码(目前为Negotiate),因为如果他们第一次失败,他们将永远不会成功

答案 1 :(得分:1)

curl中的问题,因为debian中的git是用curl选项ANY_AUTH编译的,当git客户端尝试连接到webserver并首先要求它协商auth并且它不能这样做时,git不要尝试基本的auth,因为基本比谈判安全性低。当我尝试curl --anya,我也可以'从网络服务器获取数据,但如果我改变--basic一切正常,问题就是我无法告诉git auth应该使用什么。

答案 2 :(得分:1)

这在libcurl中是奇怪的,而不是Git中的问题。有一个解决方法。如果您未将用户名和密码传递给库,则Libcurl不会启用任何身份验证代码。如果您使用不需要用户名和密码的negotiate(kerberos),也会发生这种情况。简单的解决方案:

echo http://x:x@git.example.com > ~/.git-credentials
git config --global credential.helper store

x:x是用户名和密码。你可以在那里使用任何随机字符串。只需要在libcurl中启用代码路径进行身份验证。然后kerberos将工作(为我工作:))。