Сценарий
Я настраиваю производственный веб-сайт, взаимодействующий с R-сервером через http-слой OpenCPU. Этот производственный сайт будет / устанавливается на док-машину Ubuntu 16.04 в контейнере.
Проблема
Мне нужно защитить серверную часть R (т. Е. OpenCPU в качестве сторожевого устройства) от возможного злоупотребления, например, Я бы хотел отключить список каталогов . В конце концов, это простая конечная точка http.
Следующий фрагмент информации из файла документации сервера, а также с официальной страницы docker hub заставил меня задуматься:
"Docker имеет свою собственную модель безопасности и отключает другие модули безопасности на основе Linux, такие как AppArmor или SELinux. Так что имейте в виду, что среда выполнения API OpenCPU в контейнере полностью неограничена."
Вопрос
Могу ли я просто повторно использовать существующий профиль AppArmor OpenCPU и заставить хост-машину Docker ограничивать разрешения запущенного процесса контейнера Docker? Я подумал, что да, вот что я сделал - на основе RAppArmor readme :
- установил упакованный пакет RAppArmor
- скопировал профили из
/usr/local/lib/R/site-library/RAppArmor/profiles/debian/*
в хост-машины докера /etc/apparmor.d/
каталог
- активировал профиль AppArmor с помощью
sudo apparmor_parser -r -W /etc/apparmor.d/usr.bin.r
- перезапустил сервис AppArmor
sudo service apparmor restart
- указал профиль apparmor в соответствующем docker-compose.yml, добавив:
security_opt:
- apparmor:/usr/bin/R
- убедившись, что профиль устройства загружен
docker inspect myOpenCPUContainer | grep apparmor
. Это было: "AppArmorProfile": "/usr/bin/R"
.
К сожалению, когда я проверяю логи docker logs myOpenCPUContainer
, возвращается:
/bin/sh: error while loading shared libraries: libc.so.6: cannot stat shared object: Permission denied
Я был бы очень благодарен за помощь в том, что я делаю не так. Или предложения о других способах защиты докеризованного контейнера OpenCPU.