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

时间:2018-08-30 20:49:39

标签: security jenkins hosting

我在不信任的托管服务提供商上安装了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或登录时,我应该怎么做才能将凭据存储在加密的驱动器上并提供密码?将所有加密内容存储在驱动器上,并在内存中输入密码吗?

“因为您不信任托管服务提供商而改变了托管服务提供商”并不是那种对我有帮助的答案。我通常认为存储在托管提供程序上的所有内容都应保持加密,但是讨论也将是另一回事。

1 个答案:

答案 0 :(得分:0)

这是我现在要解决的问题。它具有一定的局限性,但至少密码不是秘密存储的,对于托管服务提供商也不可用。我真的很欢迎提出改进意见。再次,我真正想要的是使密码可用于某些内部版本,但将此密码存储在对文件系统和计算机具有访问权限的人无法访问的地方

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

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

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

使用/ p>将密码添加到/ 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

这使jenkins可以使用SPECIAL_PASSWORD。密码在jenkins的SystemInfo选项卡中作为ENV变量可见,并且可以由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变量提供。