我在 Ubuntu 18.04 服务器上运行 Jenkins(当前为 v2.134,始终从 Jenkins Debian/Ubuntu 存储库更新)。它被配置为使用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
手动运行,它可以按预期工作。
我怎样才能弄清楚为什么这个配置似乎只在服务器重新启动之前才有效?
我在使用较新的 v2.263.4 时遇到了同样的问题。我能够通过在默认预期位置创建指向 pwauth 的符号链接来解决它:/usr/local/bin/pwauth。似乎在重新启动时,Jenkins 在工厂默认路径而不是自定义用户指定的路径中搜索 pwauth。似乎是一个错误。
我再次测试,从 Jenkins v2.202 开始,它工作正常。我没有更改任何我知道的设置,并且我在最近几个版本的更改日志中看不到任何内容,但可能是有一个错误被意外修复。