如何在“取消共享”容器中启动外部程序并发送文件描述符?

如何在“取消共享”容器中启动外部程序并发送文件描述符?

使用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

自己创建了程序来执行此操作:

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

相关内容