如何在 docker 容器中允许 ptrace
How to allow ptrace in docker container
环顾四周,我发现我可以使用
docker run --privileged --rm -i -t app /bin/bash
这也允许访问任何用户拥有的所有进程上的所有 ptrace 函数。不幸的是我不想让别人有这个能力。
所以我查看了 apparmor,发现我可以使用
ptrace peer=@{profile_name}
在我的 aparmor 配置文件中,然后我在 运行 应用程序时包含了它。
docker run --security-opt="apparmor:myprofile" --rm -i -t app /bin/bash
一切正常加载。然后我使用 fuser(作为 root)并且正如预期的那样我可以看到 root 拥有的进程。但是我在 uucp 下有几个进程 运行,这给出了拒绝权限。
所以我移动到uucp下的bash。
sudo -u uucp /bin/bash
但是使用 fuser 或 lsof 不起作用,returns 什么都没有。
那么,当我在 docker dontainer 中作为所述用户处于活动状态时,如何为任何用户激活 ptrace?
看起来此 (https://github.com/docker/docker/pull/15161) 的修复已于 2015-07-30 合并到 master,并包含在 Docker v1.8.0 及更高版本中。这应该不再是最近版本的 Docker 和包含的 AppArmor 配置文件的问题。
环顾四周,我发现我可以使用
docker run --privileged --rm -i -t app /bin/bash
这也允许访问任何用户拥有的所有进程上的所有 ptrace 函数。不幸的是我不想让别人有这个能力。 所以我查看了 apparmor,发现我可以使用
ptrace peer=@{profile_name}
在我的 aparmor 配置文件中,然后我在 运行 应用程序时包含了它。
docker run --security-opt="apparmor:myprofile" --rm -i -t app /bin/bash
一切正常加载。然后我使用 fuser(作为 root)并且正如预期的那样我可以看到 root 拥有的进程。但是我在 uucp 下有几个进程 运行,这给出了拒绝权限。
所以我移动到uucp下的bash。
sudo -u uucp /bin/bash
但是使用 fuser 或 lsof 不起作用,returns 什么都没有。
那么,当我在 docker dontainer 中作为所述用户处于活动状态时,如何为任何用户激活 ptrace?
看起来此 (https://github.com/docker/docker/pull/15161) 的修复已于 2015-07-30 合并到 master,并包含在 Docker v1.8.0 及更高版本中。这应该不再是最近版本的 Docker 和包含的 AppArmor 配置文件的问题。