С участием 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
Создал программу для этого сам:
Пример:
# 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