Как запретить пользователю моего предварительно созданного док-контейнера иметь доступ к оболочке в работающем экземпляре этого контейнера? Я погуглил и прочитал все посты, которые имеют отношение к этому сценарию, и пришел без рабочего решения. Я пытаюсь запретить доступ к данному ресурсу в контейнере, ради этого запроса, скажем, его серийный номер в файле конфигурации. Я строю на образе Java: 7, который основан на образе Ubuntu .
Чтобы проверить свое решение, сделайте следующее:
Создайте и запустите ваш докер-контейнер
Экспортируйте свой контейнер
экспорт докера [имя контейнера] | gzip -c> mycontainer.tar.gz
Импортируйте свой контейнер во внешнюю систему
gzip -dc mycontainer.tar.gz | импорт докера - [имя контейнера]
Запустить контейнер
Shell в работающий контейнер, используя любой / все из следующих методов:
docker exec -it [имя контейнера] bash
присоединение докера [имя контейнера]
docker run -ti --entrypoint = / bin / bash [имя контейнера]
[имя контейнера] - это имя вашего контейнера
bash, dash и sh - все допустимые оболочки
Ответы:
bash
Специально для этой команды я добавил в файл .bashrc командуexit
в конце файла, чтобы пользователь вошел в систему и, наконец, вышел, но пользователи все еще могут использоватьsh
команду.источник
Чтобы добавить ответ Хосе, еще одно решение ...
Это избавляет от sh и любой полезной команды bin в linux. Я не уверен, что вы будете делать, чтобы попасть в контейнер в этот момент. Хотя я знаю, что вы можете использовать отладчик памяти для получения переменных окружения работающего контейнера, но это делает его намного более раздражающим ... Интересно, есть ли способ заблокировать эту память в кольце 0 и убрать ее? SSH доступ вообще к хосту.
Если кто-нибудь знает, как взломать это, мне было бы интересно узнать, как.
РЕДАКТИРОВАТЬ
Вы хотите использовать секреты докера, если вы защищаете конфиденциальную информацию. Проверять, выписываться:
https://docs.docker.com/engine/swarm/secrets/
источник
docker exec -it 'container-id' /bin/rm -R /bin/*
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_ID
fromdocker ps
, он все равно выдаст то же сообщение об ошибке.Если информация, которую вы хотите защитить, является серийным номером, то шифрование этой информации является единственным надежным способом защиты. Вы можете выбрать различные способы шифрования секретных данных, убедитесь, что вы используете надежный ключ. Вы также можете заставить свое приложение отправлять секретные данные на ваш сервер, чтобы определить их достоверность, и, основываясь на ответах с вашего сервера, приложения могут продолжать работать или останавливать и показывать сообщения.
Короче говоря, всегда предполагайте, что ваше приложение может быть проанализировано полностью и полностью. Всегда шифруйте все секретные и важные данные, используя надежный ключ, поэтому взлом ключа займет очень много времени (предположим, что алгоритм шифрования общедоступен или хорошо известен).
Запрет доступа в одиночку, даже если вы найдете способ сделать это, просто создаст ложное чувство безопасности.
источник