10

这似乎是一个显而易见的问题,但我从高处到低处都找不到答案。情况如下:

  1. 我在公共 Internet 上运行 Jenkins 持续集成服务器,(受信任的)志愿者在 Windows 和 Linux 机器上运行从属服务器
  2. 我们正在使用 JNLP(Web 启动)doodad 启动从属设备以避免防火墙问题和设置/调试 ssh
  3. 服务器设置有基于矩阵的安全性

问题是,我可以找到关于安全性如何与 JNLP 一起工作的零信息。如果授予任何匿名读取权限,那么世界上的任何人都可以下载 slave.jar 并在我的服务器上的(容易猜到的)URLS 访问 jnlp 文件,并作为从站连接。

我发现如果我撤销所有匿名访问,jnlp 文件会被阻止,但 slave.jar 仍然可以访问。

jnlp 文件中似乎没有什么特别安全的东西,除了一个长的十六进制数字。这个设置是安全的还是我必须做的其他事情?

如果访问者可以在不登录的情况下看到最近的构建,那就太好了,但是如果我再次授予匿名读取权限,任何人都可以访问 jnlp 文件。

4

2 回答 2

3

如果授予任何匿名读取权限,那么世界上的任何人都可以下载 slave.jar 并在我的服务器上的(容易猜到的)URLS 访问 jnlp 文件,并作为从站连接。

事实证明,这实际上是 Jenkins 中的一个严重安全漏洞:

https://wiki.jenkins-ci.org/display/SECURITY/Jenkins+Security+Advisory+2013-01-04

在回答我的问题时,似乎最好的方法是禁用所有匿名读取访问。

于 2013-01-09T22:18:54.110 回答
1

对此 jenkins 错误的评论看来,这种行为(允许任何具有读取权限的人查看 jnlp 文件)在修复安全漏洞的过程中发生了变化,您现在可以限制特定用户对 jnlp 文件的访问。

我也找不到有关当前行为的任何文档,但可以通过以下方式获得一些线索

  1. 撤销“anynmous”的所有权限
  2. 尝试使用 wget 或类似工具在不提供任何凭据的情况下下载 jnlp 文件

第 2 步将给出一个“403 禁止”响应,其中包含类似

Authentication required
<!--
You are authenticated as: anonymous
Groups that you are in:

Permission you need to have (but didn't): hudson.model.Computer.Connect
 ... which is implied by: hudson.model.Computer.Disconnect
 ... which is implied by: hudson.model.Hudson.Administer
-->

响应还包含一个 javascript 重定向,因此您需要使用 wget 或其他一些非启用 javascript 的方法才能看到它。

通过反复试验,我发现“hudson.model.Computer.Connect”似乎映射到 Jenkins UI 中的“Slave Connect”权限。

于 2014-03-13T11:38:48.307 回答