首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Jenkins系列之三:设置Jenkins服务器和应用服务器之间免密登陆,Jenkins用户管理与基于角色的用户授权策略

系统环境与版本描述:

Jenkins Version:2.150.1 (截止2019-01-16最新的LTS版本)

系统环境:Vmware虚拟机中使用Centos 7镜像

版本控制系统:Git

代码仓库:Github

01

设置Jenkins服务器和应用服务器免密登陆,提升服务器的安全性

我们先看下通过密码的方式的设置,依次选择Manage Jenkins->Configure System,找到Publish over SSH, 在Jenkins SSH Key设置各个服务器使用的公共设置,比如密码Passphrase,key的路径Path to key(私钥路径)或者key(私钥),这里我们所有服务器的root账户的密码都是000000,所以这里填入密码即可。

实际生产环境中各个服务器的密码是不同的。只需要点击Advanced...,出现更多选项时选择Use password authentication,or use a different key,然后再Passphrase/Password中输入服务器密码即可。这块的配置都是各自SSH服务器的私有配置

实际开发过程中,暴露服务器密码是很不好的行为,我们通常会使用SSH免密登陆的方式,也就是公钥认证的方式

首先要查看服务器$/.ssh目录下是否有两个文件:id_rsa.pub和id_rsa。前者是当前服务器当前用户的公钥,后者是当前服务器当前用户的私钥,如果没有则使用下面步骤来生成密钥对。

ssh-keygen -t rsa 或者 ssh-keygen (默认就是RSA加密算法)

使用上面指令,遇到提示,回车就可以,我们看到在/root/.ssh下生成了id_rsa.pub和id_rsa文件

然后使用ssh-copy-id $@$来将本地主机的公钥复制到远程主机的authorized_keys文件上。

或者下面这个,取决于是否使用过ssh登陆过目标服务器

接下来我们直接使用ssh登陆,可以看到不再需要输入密码,就可以直接登陆了,并且在远程服务器的/root/.ssh目录下生成了authorized_keys文件。并且远程服务器上该文件内容就是本机服务器的公钥,和本机/root/.ssh/id_rsa.pub内容是相同的。

接下配置Jenkins连接的SSH服务器配置:依次选择Manage Jenkins->Configure System,找到Publish over SSH, 在Jenkins SSH Key设置各个服务器使用的公共设置,我们设置Path to key为Jenkins服务器上私钥的路径即可,建议使用~/.ssh/id_rsa,标识当前登陆用户主目录下的路径,可以应对使用任何账户登陆的情况,(Key是私钥)设置完成后可以点击Test Configuration进行测试。由于不再使用密码的方式进行连接,所以要把Use password authentication, or use a different key前面的复选框去掉。同时对于本机仍然要使用密码(实际情况很少在本机部署Jenkins服务器的同时也作为应用服务器使用)

02

Jenkins用户管理与Jenkins提供的授权策略和基于角色的授权策略

依次选择Manage Jenkins->Manage Users,进入用户管理界面

点击左侧导航栏中的Create User即可进行用户的创建

创建多个用户,创建完成后可以看到用户列表如下:点击右侧小齿轮可以修改用户信息

通常,这些用户信息都保存在Jenkins内置数据库中,位置$/users,我们查看下该目录,可以发现Jenkins内置数据库是基于XML来记录用户信息的,所以可以很方便的迁移

我们先看下Jenkins提供的安全策略,依次选择Manage Jenkins->Configure Global Security,默认是勾选Enable security启用安全的,Secutity Realm安全域表示Jenkins从哪里验证用户,默认是Jenkins内置的用户数据库($/users目录并且是基于XML存储数据),下面有个选项,Allow users to sign up是否允许用户注册,可以根据需要勾选,一般情况下是不允许用户自行注册的。Authorization授权策略表示用户登陆后可以做什么,默认是Logged-in users can do anything登陆用户可以做任何事,有个选项是Allow anonymous read access是否允许匿名用户只读访问权限,当然还有角色和项目矩阵授权策略。通常默认的授权权限对小型团队比较合适,开发人员或者项目管理人员可以构建和修改任何作业,而测试人员和项目经理可以查看作业构建状态,甚至一些构建作业就是为了显示自动验收测试结果或代码度量。

同时Jenkins提供的基于矩阵的安全策略在小型团队中也比较适合,管理员账户拥有所有权限,Authenticated Users授权用户拥有查看执行Job的权限,Anonymous Users匿名用户不能查看,或者根据需要来进行其他设置,需要注意要想查看信息必须勾选Overall的Read权限,该权限提供了Jenkins所有可视化界面的只读访问,如果不设置则其他的都不能访问。点击Add user or group...可以进一步添加用户和用户组,如果用户或用户组不存在则就会出现test的情况,有中横线。

Jenkins提供的基于项目的授权矩阵策略Project-based Matrix Authorization Strategy可以将用户和项目进行绑定,不过需要在在配置Job时勾选Enable project-base security里面再次进行配置,配置侵入性高,用起来不是很方便,所以仍然推荐使用。

那么对于中大型团队最优的授权策略是建立角色,角色和Job绑定,同时用户又和角色进行绑定,那么就要使用一种插件Role-based Authorization Strategy,依次选择Manage Jenkins->Manage Plugins,切换Available选项卡,搜索role,找到Role-based Authorization Strategy插件安装即可。

下载安装完成后依次选择Manage Jenkins->Configure Global Security,我们发现在Authorization中多出了Role-Based Strategy选项,勾选保存

勾选保存后在Manage Jenkins里面可以看到Manage and Assign Roles选项(不勾选该选项不会出现)点击该选项。

点击Manage and Assign Roles选项,可以看到两个按钮,分别是管理角色和分配角色,在这里进行相应配置即可。

点击Manage Roles可以进行角色的管理,角色分为全局角色和项目角色,全局角色应用于所有项目以及系统级管理等访问权限,全局角色配置和上面提到的Jenkins提供的授权矩阵策略是类似的。而项目角色是对项目组进行角色授权控制,项目组包含哪些项目是通过Pattern来标识的(正则表达式),项目组的划分可以根据业务线名称、项目名称、线上环境(测试、预上线、上线)等等,这就要求Job命名时要遵循一定的规范。(Pattern匹配的时Job的名字)。尤其注意一点全局角色会覆盖项目角色,所以这里配置管理者manager和成员member都不要配置Job的Read权限,如果配置则配置下面配置项目角色的Pattern失效,所有角色都能看到所有Job(It should be noted that the Global Rolesoverrideanything you specify in the Project Roles. That is, when you give a role the right to Job-Read in the Global Roles, then this role is allowed to readallJobs, no matter what you specify in the Project Roles.)

这里我们分配三个全局角色,对所有项目生效的,admin管理所有权限,manager和member只拥有对Jenkins可视化界面的只读访问。这里不要配置manager和member对Job的操作权限,一旦设置,那将对所有Job生效。具体manager对Job的权限在项目角色中配置,这样Pattern定义的Job的规则才生效。

Assign Roles用于绑定用户和全局角色、项目角色,这里我们设置admin系统管理员的全局角色,所以拥有所有权限,curtis是manager权限,拥有对所有项目Job的权限,包括浏览、配置、删除、等等。curtis1、curtis2、curtis3是member权限,绑定项目,curtis1可以管理所有以test开头的Job,可以读、配置、删除、运行等等,而curtis2也是只能操作test开头的Job,只能读、运行、取消

我们准备如下示例Job,进行各用户测试

curtis:manager全局角色,管理所有Job,无法进行系统级的配置,但是可以管理所有Job的配置、运行、删除、取消等等权限

curtis1:member全局角色,Test Manager项目管理角色,管理所有test开头的Job,可以管理所有Job的配置、运行、删除、取消等等权限

curtis2:member项目角色,Test Member项目成员角色,管理所有test开头的Job,但是只能查看、运行、取消

curtis3:member全局角色,OnManager项目管理角色,管理所有test开头的Job,可以管理所有Job的配置、运行、删除、取消等等权限

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190203G09EHP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券