Привет, цифровой архитектор!
Флаг
--privileged в Docker — это прямая угроза безопасности. Он даёт контейнеру доступ ко всем устройствам хоста и может обеспечить злоумышленнику права root.Используйте принцип минимальных привилегий (least privilege), отключая ненужные возможности ядра (capabilities).
1. Почему
--privileged — это опасно?Запуск контейнера в привилегированном режиме позволяет ему смонтировать корневую файловую систему хоста или получить уровень контроля, аналогичный процессам хоста.
# Опасная команда: получает полный доступ к хост-системе
docker run --rm -v /:/host -t -i debian bash
root@e51ae86c5f7b:/# cd /host
root@e51ae86c5f7b:/host# ls bin dev home
# Атакующий видит корневую ФС хоста, включая /bin, /dev, /etc, /root.
2. Принцип минимальных привилегий (Least Privilege)
Если контейнеру не нужны все возможности
root (которые являются комбинацией 40 отдельных CAP_ возможностей Linux), их следует отключить. Docker по умолчанию и так удаляет многие возможности.# Сброс всех возможностей и добавление только необходимых
# CAP_NET_BIND_SERVICE нужна для привязки к портам ниже 1024
docker run --cap-drop all --cap-add NET_BIND_SERVICE alpine:latest sh
# Пример удаления опасных возможностей SUID/SGID
docker run -it --rm --cap-drop SETUID --cap-drop SETGID ...
# Дополнительное ограничение: запрет на получение новых привилегий
docker run --security-opt=no-new-privileges ubuntu bash
3. Запуск от имени непривилегированного пользователя
Если приложение не требует привилегий
root, оно не должно от него запускаться. Это предотвращает повышение привилегий (privilege escalation) в случае взлома.# В Dockerfile: переключаем пользователя
RUN groupadd -r app_grp && useradd -r -g app_grp app
USER app
💡 Вывод:
Флаг
--privileged следует избегать. Используй --cap-drop и USER в Dockerfile, чтобы контейнер не получил прав root на хосте, даже если его взломают.#DevOps #Docker #Безопасность #root #CLI #Privileges