在 Docker 容器内加载 AppArmor 配置文件

在 Docker 容器内加载 AppArmor 配置文件

我想在 Docker 容器内加载另一个 AppArmor 配置文件。 docker 容器本身使用该docker-default配置文件。另一个配置文件应该强制执行docker-default限制,并且在很大程度上限制容器内的任何文件系统访问。由于显然不可能更改容器内的配置文件,因此我发布此问题来询问还有哪些其他选项。

  1. 我正在考虑的一个选择是编写一个docker-default允许过渡到的本地配置文件。不过,我认为这必须写入docker-defaultAppArmor 配置文件中,该配置文件不在/etc/apparmor.d.该docker-default配置文件显然是基于此模板

    我该怎么办呢?我是否只需将本地配置文件粘贴到模板中,然后执行apparmor_parser -r -W template.go?我该如何覆盖default-docker?通过命名template.go docker-default.go

    我认为覆盖docker-default不是最好的选择,因为当 Docker 更新时这些修改可能会被覆盖。

  2. 另一个选择似乎是使用 运行容器--privileged。由于这通常会降低容器的安全性,因此我想避免这种情况。

我正在处理的设置的一些背景:我正在写一些R闪亮通过部署的应用程序闪亮代理在 Ubuntu 20.04 机器上。 ShinyProxy 使用 AppArmor 配置文件将各个应用程序会话作为单独的 Docker 容器启动docker-default。在某些应用程序的功能中,用户通过输入 R 代码闪亮王牌在后端评估的控制台。让用户在后端执行代码通常不是一个好主意,但在这种情况下是强制性的。由于我主要想限制用户对 Docker 容器内部和外部存储的文件系统和数据的访问,因此我打算使用RAppArmorunix包。unix::eval_safe允许在执行机器的 AppArmor 配置文件之一的同时执行功能。由于docker-default配置文件在整个应用程序会话期间激活,unix::eval_safe因此在内部RAppArmor::aa_change_profile无法加载另一个配置文件。

什么是解决这个问题的安全且可靠的解决方案?

相关内容