Как предотвратить присоединение или exec в контейнере Docker

9

Как запретить пользователю моего предварительно созданного док-контейнера иметь доступ к оболочке в работающем экземпляре этого контейнера? Я погуглил и прочитал все посты, которые имеют отношение к этому сценарию, и пришел без рабочего решения. Я пытаюсь запретить доступ к данному ресурсу в контейнере, ради этого запроса, скажем, его серийный номер в файле конфигурации. Я строю на образе Java: 7, который основан на образе Ubuntu .

Чтобы проверить свое решение, сделайте следующее:

  1. Создайте и запустите ваш докер-контейнер

  2. Экспортируйте свой контейнер

    экспорт докера [имя контейнера] | gzip -c> mycontainer.tar.gz

  3. Импортируйте свой контейнер во внешнюю систему

    gzip -dc mycontainer.tar.gz | импорт докера - [имя контейнера]

  4. Запустить контейнер

  5. Shell в работающий контейнер, используя любой / все из следующих методов:

    docker exec -it [имя контейнера] bash

    присоединение докера [имя контейнера]

    docker run -ti --entrypoint = / bin / bash [имя контейнера]

[имя контейнера] - это имя вашего контейнера

bash, dash и sh - все допустимые оболочки

Пол Грегуар
источник
1
Если вы пытаетесь защитить информацию внутри вашего контейнера, докер - это не та технология, которая вам нужна. Даже если вы смогли ограничить доступ к оболочке, существует множество других тривиальных способов получить доступ к файловой системе внутри контейнера.
EEAA
К сожалению, я должен использовать докер в этом случае; Я хорошо знаю, что это не идеально в этом случае.
Пол Грегуар
Эй @EEAA, не могли бы вы указать мне список этих "тривиальных средств"? Что бы вы предложили вместо докера?
Нильс Петерсон

Ответы:

5

bashСпециально для этой команды я добавил в файл .bashrc команду exitв конце файла, чтобы пользователь вошел в систему и, наконец, вышел, но пользователи все еще могут использовать shкоманду.

Хосе Роберто Гарсия Чико
источник
3

Чтобы добавить ответ Хосе, еще одно решение ...

docker exec :id -it /bin/rm -R /bin/*

Это избавляет от sh и любой полезной команды bin в linux. Я не уверен, что вы будете делать, чтобы попасть в контейнер в этот момент. Хотя я знаю, что вы можете использовать отладчик памяти для получения переменных окружения работающего контейнера, но это делает его намного более раздражающим ... Интересно, есть ли способ заблокировать эту память в кольце 0 и убрать ее? SSH доступ вообще к хосту.

Если кто-нибудь знает, как взломать это, мне было бы интересно узнать, как.

РЕДАКТИРОВАТЬ

Вы хотите использовать секреты докера, если вы защищаете конфиденциальную информацию. Проверять, выписываться:

https://docs.docker.com/engine/swarm/secrets/

Dr.Knowitall
источник
Это отлично работает для моих целей, спасибо! Хотя я считаю, что правильная команда:docker exec -it 'container-id' /bin/rm -R /bin/*
ty01
Это не работает для меня Docker version 18.09.6, build 481bc77156 . Подход@ty01 дает это сообщение об ошибке /bin/rm: cannot remove '/bin/<filename>': No such file or directoryдля всех filenameх в /bin. Ответ на@Dr. Knowitall возвращений Error: No such container: :id. Даже если я заменю idна CONTAINER_IDfrom docker ps, он все равно выдаст то же сообщение об ошибке.
edesz
0

Если информация, которую вы хотите защитить, является серийным номером, то шифрование этой информации является единственным надежным способом защиты. Вы можете выбрать различные способы шифрования секретных данных, убедитесь, что вы используете надежный ключ. Вы также можете заставить свое приложение отправлять секретные данные на ваш сервер, чтобы определить их достоверность, и, основываясь на ответах с вашего сервера, приложения могут продолжать работать или останавливать и показывать сообщения.

Короче говоря, всегда предполагайте, что ваше приложение может быть проанализировано полностью и полностью. Всегда шифруйте все секретные и важные данные, используя надежный ключ, поэтому взлом ключа займет очень много времени (предположим, что алгоритм шифрования общедоступен или хорошо известен).

Запрет доступа в одиночку, даже если вы найдете способ сделать это, просто создаст ложное чувство безопасности.

Донни Курния
источник
... тогда секрет для защиты становится ключом шифрования, и вам необходимо защитить его с помощью ключа шифрования. И защити этот ключ ключом, и защити этот ключ ключом и ...
Марк