Этот вопрос похож на No tun device в гостевой системе lxc для openvpn . LXC эволюционировал, и недавно были представлены непривилегированные контейнеры LXC, которые предлагают еще один уровень защиты от взлома тюрьмы.
Мне нужно создать сервер 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
внутрь контейнера.
Я использую ванильный Ubuntu 14.04 64bit в качестве хоста и контейнер, созданный с
lxc-create -t download -n mylxc -- -d ubuntu -r trusty -a amd64
Кому-нибудь удалось заставить /dev/tun
устройство работать под непривилегированным LXC?
lxc.mount.entry = /dev/net/tun dev/net/tun none bind,create=file
его в файл конфигурации контейнера, как описано здесь: superuser.com/a/1205662/130915 Затем я запустил openvpn как root с sudo внутри контейнера.Ответы:
Вам необходимо явно добавить возможность CAP_MKNOD в ваш контейнер .
Вы также можете попытаться автоматизировать это (если вы используете
systemd
внутри контейнера), используя:который может указывать на выполнение скрипта
mknod
.Используя
docker
это очень легко сделать. По умолчанию контейнеры непривилегированы .В этом примере я извлекаю
trusty
контейнер из реестра:И я запускаю его в интерактивном режиме, сообщая о необходимых мне возможностях внутри:
В отличие от:
источник
CAP_MKNOD
после работы.lxc.cap.keep = CAP_MKNOD
конфиг делает ошибкуSimultaneously requested dropping and keeping caps
. Я проверил все рекурсивно добавил конфиги (ubuntu.userns.conf
,ubuntu.common.conf
иcommon.conf
) и нашел только одну строку сlxc.cap.drop
:lxc.cap.drop = mac_admin mac_override sys_time sys_module
. Но это не имеет значения, не так ли?