この質問は openvpnのlxcゲストにtunデバイスがありません に似ています。 LXCは進化しており、刑務所の破壊に対する別のセキュリティ層を提供する非特権LXCコンテナが最近導入されました。
非特権コンテナの1つにOpenVPNサーバーを作成する必要があります。コンテナーにプライベートtunネットワークデバイスを作成させる方法がわかりません。
追加しましたlxc.cgroup.devices.allow = c 10:200 rwm
から~/.local/share/lxc/mylxc/config
。
コンテナを起動した後、mknod /dev/net/tun c 10 200
戻り値 mknod: '/dev/net/tun': Operation not permitted
コンテナ内。
私はホストとしてVanilla Ubuntu 14.04 64ビットを使用し、コンテナは
lxc-create -t download -n mylxc -- -d ubuntu -r trusty -a AMD64
誰かが/dev/tun
非特権LXCで実行されているデバイス?
CAP_MKNOD capability を container に明示的に追加する必要があります。
lxc.cap.keep Specify the capability to be kept in the container. All other capabilities will be dropped. When a special value of "none" is encountered, lxc will clear any keep capabilities specified up to this point. A value of "none" alone can be used to drop all capabilities.
これを自動化しようとすることもできます(コンテナー内でsystemd
を使用する場合):
lxc.hook.autodev A hook to be run in the container's namespace after mounting has been done and after any mount hooks have run, but before the pivot_root, if lxc.autodev == 1. The purpose of this hook is to assist in populating the /dev directory of the container when using the autodev option for systemd based containers. The container's /dev directory is relative to the ${LXC_ROOTFS_MOUNT} environment variable available when the hook is run.
mknod
を実行するスクリプトを指すことができます。
docker
を使用すると、これを簡単に実行できます。デフォルトでは、コンテナは 非特権 です。
この例では、trusty
コンテナーをレジストリから取得しています。
Sudo -r sysadm_r docker pull corbinu/docker-trusty
Pulling repository corbinu/docker-trusty
...
Status: Downloaded newer image for corbinu/docker-trusty:latest
そして、私はそれをインタラクティブモードで起動し、内部に必要な機能について通知します。
Sudo -r sysadm_r docker run --cap-drop ALL --cap-add MKNOD \
-i -t corbinu/docker-trusty bash
root@46bbb43095ec:/# ls /dev/
console fd/ full Fuse kcore mqueue/ null ptmx pts/ random shm/ stderr stdin stdout tty urandom zero
root@46bbb43095ec:/# mkdir /dev/net
root@46bbb43095ec:/# mknod /dev/net/tun c 10 200
root@46bbb43095ec:/# ls -lrt /dev/net/tun
crw-r--r--. 1 root root 10, 200 Apr 6 16:52 /dev/net/tun
とは対照的に:
Sudo -r sysadm_r docker run --cap-drop ALL \
-i -t corbinu/docker-trusty bash
root@9a4cdc75a5ec:/# mkdir /dev/net
root@9a4cdc75a5ec:/# mknod /dev/net/tun c 10 200
mknod: ‘/dev/net/tun’: Operation not permitted