我在 Ubuntu 18.04 服务器上运行 Jenkins(当前版本为 v2.134,始终从 Jenkins Debian/Ubuntu repo 更新)。它配置为使用插件pwauth
对系统帐户进行身份验证。
这是插件的配置部分pwauth
(通过更改 GUI 中的设置生成):
<securityRealm class="hudson.plugins.pwauth.PWauthSecurityRealm" plugin="[email protected]">
<pwauthPath>/usr/sbin/pwauth</pwauthPath>
<whitelist></whitelist>
<enableParamAuth>false</enableParamAuth>
<idPath>/usr/bin/id</idPath>
<groupsPath>/usr/bin/groups</groupsPath>
<catPath>/bin/cat</catPath>
<grepPath>/bin/grep</grepPath>
</securityRealm>
它使用矩阵授权策略,名为 的组jenkinsadmins
具有完全权限(下面的配置也是通过更改 GUI 中的设置生成的)。为了允许用户登录 Jenkins,我们只需将他们添加到这个 Unix 组中:
<authorizationStrategy class="hudson.security.GlobalMatrixAuthorizationStrategy">
<permission>com.cloudbees.plugins.credentials.CredentialsProvider.Create:jenkinsadmins</permission>
<permission>com.cloudbees.plugins.credentials.CredentialsProvider.Delete:jenkinsadmins</permission>
<permission>com.cloudbees.plugins.credentials.CredentialsProvider.ManageDomains:jenkinsadmins</permission>
<permission>com.cloudbees.plugins.credentials.CredentialsProvider.Update:jenkinsadmins</permission>
<permission>com.cloudbees.plugins.credentials.CredentialsProvider.View:jenkinsadmins</permission>
<permission>hudson.model.Computer.Build:jenkinsadmins</permission>
<permission>hudson.model.Computer.Configure:jenkinsadmins</permission>
<permission>hudson.model.Computer.Connect:jenkinsadmins</permission>
<permission>hudson.model.Computer.Create:jenkinsadmins</permission>
<permission>hudson.model.Computer.Delete:jenkinsadmins</permission>
<permission>hudson.model.Computer.Disconnect:jenkinsadmins</permission>
<permission>hudson.model.Hudson.Administer:jenkinsadmins</permission>
<permission>hudson.model.Hudson.Read:jenkinsadmins</permission>
<permission>hudson.model.Item.Build:jenkinsadmins</permission>
<permission>hudson.model.Item.Cancel:jenkinsadmins</permission>
<permission>hudson.model.Item.Configure:jenkinsadmins</permission>
<permission>hudson.model.Item.Create:jenkinsadmins</permission>
<permission>hudson.model.Item.Delete:jenkinsadmins</permission>
<permission>hudson.model.Item.Discover:jenkinsadmins</permission>
<permission>hudson.model.Item.Move:jenkinsadmins</permission>
<permission>hudson.model.Item.Read:jenkinsadmins</permission>
<permission>hudson.model.Item.ViewStatus:anonymous</permission>
<permission>hudson.model.Item.ViewStatus:jenkinsadmins</permission>
<permission>hudson.model.Item.Workspace:jenkinsadmins</permission>
<permission>hudson.model.Run.Delete:jenkinsadmins</permission>
<permission>hudson.model.Run.Update:jenkinsadmins</permission>
<permission>hudson.model.View.Configure:jenkinsadmins</permission>
<permission>hudson.model.View.Create:jenkinsadmins</permission>
<permission>hudson.model.View.Delete:jenkinsadmins</permission>
<permission>hudson.model.View.Read:jenkinsadmins</permission>
<permission>hudson.scm.SCM.Tag:jenkinsadmins</permission>
<permission>org.jenkins.ci.plugins.jobimport.JobImportAction.JobImport:jenkinsadmins</permission>
</authorizationStrategy>
问题是,每次我重新启动 Jenkins(包括服务器重启后、Jenkins 更新后或更改插件后自动重新启动)时,我都无法再记录它 - Jenkins 告诉我“用户名或密码无效”。
但是,我知道这种配置实际上是有效的,因为我可以进入config.xml
并更改<useSecurity>
为false
禁用所有登录要求(并重新启动),然后返回设置并重新应用这些设置,在这种情况下它会立即提示我登录并且我的用户名和密码被接受!
我检查了日志,没有发现任何相关内容。
我也知道它pwauth
本身运行良好,因为我可以以 Jenkins 用户身份登录到 shell 并手动运行pwauth
,而且它可以按预期工作。
我如何才能弄清楚为什么这种配置似乎只有在服务器重新启动后才有效?
答案1
我在使用较新的 v2.263.4 时遇到了同样的问题。我通过在默认预期位置 /usr/local/bin/pwauth 创建指向 pwauth 的符号链接解决了这个问题。似乎在重新启动时,Jenkins 会在出厂默认路径中搜索 pwauth,而不是在自定义用户指定的路径中搜索。这似乎是一个错误。
答案2
我再次测试,从 Jenkins v2.202 开始,它运行正常。我没有更改任何我所知道的设置,也没有在最近几个版本的更改日志中看到任何内容,但可能是有一个错误被意外修复了。