在不受信任的托管服务提供商上使用 Jenkins 保护密码



我在我不信任的托管服务提供商上安装了 jenkins。我如何保护它免受托管服务提供商的影响?

我一直在阅读有关凭据插件的信息 - https://github.com/jenkinsci/credentials-plugin/blob/master/docs/user.adoc 并且有一句话

If a non-trusted user can gain access to the files in the JENKINS_HOME/secrets directory, then it is game over.

托管服务提供商可以访问JENKINS_HOME/secrets文件夹,因此我无法使用凭据插件保护密码。至少我是这样理解的。

我的问题:我应该怎么做才能将凭据存储在加密的驱动器上,并在启动 jenkins 或登录时提供密码?例如,将所有加密内容存储在驱动器上并将密码保存在内存中?

"更改托管服务提供商,因为您不信任他们"不是对我有帮助的答案。我通常认为存储在托管服务提供商上的所有内容都应该保持加密,但讨论也是另一回事。

这是我目前对这个问题的看法。它有一定的限制,但至少密码不存储在机密中,托管服务提供商无法使用。我真的欢迎对改进提出意见。同样,我真正想要的是使密码可用于某些构建,但将此密码存储在有权访问文件系统和机器的人无法访问

的地方Jenkins 的某些工作依赖于存储在 ENV 变量中的密码。Jenkins 应该在没有此密码的情况下继续工作,如果未提供密码,只有特定的构建应该失败。例如,这些是数据库备份版本。

密码可以存储在 jenkins/secrets 中,但这意味着托管服务提供商将有权访问此密码。这是不希望的。当 jenkins 启动时,密码作为 ENV 变量提供。

为此,必须将它们添加到/etc/default/jenkins中,并添加到/etc/init.d/jenkins 中的 deamon 参数中。

将密码添加到/etc/default/jenkins

SPECIAL_PASSWORD=123

密码由/etc/init.d/jenkins 处理,并通过以下方式添加到DAEMON_ARGS:

if [ -n "$SPECIAL_PASSWORD" ]; then
echo "Using SPECIAL_PASSWORD provided by /etc/default/jenkins"
DAEMON_ARGS="$DAEMON_ARGS --env=SPECIAL_PASSWORD=$SPECIAL_PASSWORD"
fi

这使得 SPECIAL_PASSWORD 在启动时可供 Jenkins 使用。密码作为 ENV 变量在 jenkins 的 SystemInfo 选项卡中可见,可供 jenkins 构建作业使用。

不需要将密码存储在/etc/default/jenkins 中。这使它再次可供托管服务提供商使用。

这就是为什么我实现了以下脚本 1. 要求输入密码 2. 将SPECIAL_PASSWORD添加到/etc/default/jenkins 3. 重启詹金斯 4. 将/etc/default/jenkins 恢复到没有密码的原始版本

#!/bin/bash
# The script requies passwords for starting jenkins and places this password
# in the jenkins env. It then restarts jenkins after which the file is returned
# to the original 
read -s -p "Enter SPECIAL_PASSWORD: " SPECIAL_PASSWORD
cp /etc/default/jenkins /etc/default/jenkins.bck
echo "SPECIAL_PASSWORD=$SPECIAL_PASSWORD" >> /etc/default/jenkins
echo "Contents of the jenkins env"
service jenkins restart
cp /etc/default/jenkins.bck /etc/default/jenkins

局限性: 1. 短时间的密码在/etc/default/jenkins 中可用。
2.密码以纯文本形式作为整个詹金斯的ENV变量提供。

最新更新