Назад | Перейти на главную страницу

Как запустить внешние программы в контейнере «unshare» с отправкой файловых дескрипторов?

С участием unshare или lxc-execute Я могу создавать среды с отдельными пространствами имен network / mount / any. Но запускать там программы извне непросто. Обычно используется сеть и sshd, я также использую сокет UNIX с socat выполнение оболочки для запуска на ней новых процессов.

Есть ли уже программа, позволяющая легко запускать приложения внутри анонимных пользователей? Ожидается, что клиентская программа подключится к сокету UNIX и отправит (SCM_RIGHTS) stdin / stdout / stderr на сервер. Ожидается, что сервер будет запущен внутри unshare, получит argv, environment и fds и запустит их.

Что-то такое:

# unshare -nm /usr/local/bin/dived /var/run/myunshare.socket
# # (Non-abstract unix sockets are preserved across "unshare -m")
# dive /var/run/myunshare.socket ping 8.8.8.8
connect: Network is unreachable

Создал программу для этого сам:

https://github.com/vi/dive

Пример:

# umask 0000
# # Create no-network namespace
# unshare -n -- dived /var/run/no_network.socket -d

$ dive /var/run/no_network.socket bash
$ # Now inside unshare. Shell should work well, can start X apps, etc.
$ ping 127.0.0.1
connect: Network is unreachable
$ # actually no network
$ id
$ uid=1000(vi) gid=1000(vi) groups=1000(vi),20(dialout),21(fax),...
$ # dived set up groups for us
$ exit
exit
$ # "undove"

# killall dived