Повторное использование пространств имен процесса, запущенного пузырьковой оберткой

Запуск оболочки с этим:

      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, соответственно.

Другие вопросы по тегам