Как определить, работает ли контейнер runc как привилегированный?
Независимо от того, запускает ли контейнер docker/crio/containerd, есть ли способ понять, работает ли контейнер runc как привилегированный?
docker inspect
действительно демонстрирует привилегию, но я хочу выяснить это на уровне runc.
1 ответ
Состояние и конфигурация каждого runc
контейнер можно получить из $ROOT_DIR/$CONTAINER_ID/state.json
файл, где $ROOT_DIR
- это корневой каталог для группы контейнеров (обычно управляемый конкретной средой выполнения более высокого уровня, такой как Docker). Например, на моей машине Docker использует корневой каталог/run/docker/runtime-runc/moby
, таким образом, я могу найти runc
-уровневая конфигурация некоторого контейнера:
# jq .config /run/docker/runtime-runc/moby/$CONTAINER_ID/state.json
{
"no_pivot_root": false,
"parent_death_signal": 0,
"rootfs": "/var/lib/docker/overlay2/<CONTAINER_ID>/merged",
"readonlyfs": false,
...
}
Вы легко можете узнать, что этот файл не содержит полей типа privileged
. Быстрый поиск поrunc
Исходный код показывает, что он не имеет понятия привилегированного контейнера, т.е. это абстракция от более высоких уровней. Это, в свою очередь, означает, что не существует простого способа определить, был ли контейнер запущен как привилегированный или нет, изrunc
уровень.
Тем не менее, все еще можно сказать, имеет ли контейнер те же привилегии, что и те, которые предоставляются--privileged
аргумент на уровне Docker: state.json
файл содержит список возможностей, предоставленных контейнеру; список узлов устройства, доступных контейнеру; режим seccomp и так далее. С практической точки зрения неразумно тратить время на проверку всех этих настроек, поэтому лучше просто взглянуть наdocker inspect
.