Bạn cần thêm rõ ràng khả năng CAP_MKNOD vào thùng chứa của mình .
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.
Bạn cũng có thể thử tự động hóa việc này (nếu bạn tình cờ sử dụng systemd
bên trong container) bằng cách sử dụng:
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.
có thể trỏ đến một kịch bản đang chạy mknod
.
Sử dụng docker
điều này là rất dễ dàng để thực hiện. Theo mặc định, các container không được ưu tiên .
Trong ví dụ này, tôi đang lấy một trusty
container từ sổ đăng ký:
sudo -r sysadm_r docker pull corbinu/docker-trusty
Pulling repository corbinu/docker-trusty
...
Status: Downloaded newer image for corbinu/docker-trusty:latest
Và tôi đang bắt đầu nó trong chế độ tương tác thông báo về khả năng tôi cần bên trong:
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
Như trái ngược với:
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
lxc.mount.entry = /dev/net/tun dev/net/tun none bind,create=file
vào tệp cấu hình vùng chứa, như được mô tả ở đây: superuser.com/a/1205662/130915 Sau đó, tôi chạy openvpn với quyền root với sudo bên trong container.