Безопасные пароли с помощью jenkins на ненадежном хостинг-провайдере - PullRequest
0 голосов
/ 30 августа 2018

У меня есть установка jenkins на хостинг-провайдере, которому я не доверяю. Как я могу защитить его от хостинг-провайдера?

Я читал о плагине Credentials - 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, поэтому я не могу защитить пароли с помощью credentials-plugin. По крайней мере, так я это понимаю.

Мой вопрос: что я должен сделать, чтобы хранить данные на диске в зашифрованном виде и иметь пароль, предоставляемый, например, при запуске jenkins или при входе в систему? Храните все зашифрованное на диске и храните пароль в памяти, например?

«сменить хостинг-провайдера, поскольку ты им не доверяешь», это не тот ответ, который мне помог бы. Обычно я считаю, что все, что хранится у хостинг-провайдеров, должно быть зашифровано, но это обсуждение также в другой раз.

1 Ответ

0 голосов
/ 31 августа 2018

Вот мой взгляд на проблему на данный момент. Он имеет определенные ограничения, но, по крайней мере, пароль не хранится в секретах и ​​не доступен для хостинг-провайдера Буду очень рад комментариям по улучшению. Опять же, я действительно хочу сделать пароль доступным для определенных сборок, но хранить его в недоступном для людей с доступом к файловой системе и машине

Некоторые задания в jenkins зависят от пароля, хранящегося в переменных ENV. Дженкинс должен продолжать работать без этого пароля, только конкретная сборка должна дать сбой, если пароли не предоставлены. Это, например, сборки резервных копий БД.

Пароль может храниться в секретах / секретах, но это означает, что хостинг-провайдер будет иметь доступ к этим паролям. Это не желательно. При запуске jenkins пароли предоставляются в виде переменных ENV.

Чтобы сделать это, их нужно добавить в / etc / default / jenkins и добавить к аргументам deamon в /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 при запуске. Пароль отображается на вкладке SystemInfo в jenkins как переменная 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 для всего jenkins.

...