Jenkins - сборка образа докера - предотвращение просмотра файлов, принадлежащих root - PullRequest
0 голосов
/ 06 июня 2018

Какие есть варианты защиты подчиненных узлов Jenkins, имеющих демон docker?Кто-то может запустить Docker-контейнер и получить доступ к файлам, принадлежащим пользователю root.

Среда и сведения о проблеме:

  • Jenkins
  • Демон Docker доступен на подчиненных устройствах Jenkins
  • Агент Jenkins запускается как пользователь «build»
  • Сборка пользователя добавлена ​​в группу «docker», чтобы задания могли создавать и запускать контейнеры
  • Мы рассматриваем возможность использования конвейера Docker https://jenkins.io/doc/book/pipeline/docker/

Проблема:

  • Пользователь может подключить корневой каталог сервера как том докера
  • Они могут выполнить команду типа «rm -rf / hostroot / * ”или распечатайте содержимое секретного файла, принадлежащего root.
  • Параметры пары:
    • Опция 1 : используйте аргумент –user длязапускать команды от имени конкретного пользователя, но поскольку Jenkinsfile управляется командой разработчиков, это не может быть строго выполнено
    • Опция 2 : включить пространство имен пользователя в демоне Docker (может бытьнекоторые проблемы с разрешениями - espособенно в папке рабочей области, но некоторые обходные пути могут быть на месте) Используете ли вы пространство имен пользователя?
    • Опция 3 : сборка с использованием AWS Fargate (нужно немного разобраться в этом) -поэтому образ докера не построен на подчиненных узлах Jenkins, и сборка не повлияет на файлы на узлах

Пример:

pipeline {
    agent {
        docker {
            image 'maven:3-alpine'
            args '-v /:/hostroot'
             (args '—user 500 ' --> since Jenkinsfile is managed by development team, ensuring everyone puts this parameter is tricky… someone could forget to put it)
        }
    }
    stages {
        stage('Build') {
            steps {
                sh 'rm -rf /hostroot/*' --> delete the entire filesystem!
               sh 'cat /path/to/secret/file' --> see some files owned by root!

            }
        }
    }
}

Aподобный вопрос был опубликован здесь, но ему уже 2 года, и он не имеет хорошего ответа: Создание образов Docker с помощью Jenkins, который запускается внутри контейнера Docker

...