我想在 Docker 容器内加载另一个 AppArmor 配置文件。 docker 容器本身使用该docker-default
配置文件。另一个配置文件应该强制执行docker-default
限制,并且在很大程度上限制容器内的任何文件系统访问。由于显然不可能更改容器内的配置文件,因此我发布此问题来询问还有哪些其他选项。
我正在考虑的一个选择是编写一个
docker-default
允许过渡到的本地配置文件。不过,我认为这必须写入docker-default
AppArmor 配置文件中,该配置文件不在/etc/apparmor.d
.该docker-default
配置文件显然是基于此模板。我该怎么办呢?我是否只需将本地配置文件粘贴到模板中,然后执行
apparmor_parser -r -W template.go
?我该如何覆盖default-docker
?通过命名template.go
docker-default.go
?我认为覆盖
docker-default
不是最好的选择,因为当 Docker 更新时这些修改可能会被覆盖。另一个选择似乎是使用 运行容器
--privileged
。由于这通常会降低容器的安全性,因此我想避免这种情况。
我正在处理的设置的一些背景:我正在写一些R闪亮通过部署的应用程序闪亮代理在 Ubuntu 20.04 机器上。 ShinyProxy 使用 AppArmor 配置文件将各个应用程序会话作为单独的 Docker 容器启动docker-default
。在某些应用程序的功能中,用户通过输入 R 代码闪亮王牌在后端评估的控制台。让用户在后端执行代码通常不是一个好主意,但在这种情况下是强制性的。由于我主要想限制用户对 Docker 容器内部和外部存储的文件系统和数据的访问,因此我打算使用RAppArmor
和unix
包。unix::eval_safe
允许在执行机器的 AppArmor 配置文件之一的同时执行功能。由于docker-default
配置文件在整个应用程序会话期间激活,unix::eval_safe
因此在内部RAppArmor::aa_change_profile
无法加载另一个配置文件。
什么是解决这个问题的安全且可靠的解决方案?