无法在Docker中重新加载或启动AppArmor



这是我的Dockerfile:

FROM ubuntu:14.04
RUN apt-get update
RUN apt-get install -y software-properties-common
RUN apt-get install -y python-software-properties
RUN add-apt-repository ppa:chris-lea/node.js
RUN apt-get update
RUN apt-get install -y nodejs
RUN apt-get install -y apparmor-profiles
RUN apt-get install -y apparmor-utils
ADD server.js /folder1/
ADD usr.bin.nodejs /etc/apparmor.d/
RUN service apparmor reload
CMD node /folder1/server.js

这里是usr.bin.nodejs:

#include <tunables/global>
/usr/bin/nodejs {
  #include <abstractions/base>
  /usr/bin/nodejs mr,
  /folder1/server.js r,
  /folder1/repo/** ralkmix,
  network,
}

我运行sudo docker build -t scadge/test-one .来构建此映像。在Step 7 : RUN apt-get install -y apparmor-profiles上,我得到了红色消息invoke-rc.d: policy-rc.d denied execution of startinvoke-rc.d: policy-rc.d denied execution of reload。同样在Step 11 : RUN service apparmor reload上,我得到了以下内容:

 * Reloading AppArmor profiles
 * Mounting securityfs on /sys/kernel/security...
mount: permission denied
    ...fail!
    ...fail!

当然,apparmor的配置文件不起作用。那么我如何让AppArmor在Docker中工作呢?我还想承认,所有这些东西在我的桌面Ubuntu 14.04上运行良好,从官方网站下载。

首先是免责声明。你不想这么做!

因为在容器中重新加载AppArmor配置文件会在主机中重新加载它们

这是因为Docker容器与主机共享正在运行的Linux内核。

容器本身已经使用/etc/apparmor.d/docker配置文件BTW.进行了限制


现在,如果您真的确定要从容器加载主机AppArmor配置文件。。。

问题很明显,AppArmor无法装载安全性。

您可以使用--privileged选项启用装载。

您还可以使用SYS_ADMIN功能启用它:

docker run --cap-add=SYS_ADMIN debian:jessie sh -c 'mount -t securityfs none /mnt && echo Done!'

如果使用SYS_ADMIN选项,则必须编辑主机上的/etc/apparmor.d/docker配置文件,并注释掉涉及/sys/kernel分支的所有deny行。

同样,这很可能不是你想做的事情。

相关内容

  • 没有找到相关文章

最新更新