Как запретить пользователю моего предварительно созданного контейнера докеров получить доступ к оболочке в работающем экземпляре этого контейнера? Я погуглил и прочитал все сообщения, связанные с этим сценарием, и не нашел рабочего решения. Я пытаюсь предотвратить доступ к данному ресурсу в контейнере, для этого запроса, скажем, это серийный номер в файле конфигурации. Я строю на java: 7 изображение, основанное на убунту образ.
Чтобы проверить свое решение, сделайте следующее:
Создайте и запустите свой док-контейнер
Экспортируйте свой контейнер
экспорт докеров [название контейнера] | gzip -c> mycontainer.tar.gz
Импортируйте свой контейнер во внешнюю систему
gzip -dc mycontainer.tar.gz | импорт докеров - [название контейнера]
Запускаем контейнер
Оболочка в работающий контейнер, используя любой / все из следующих методов:
docker exec -it [имя контейнера] bash
docker attach [название контейнера]
docker run -ti --entrypoint = / bin / bash [имя контейнера]
[имя контейнера] - это имя вашего контейнера
bash, dash и sh - допустимые оболочки
Для bash
В частности, я добавил в файл .bashrc команду exit
в конце файла, поэтому пользователь входит в систему и, наконец, вылетает, но пользователи по-прежнему могут использовать sh
команда.
Чтобы добавить к ответу Хосе, другое решение - ...
docker exec :id -it /bin/rm -R /bin/*
Это избавляет от sh и любой полезной команды bin в Linux. Я не уверен, что бы вы сделали, чтобы попасть в контейнер в этот момент. Хотя я знаю, что вы могли бы использовать отладчик памяти для получения переменных среды работающего контейнера, но это делает его намного более раздражающим ... Интересно, есть ли способ заблокировать эту память в кольце 0 и убрать ssh доступ к хосту.
Если кто-нибудь знает, как это взломать, мне было бы интересно узнать, как это сделать.
РЕДАКТИРОВАТЬ
Вы хотите использовать секреты докеров, если защищаете конфиденциальную информацию. Проверять, выписываться:
Если информация, которую вы хотите защитить, является серийным номером, то шифрование этой информации - единственный надежный способ ее защитить. Вы можете выбрать различные способы шифрования секретных данных, убедитесь, что вы используете надежный ключ. Вы также можете заставить свое приложение отправлять секретные данные на ваш сервер, чтобы определить их достоверность, и на основе ответов с вашего сервера приложения могут продолжать работать или останавливаться и показывать сообщения.
Короче говоря, всегда предполагайте, что ваше приложение можно полностью и тщательно проанализировать. Всегда шифруйте все секретные и важные данные с помощью надежного ключа, поэтому взлом ключа займет очень много времени (предположим, что алгоритм шифрования общедоступен или хорошо известен).
Одно только предотвращение доступа, даже если вы найдете способ сделать это, только создаст ложное чувство безопасности.