3

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

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

但我无法使用我的 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运行了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 错误消息。看起来 hudson 在实际使用 pam 进行身份验证之前抛出了异常。红帽企业 Linux WS 第 4 版(Nahant 更新 8)

4

3 回答 3

5

在调试了 hudson 用于 PAM 安全领域的 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 是我的情况下的文件
于 2011-01-18T08:05:11.280 回答
3

In my case, ubuntu 10.04 Ihad to use ssh instead of sshd for the Service Name

于 2011-03-30T08:08:30.283 回答
0

我已经为这个问题苦苦挣扎了好几个小时。最后对我有用的是: 1. 将 'hudson' 用户添加到 root 和影子组 2. 安装 sshd(在 /etc/pam.d 中缺失)。3.设置PAM服务登录。

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

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

于 2015-04-08T05:21:06.257 回答