Hudson无法使用unix用户/组进行身份验证

时间:2011-01-12 07:33:34

标签: java linux authentication hudson pam

我正在尝试使用unix用户/组数据库作为hudson的安全领域。 linux服务器正在使用NIS进行用户管理。我的帐户可以通过ssh登录hudson服务器。

哈德森服务器由用户'hudson'运行,它也是组'shadow'的成员,因此哈德森可以读取/ etc / shadow。我使用'test'按钮测试了配置,hudson告诉我它运行良好。

但我无法使用我的unix帐户和密码登录hudson服务器。

我在hudson的日志中找到了java异常,

Jan 12, 2011 8:23:42 AM hudson.security.AuthenticationProcessingFilter2 onUnsuccessfulAuthentication
INFO: Login attempt failed
org.acegisecurity.BadCredentialsException: pam_authenticate failed : Authentication failure; nested exception is org.jvnet.libpam.PAMException: pam_authenticate failed : Authentication failure
    at hudson.security.PAMSecurityRealm$PAMAuthenticationProvider.authenticate(PAMSecurityRealm.java:100)
    at org.acegisecurity.providers.ProviderManager.doAuthentication(ProviderManager.java:195)
    at org.acegisecurity.AbstractAuthenticationManager.authenticate(AbstractAuthenticationManager.java:45)
    at org.acegisecurity.ui.webapp.AuthenticationProcessingFilter.attemptAuthentication(AuthenticationProcessingFilter.java:71)
    at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:252)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
    at org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:173)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
    at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
    at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:66)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
    at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
    at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:164)
    at winstone.FilterConfiguration.execute(FilterConfiguration.java:195)
    at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:368)
    at winstone.RequestDispatcher.forward(RequestDispatcher.java:333)
    at winstone.RequestHandlerThread.processRequest(RequestHandlerThread.java:244)
    at winstone.RequestHandlerThread.run(RequestHandlerThread.java:150)
    at java.lang.Thread.run(Thread.java:595)
Caused by: org.jvnet.libpam.PAMException: pam_authenticate failed : Authentication failure
    at org.jvnet.libpam.PAM.check(PAM.java:105)
    at org.jvnet.libpam.PAM.authenticate(PAM.java:123)
    at hudson.security.PAMSecurityRealm$PAMAuthenticationProvider.authenticate(PAMSecurityRealm.java:90)
    ... 18 more

1月17日更新

主机是RHEL 4.5,我创建了用户和组 shadow ,然后将 hudson 添加到 shadow 组中。

-bash-3.00$ cat  /etc/redhat-release 
Red Hat Enterprise Linux WS release 4 (Nahant Update 5)
-bash-3.00$ ll /etc/shadow
-r--r-----  1 root shadow 1114 Jan  4 11:37 /etc/shadow
-bash-3.00$ cat /etc/group |grep shadow
shadow:x:44:hudson

我还尝试在另一台RHEL 4.8主机上设置hudson。这次我用root运行了哈德森,

kzhu0@pek-wb-rhws4_32:~$ ps -ef|grep hudson
root     18764 29161  0 Jan14 pts/5    00:00:33 /usr/bin/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DHUDSON_HOME=/var/lib/hudson -jar /usr/lib/hudson/hudson.war --logfile=/var/log/hudson/hudson.log --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
kzhu0    22404 18833  0 10:52 pts/2    00:00:00 grep hudson
kzhu0@pek-wb-rhws4_32:~$ cat /etc/redhat-release 

但我仍然没有运气让unix用户/密码组工作。我在/ var / log / messages和/ var / log / secure中找不到任何pam错误消息。在实际使用pam进行身份验证之前,看起来hudson会抛出异常。     红帽企业Linux WS第4版(Nahant Update 8)

3 个答案:

答案 0 :(得分:5)

我在调试了hudson用于PAM安全领域的libpam4j代码后找到了解决方案。

  1. 在我的情况下服务名称必须是' sshd ',因为我想使用NIS进行身份验证。alt text RHEL 4.x使用pam 0.77,它严格依赖于hudson指定的服务名称。但是我的Ubuntu 10.04接受任何无意义的服务名称,它使用pam 1.1.1。
  2. 运行hudson的用户必须具有读取pam服务文件的权限,/ etc / pam.d / sshd是我案例中的文件

答案 1 :(得分:3)

在我的情况下,ubuntu 10.04我使用ssh代替sshd作为服务名称

答案 2 :(得分:0)

我已经在这个问题上挣扎了好几个小时。最后什么对我有用: 1.添加哈德森'用户到root和shadow组 2.安装sshd(缺少/etc/pam.d)。 3.将PAM服务设置为登录。

然后我可以使用Unix帐户登录Hudson并以Unix用户身份执行构建。

我认为第1点是解决问题的那个。