哈德森未能使用unix用户/组进行身份validation

我试图使用unix用户/组数据库作为哈德森的安全领域。 linux服务器正在使用NIS进行用户pipe理。 我的帐户可以通过SSHlogin哈德森服务器。

而哈德森服务器是由用户'哈德森',也是集团'阴影'的成员运行,所以哈德森可以读/ etc / shadow。 我用“testing”buttontesting了configuration,哈德森告诉我它运行良好。

但是我不能用我的unix帐户和密码login哈德森服务器。

而我在哈德森的日志中发现了下面的javaexception,

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,我创build了用户和组阴影 ,然后将哈德森添加到组阴影中

 -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。 这一次我根本跑了哈德森,

 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来获取身份validation之前会抛出exception。 红帽企业Linux WS第4版(Nahant Update 8)

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

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

在我的情况下,Ubuntu 10.04 Ihad使用ssh而不是sshd作为服务名称

我在这个问题上挣扎了好几个小时。 最后,对我有用:1.将“hudson”用户添加到root和shadow组2.安装sshd(在/etc/pam.d中缺少)。 3.设置PAM服务登录。

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

我认为第一点是确定问题的一点。