Jenkins的授权和访问控制
一 Jenkins的授权和访问控制
默认地Jenkins不包含任何的安全检查,任何人可以修改Jenkins设置,job和启动build等。显然地在大规模的公司需要多个部门一起协调工作的时候,没有任何安全检查会带来很多的问题。 我们可以通过以下2方面来增强Jenkins的安全:
1) Security Realm,用来决定用户名和密码,且指定用户属于哪个组;
2) Authorization Strategy,用来决定用户对那些资源有访问权限;
在Manage Jenkins -> Configure System -> Enable Security 下可以看到可以使用多种方式来增强Jenkins的授权和访问控制。
二 创建管理员账号+匿名只读
简单地设置一个管理员账号,用来管理jenkins设置,修改job和执行build等。其他的匿名访问的用户将只有只读的权限,不能修改Jenkins的设置,不能修改job,且不能运行build,但是可以访问build的结构,查看build的log等。
1)需要对Jenkins增加如下的启动参数来创建管理员账号:
java -jar jenkins.war --argumentsRealm.passwd.user=password --argumentsRealm.roles.user=admin
例如设置管理员用户为jenkins且密码为swordfish,如下:
java -jar jenkins.war --argumentsRealm.passwd.jenkins=swordfish --argumentsRealm.roles.jenkins=admin
2)在启动后需要在Manage Jenkins -> Configure System来选择enable security,然后选择对Security Realm选择Delegate to servlet container,对Authorization选择Legacy Mode。
3)然后可以在右上角点击login或者 http://yourhost/jenkins/loginEntry来登录,登录后此时你用户管理员权限,可以执行任何的操作。执行完操作后可以选择logout。
4) 对developers增加rebuild的权限。使用管理员登录对需要developer rebuild的job,选择Trigger builds remotely,且设置Authentication Token,例如设置为devbuild,然后developers可以访问http://jenkinsHost/job/project/build?token=token 来启动build。
其中Project为你需要启动build的job。
其中token为你设置的Authentication Token。
如果你有webserver,你可以创建如下的webpage来让developers来启动build:
<h1>Jenkins Force Build Page</h1>
<ul>
<li>
<a href="http://jenkins:8080/job/FOO/build?token=build">Force build of Project FOO on Jenkins</a>
</li>
</ul>
三 使用Jenkins的数据库管理用户且设置用户的访问权限
1)在Manage Jenkins -> Configure System -> Enable Security下为Security Realm选择Jenkins's own user database,且确保Allow users to sign up选中,为Authentication选择Matrix-based security。如下:
2)接着在主页上signup创建第一个管理员账号jenkins如下:
3)除了第一个账号以后signup的账号将为只读账号需要管理员分配权限。例如你可以signup来创建dev账号,然后分配权限使得dev可以启动job的build。如下:
注意:
在%JENKINS_HOME%\config.xml中可以查看和修改所有用户的权限设置,但是修改后需要重新启动Jenkins。
参考:
https://wiki.jenkins-ci.org/display/JENKINS/Quick+and+Simple+Security
https://wiki.jenkins-ci.org/display/JENKINS/Standard+Security+Setup