Том, который зашифрован и недоступен для хоста? - PullRequest
0 голосов
/ 06 ноября 2019

Мне нужен контейнер Docker, объем хранилища которого недоступен хост-машине.

Я следовал этому руководству , в котором для подключения LUKS используется плагин docker-lvm-pluginобъем склепа. С некоторыми поправками к подходу я закончил тем, что сделал это:

apt install lvm2
apt install xfsprogs
pvcreate /dev/sdb
vgcreate docker /dev/sdb
lvcreate -L 15G -T docker/internal
lvcreate -L 30G -T docker/volumes
mkdir -p /var/run/key
mount -t ramfs -o size=4M ramfs /var/run/key
dd if=/dev/urandom of=/var/run/key/key.bin bs=1024 count=16
apt install cryptsetup
docker volume create --driver lvm --name cryptvol --opt size=100M --opt crypt=luks --opt keyfile=/var/run/key/key.bin
docker run -d --name container -v cryptvol:/home alpine tail -f /dev/null

Однако тогда я могу сделать это:

$ docker exec -it container sh -c 'echo hello > /home/hello.txt'
$ # hello.txt is readable inside container
$ docker exec -it container -c 'cat /home/hello.txt'
hello
$ # hello.txt ALSO readable outside container
$ cat /var/lib/docker-lvm-plugin/cryptvol/hello.txt
hello

Кажется, содержимое тома crypt видимо для хостаmachine.

Возможно ли иметь зашифрованный том внутри контейнера Docker, недоступного для хоста?

1 Ответ

2 голосов
/ 06 ноября 2019

Нет.

Docker не является инструментом VM, он запускает приложение с примененной изоляцией (пространства имен) и ограничениями ресурсов (cgroups). Хост-процессы, работающие в том же ядре, не работают с этими ограничениями и поэтому могут видеть содержимое контейнера. И даже если на хосте каким-то образом ограничен вид, root на хосте (вместе с любым пользователем в группе докеров) может войти в пространство имен контейнера.

...