Получить версию загрузочного файла

In other words: may root owned unprivileged containers be "less unprivileged" than ones owned by standard accounts?

Не думаю. Важно то, что находится в /proc/$PID/uid_mapпроцессов в пользовательском пространстве имен контейнера, а не в /etc/subuid. Предположим, вы выполняете следующее из исходного пользовательского пространства имен (, то есть не из контейнера )для $PIDпроцесса, работающего в контейнере:

$ cat /proc/$PID/uid_map
0 200000 1000

Это означает, что диапазон UID [0-1000)процесса $PID будет сопоставлен с диапазоном UID [200000-201000)вне его пользовательского пространства имен (контейнера ). UID за пределами диапазона [200000-201000)будут сопоставлены с 65534($(cat /proc/sys/kernel/overflowuid))в контейнере. Это может произойти, например, если вы не создадите новое пространство имен PID. В этом случае процесс в контейнере будет видеть процессы снаружи, но их UID будет 65534.

Таким образом, при правильном сопоставлении UID, даже если контейнер запущен с правами root, его процессы будут иметь непривилегированные UID вне его.

Подчиненные UID в /etc/subuidникоим образом не связаны с одним UID снаружи. Цель этого файла — позволить непривилегированным пользователям запускать контейнеры, использующие более одного UID (, что характерно для большинства операционных систем Linux ). По умолчанию вы можете сопоставить свой UID, только если вы непривилегированный пользователь. То есть, если ваш UID равен 1000 и $PIDотносится к процессу в контейнере, вы можете сделать только

echo "$N 1000 1" >/proc/$PID/uid_map

для любого $Nнепривилегированного пользователя. Все остальное не разрешено. Если бы вы могли нанести на карту более длинный диапазон, то есть

echo "$N 1000 50" >/proc/$PID/uid_map

вы получите доступ к UID [1000-1050)за пределами контейнера через контейнер. И, конечно же, если бы вы могли изменить начало внешнего диапазона UID, у вас был бы простой способ получить root.Итак, /etc/subuidопределяет внешние диапазоны, которые вам разрешено использовать. Этот файл используется newuidmap, который является root с идентификатором setuid.

$ cat /etc/subuid
woky:200000:50
$ echo '0 200000 50' >/proc/$PID/uid_map
-bash: echo: write error: Operation not permitted
$ newuidmap $PID 0 200000 50
$ # success

Детали намного сложнее, и я, вероятно, не тот человек, чтобы объяснять это, но я думаю, что лучше не иметь ответа. :-)Вы можете проверить man-страницы user_namespaces(7)и newuidmap(1)и мои собственные исследования Первый процесс в новом пользовательском пространстве имен Linux должен вызывать setuid ()? . К сожалению, я не совсем уверен, как LXC использует этот файл.

0
19.06.2021, 23:54
1 ответ

Systemd -загрузка является загрузкой systemd -независимо от того, какой дистрибутив Linux вы используете. Systemd -boot — это относительно простое приложение выбора, которое не настраивается производителем дистрибутива. Версия загрузки системы -, поставляемая Fedora, которая в настоящее время установлена ​​на вашем компьютере, также способна загружать Manjaro, Debian и даже Windows, если хотите.

При обновлении загрузки systemd -файлы берутся из текущего дистрибутива. Программа bootctl проверяет установленную версию systemd -boot и обновляет только в том случае, если доступная версия новее установленной версии.Версия определяется путем проверки фактического файла, а не имени файла. Точнее, версия определяется путем поиска строки #### LoaderInfo: systemd-boot NNN ####в загрузочном бинарном файле systemd -, где NNN— трехзначный номер версии.

1
28.07.2021, 11:23

Теги

Похожие вопросы