У меня есть следующая проблема на моей CentOS VM.

В виртуальной машине я запускаю процесс gitlab-runner от имени пользователя root - см. Мой сервис systemd.

root@runner1:~$ cat /etc/systemd/system/gitlab-runner.service | sed 's/^/    /'
[Unit]
Description=GitLab Runner
After=syslog.target network.target
ConditionFileIsExecutable=/usr/lib/gitlab-runner/gitlab-runner

[Service]
StartLimitInterval=5
StartLimitBurst=10
ExecStart=/usr/lib/gitlab-runner/gitlab-runner "run" "--working-directory" "/home/gitlab-runner/builds/" "--config" "/etc/gitlab-runner/config.toml" "--service" "gitlab-runner" "--syslog" "--user" "root"

Restart=always
RestartSec=120

[Install]
WantedBy=multi-user.target

Для некоторых сборок требуются права суперпользователя для создания или удаления файлов в определенных местах. Теперь gitlab-runner всегда выдает ошибки. Причина в том, что процесс gitlab-runner, хотя и запущен с правами root, выполняет подпроцессы, работающие как пользователь gitlab-runner. Вот фрагмент моего файла журнала конвейера

$ id -u
997
$ whoami
gitlab-runner
$ rm -rf /tmp/*
rm: cannot remove ‘/tmp/ks-script-1yMUS_’: Operation not permitted
rm: cannot remove ‘/tmp/ks-script-jNgpQ5’: Operation not permitted
rm: cannot remove ‘/tmp/systemd-private-1838297d1ab047a99c3628869e77fd18-chronyd.service-z1RO0u’: Operation not permitted
rm: cannot remove ‘/tmp/tmp.THBemf0N5O’: Operation not permitted
rm: cannot remove ‘/tmp/yum.log’: Operation not permitted

Как я могу запретить gitlab-runner запускать подпроцессы под другим пользователем?

Volker

1 ответ1

0

Я нашел решение, если gitlab-runner выполняется от имени пользователя root, рабочая область не должна находиться в другом домашнем каталоге.

Теперь я изменил систему следующим образом:

[Unit]
Description=GitLab Runner
After=syslog.target network.target
ConditionFileIsExecutable=/usr/lib/gitlab-runner/gitlab-runner

[Service]
StartLimitInterval=5
StartLimitBurst=10
ExecStart=/usr/lib/gitlab-runner/gitlab-runner "run" "--working-directory" "/root/builds/" "--config" "/etc/gitlab-runner/config.toml" "--service" "gitlab-runner" "--syslog" "--user" "root"

Restart=always
RestartSec=120

[Install]
WantedBy=multi-user.target

Теперь процесс, наконец, запускается как настоящий пользователь. Разработчикам было бы полезно дать хотя бы некоторую информацию, почему служба работает не как root, а как gitlab-runner.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .