В документации Docker есть хорошая статья о безопасности с помощью Docker: https://docs.docker.com/articles/security/
Однако мне не очень ясно, как процессы с привилегиями root в контейнере на самом деле выполняются в хост-системе, и как я должен настроить SELinux, чтобы справиться с риском "утечки" процесса за пределы контейнера.
Например, я запускаю nginx в контейнере, и когда я выполняю "ps" вне контейнера, я могу видеть все процессы nginx.
root 7281 4078 0 01:36 ? 00:00:00 nginx: master process nginxwww-data 7309 7281 0 01:36 ? 00:00:00 nginx: worker processwww-data 7310 7281 0 01:36 ? 00:00:00 nginx: worker processwww-data 7311 7281 0 01:36 ? 00:00:00 nginx: worker processwww-data 7312 7281 0 01:36 ? 00:00:00 nginx: worker process
Это неудивительно, поскольку именно так работает Docker - это не виртуализация, где ничего не появляется за пределами виртуальной машины. С помощью Docker процессы контейнера выполняются в ОС хоста в пределах пространств имен и с ограниченными привилегиями. Они разговаривают непосредственно с ядром хоста.
В этой ситуации я полагаю, что мне следует настроить SELinux для защиты процесса nginx вместо процесса docker, как если бы он работал без docker. Это правильно?
Кроме того, существует ли какая-либо конкретная конфигурация Docker, более подходящая для запуска веб-серверов, таких как nginx?