使用unshare
或,lxc-execute
我可以创建具有单独网络/挂载/任何命名空间的环境。但从外部启动程序并不是一件简单的事情。通常使用网络和 sshd,我也使用带有socat
执行 shell 的 UNIX 套接字在其上启动新进程。
是否已经有一个程序允许轻松启动 unshares 中的应用程序?客户端程序应连接到 UNIX 套接字并将 (SCM_RIGHTS) stdin/stdout/stderr 发送到服务器。服务器应在 unshare 中启动并接收 argv、环境和 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
答案1
自己创建了程序来执行此操作:
例子:
# 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