Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 在不受信任的主机提供商上使用jenkins保护密码_Security_Jenkins_Hosting - Fatal编程技术网

Security 在不受信任的主机提供商上使用jenkins保护密码

Security 在不受信任的主机提供商上使用jenkins保护密码,security,jenkins,hosting,Security,Jenkins,Hosting,我在一个我不信任的主机提供商上安装了jenkins。如何针对主机提供商保护它 我一直在读关于凭证插件的文章,这里有一句话 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。如何针对主机提供商保护它

我一直在读关于凭证插件的文章,这里有一句话

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处理,并通过以下方式添加到守护进程参数中:

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在启动时可以使用特殊的密码。密码在jenkins的SystemInfo选项卡中作为一个ENV变量可见,可由jenkins构建作业使用

不希望将密码存储在/etc/default/jenkins中。这使得托管提供商可以再次使用它

这就是为什么我实现了以下脚本 1.询问密码 2.将特殊密码添加到/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.密码以纯文本形式作为整个jenkins的ENV变量提供