Повторное использование пространств имен процесса, запущенного пузырьковой оберткой
Запуск оболочки с этим:
bwrap --unshare-pid --unshare-user --dev-bind / / bash
В другой оболочке на хосте мы можем увидеть это с помощью lsns:
4026532550 user 2 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
4026532552 mnt 2 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
4026532562 pid 2 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
lsns в отчетах о пространстве имен
4026531834 time 3 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
4026531835 cgroup 3 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
4026531838 uts 3 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
4026531839 ipc 3 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
4026531992 net 3 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
4026532550 user 3 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
4026532552 mnt 3 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
4026532562 pid 3 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
Главный вопрос:
Как запустить вторую оболочку в тех же пространствах имен, что и первая?
Бонусный вопрос:
Насколько я понимаю, существует также промежуточное пространство имен (только пространство имен пользователя?), созданное в большинстве случаев пузырьковой оберткой.
Можно ли запустить оболочку в промежуточных пространствах имен, созданных с помощью bubblewrap?
Будет ли это бесполезно, потому что все привилегии уже удалены пузырчатой пленкой из промежуточного пространства имен?
Идея заключалась бы в том, что дальнейшее монтирование/размонтирование можно было бы выполнять в конечном пространстве имен из промежуточного пространства имен или некоторых других привилегированных вещей.
Любое решение приветствуется, предпочтительно с пузырьковой оберткой, в противном случае предпочтительнее nsenter, но также необработанные системные вызовы setns для PoC.
Обратите внимание, что bwrap не setuid, я запускаю bwrap как непривилегированный пользователь, в ядре включены все типы пространств имен, и они работают правильно как непривилегированный пользователь, если честно.
В соответствии с этой проблемой https://github.com/containers/bubblewrap/issues/253 , пузырьковая обертка может создавать только новые пространства имен монтирования, поэтому на данный момент эту проблему может быть невозможно решить только с помощью только пузырьковой обертки.
Bubblewrap отлично справляется с созданием начальных пространств имен, простой и достаточной конфигурации, если он создает пространства имен, которые нельзя правильно повторно ввести каким-либо образом, я мог бы исправить пузырчатую обертку, чтобы это позволяло, или вообще отказаться от нее и написать собственная обертка setns, основанная на том, как пузырьковая обертка делает большинство вещей
Flatpak использует пузырчатую обертку и позволяет вводить пространства имен, проверяет, создает ли пузырчатая обертка промежуточное пространство имен . но я не мог заставить это работать вручную
1 ответ
Как это:
nsenter -U --preserve-credentials -m -p -t 1799976
Где
1799976
— это PID процесса, который в данный момент находится в этом пространстве имен. Если вы не хотите вводить пространство имен монтирования или PID, оставьте
-m
или же
-p
, соответственно.