【问题标题】:Secure passwords with jenkins on an untrusted hosting provider在不受信任的托管服务提供商上使用 jenkins 保护密码
【发布时间】:2018-08-31 16:03:13
【问题描述】:

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

我一直在阅读Credentials Plugin - 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 或登录时提供密码?例如将所有加密的内容存储在驱动器上并将密码存储在内存中?

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

【问题讨论】:

    标签: security jenkins hosting


    【解决方案1】:

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

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

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

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

    将密码添加到 /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 启动时可用。密码在 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. 密码以纯文本形式作为整个 jenkins 的 ENV 变量提供。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      • 2020-05-03
      • 2016-01-26
      • 1970-01-01
      • 2021-10-12
      • 2016-11-14
      相关资源
      最近更新 更多