Я использую Kubernetes и хотел бы запустить контейнер как пользователь без прав root.
Если я пишу свой собственный Dockerfile, я могу useradd
, chmod 777
, и запустить с помощью docker --user <username>
.
Однако в некоторых случаях список файлов, которые необходимо отредактировать, chmod
может быть длинным и неизвестным, что делает процесс утомительным, а также может со временем меняться и приводить к ошибкам, которые обнаруживаются только во время выполнения.
Есть ли лучшая практика? Как бы вы обрабатывали папки типа /var/log
и /var/run
? Один из вариантов — touch/mkdir и использовать setfacl
.
Самый простой — просто chmod 777 -R /var/log
.
Но даст ли это контейнеру 777
доступ и на хосте? Как это сопоставляется, когда у контейнера один набор разрешений, а у хоста другой?
решение1
Использование chmod 777
в принципе никогда не является правильным решением. Выясните, как правильно установить разрешения. Разрешения должны быть почти всегда минимально возможными, чтобы достичь вашей цели.
То, как вы это сделаете, во многом зависит от контекста конкретного изображения и того, какое программное обеспечение вы используете.
Но предоставит ли это контейнеру 777 доступ к хосту?
Зависит от того, является ли путь, разрешения которого вы меняете, монтированием bind-bind.
решение2
Я нашел это актуальным для моего собственного вопроса:
Overlay file system монтирует нижний каталог, а затем присоединяет верхний каталог к объединенной точке монтирования. Когда процесс записывает новый файл в объединенный каталог, новый файл записывается в верхний каталог. Когда процесс изменяет существующий файл в нижнем каталоге, ядро копирует файл из нижнего каталога в верхний каталог и позволяет процессу изменять файл в верхнем каталоге.
Таким образом chown
, наложение (верхний) каталога не должно оказывать никакого влияния на хостовый (нижний) каталог.
Но я думаю, что chmod 777
можно разрешить другим пользователям получать доступ к файловой системе оверлея на хосте.