Jenkins 作为一个开放的、可定制的平台,即使在默认状态下也提供了不错的安全性。但是鉴于 Jenkins 连接了许多行业工具,因此也存在一定安全隐患。本篇文章将会介绍一些方法和工具,来确保 Jenkins 实例的安全和可靠,同时也给使用 Jenkins 的用户提供安全保障。
保持更新

软件漏洞随时可能暴露,因此软件供应商需要不断更新他们的应用程序来修复问题或者添加新功能,同时也消除安全漏洞。Jenkins 有一个自带的安全建议页面,可以让用户了解平台上的漏洞。总之,保持更新(包括插件)是一个避免安全风险的不错选择。

要检查 Jenkins 中的更新可以进行以下步骤:
  1. 从菜单中单击 Manage Jenkins 
  2. Manage Jenkins 页面将在顶部提示是否有新版本可用。单击 Or Upgrade Automatically 按钮立即升级。如果不想自动升级,也可以只下载最新版本,并且任何自定时间进行升级即可。如果对升级后不满意,只需要单击 Downgrade 即可
要更新 Jenkins 插件请参考以下步骤:
  1. 从菜单中单击Manage Jenkins 
  2. 点击 Manage Plugins
  3. 确保在 Updates 选项上,勾选要安装的更新并单击 Download now and install after restart
  4. 重启 Jenkins 以完成更新

谨慎更改 Jenkins 默认安全设置


Jenkins 在安装时启用其大部分安全功能来尽可能保障使用安全。鉴于每个用户使用 Jenkins 的习惯和方式不同,因此需要根据使用实例来进行配置。Jenkins 提供了有关用户可以查看的重要功能的详细文档,请参阅 Jenkins 官方文档(见参考链接)获取安全建议。需要注意的是,任何安全配置需要在仔细考虑后更改,如果有条件的话可以与网络安全专业技术人员交流后再进行配置。

避免在控制器上构建


Jenkins 提供了一个内置节点,方便用户可以尽快运行测试看看它是否适合。但是在单个实例上运行的构建可以访问用户操作系统的文件系统。出于这个原因,Jenkins 建议用户在“代理”上运行作业(在可扩展的设置也是类似的操作,使用动态构建代理在 Jenkins 中自动扩展)。代理是替代控制器用来运行虚拟的 Jenkins 实例,在使用代理时,用户可以有效阻止控制器运行构建从而限制对可能造成伤害的文件的访问。

要停止控制器运行构建可以执行以下步骤:
  1. 从菜单中单击 Manage Jenkins 
  2. 单击 Manage Nodes and Clouds
  3. 单击 Built-In Node 右侧的图标。
  4. 用户有两个选项来防止在控制器上构建:
  • 如果不想在控制器上构建,请将 Number of executors 更改为0 。
  • 如果想在需要时在控制器上构建,请从 Usage 下拉列表中选择 Only build jobs with label expressions matching this node
访问控制

除了避免外在的安全威胁,也需要从内部保护 Jenkins 的使用环境。如果出现以下情况,安全威胁将大大增加:

  • 使用单个管理员帐户运行 Jenkins

  • 每个人都可以访问所有内容

  • 每个人都拥有更改内容的权限

为了避免上述情况引起的安全风险,以下是管理用户访问权限的一些建议。
1. 给每个 Jenkins 用户一个账号
为了帮助跟踪用户在做什么,请为使用 Jenkins 实例的任何人创建个人用户帐户。通过这种方式,可以查看所有活动以及谁做了什么。要创建额外用户,可以执行以下步骤:
  1. 从菜单中单击 Manage Jenkins 
  2. 向下并选择 Manage Users
  3. 单击左侧的 Create User
  4. 填写所有字段并点击 Create User
建议使用矩阵授权策略插件在更精细的级别上管理用户对 Jenkins 的访问。通过使用此插件可以:
  • 限制用户的访问权限,以便他们只能查看和管理他们所属项目的构建
  • 授予项目经理只读访问权限,以便他们查看构建的进度
以下是安装插件的参考步骤:
  1. 单击左侧菜单中的 Manage Jenkins
  2. 点击 Manage Plugins
  3. 单击 Available 选项并开始输入 Matrix Authorization
  4. 勾选插件左侧的框然后单击 Install without restart
使用插件设置权限:
  1. 单击菜单中的管理 Jenkins。
  2. 单击配置全局安全性。
  3. 单击以下任一单选按钮:
    Matrix-based security——允许用户管理全局用户和组权限。
    Project-based Matrix Authorization Strategy——允许用户在项目级别管理用户和组权限。
  4. 完成选择后,使用按钮添加用户或组,并使用表中的复选框选择他们的访问级别。完成后单击保存。
2. 其他用户访问插件
如果用户正在使用其他系统进行访问管理,也许可以使用这些系统对其 Jenkins 用户进行身份验证。例如微软的 Active Directory 和 OpenID 都有插件,可以使用户免于在多个位置管理访问。
此外,还建议关注文件夹插件和基于文件夹的授权策略插件(Folder-based Authorization Strategy plugin)。文件夹插件允许在可嵌套文件夹中根据需要对任务进行分组,此插件可让用户对共享安全需求的作业进行分组,从而帮助对访问行为密切关注。而基于文件夹的授权策略插件通过让用户使用角色设置文件夹访问权限,从而来扩展和提高文件夹的安全性。
安全存储凭据

凭据绑定插件是加密和安全存储连接 Jenkins 与其他服务的凭据的最佳选择。Jenkins 官方在用户第一次安装 Jenkins 时也建议安装此插件。该插件允许用户存储和重复使用所有类型的身份验证方法,例如:
  • 用户名和密码

  • SSH 用户名和私钥

  • 机密文件

  • 机密文本

  • 证书

参考链接

https://www.jenkins.io/doc/book/security/

超详细的 Jenkins 安全tips的更多相关文章

  1. K8s 超详细总结

    一个目标:容器操作:两地三中心:四层服务发现:五种Pod共享资源:六个CNI常用插件:七层负载均衡:八种隔离维度:九个网络模型原则:十类IP地址:百级产品线:千级物理机:万级容器:相如无亿,K8s有亿 ...

  2. 【转】(超详细)jsp与servlet之间页面跳转及参数传递实例

    初步学习JavaEE,对其中jsp与Servlet之间的传值没弄清楚,查看网上资料,发现一篇超详细的文章,收获大大,特此记录下来.具体链接:http://blog.csdn.net/ssy_shand ...

  3. 超强、超详细Redis数据库入门教程

    这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么2.redis的作者何许人也3.谁在使用red ...

  4. Github上传代码菜鸟超详细教程【转】

    最近需要将课设代码上传到Github上,之前只是用来fork别人的代码. 这篇文章写得是windows下的使用方法. 第一步:创建Github新账户 第二步:新建仓库 第三部:填写名称,简介(可选), ...

  5. WebRTC VideoEngine超详细教程(三)——集成X264编码和ffmpeg解码

    转自:http://blog.csdn.net/nonmarking/article/details/47958395 本系列目前共三篇文章,后续还会更新 WebRTC VideoEngine超详细教 ...

  6. [转]超详细图解:自己架设NuGet服务器

    本文转自:http://diaosbook.com/Post/2012/12/15/setup-private-nuget-server 超详细图解:自己架设NuGet服务器 汪宇杰          ...

  7. GitHub超详细图文攻略

    GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git 分类: 转载2014-03-25 21:10 10641人阅读 评论(2) 收藏 举报 GitHubbr ...

  8. 超详细的Xcode代码格式化教程,可自定义样式。

    超详细的Xcode代码格式化教程,可自定义样式. 为什么要格式化代码 当团队内有多人开发的时候,每个人写的代码格式都有自己的喜好,也可能会忙着写代码而忽略了格式的问题.在之前,我们可能会写完代码后,再 ...

  9. Struts2+Spring4+Hibernate4整合超详细教程

    Struts2.Spring4.Hibernate4整合 超详细教程 Struts2.Spring4.Hibernate4整合实例-下载 项目目的: 整合使用最新版本的三大框架(即Struts2.Sp ...

  10. 超全超详细的HTTP状态码大全(推荐抓包工具HTTP Analyzer V6.5.3)

    超全超详细的HTTP状态码大全 本部分余下的内容会详细地介绍 HTTP 1.1中的状态码.这些状态码被分为五大类: 100-199 用于指定客户端应相应的某些动作. 200-299 用于表示请求成功. ...

随机推荐

  1. 通过.NET Core CLI 来创建并运行ASP.NET CORE应用程序

    说明: .NET Core 命令行接口 (CLI) 工具是用于开发.生成.运行和发布 .NET Core 应用程序的跨平台工具链. .NET Core CLI 包含在 .NET Core SDK 中. ...

  2. 标子查询优化和改写SQL案例

    京华开发一哥们找我优化条报表SQL,反馈执行时间很慢需要 18s 才能出结果,安排. -- 原SQL SELECT 2 AS TYPE, to_char(a."create_time&quo ...

  3. Redis系列之常见数据类型应用场景

    目录 String 简单介绍 常见命令 应用场景 Hash 简单介绍 常见命令 应用场景 List 简单介绍 常见命令 应用场景 Set 简单介绍 常见命令 应用场景 Sorted Set(Zset) ...

  4. Android 线性布局和相对布局

    LinearLayout 线性布局 orientation 排列方式:vertical 竖直 horizontal 水平(默认值) layout_weight 权重:将子视图以对应的权重分配其空间大小 ...

  5. 2020ICPC上海 C题(数位dp, 记忆化搜索)

    先复习了下之前做的数位DP又做了道新题才看的这道题,对我来说还是一种新类型,涉及到非线性计算,之前做的都是形如 \(dp[x]-dp[y]\)这样的只用处理一个上限做下差即可.一开始想分别枚举 \(x ...

  6. DataGridView合并单元格,重绘后选中内容被覆盖的解决办法

    DataGridView合并单元格只能进行重绘,网上基本上使用的是下面的方法: 1 /// <summary> 2 /// 说明:纵向合并单元格 3 /// 参数:dgv DataGrid ...

  7. 第一行代码 Android 第三版读后感

    <第一行代码Android 第三版>是一本非常好的Android开发入门书籍.本书结合作者的丰富经验和实际案例,通过一步一步的介绍,详细地讲解了Android开发的各个方面,包括Andro ...

  8. k8s安装Dashboard出现了 pod 状态为CrashLoopBackOff

    1.问题现象 2.解决办法 (1) 先看一下pods日志信息 kubectl logs -f -n kubernetes-dashboard kubernetes-dashboard-658485d5 ...

  9. 华企盾DSC控制台+系统运维模块连接不上问题

    解决方法:把rundll32.exe进程结束之后再点系统运维模块

  10. 混合专家模型 (MoE) 详解

    随着 Mixtral 8x7B (announcement, model card) 的推出,一种称为混合专家模型 (Mixed Expert Models,简称 MoEs) 的 Transforme ...