小编Dej*_*lic的帖子

什么机制阻止我在具有与主机共享 PID 命名空间的容器中读取 /proc/<PID>/environ?

在研究与容器共享 PID 命名空间时,我注意到一些我不明白的有趣的事情。当容器与主机共享 PID 命名空间时,某些进程的环境变量会受到保护,而其他进程则不会。

我们以mysql为例。我将启动一个带有环境变量集的容器:

ubuntu@sandbox:~$ docker container run -it -d --env MYSQL_ROOT_PASSWORD=SuperSecret mysql
551b309513926caa9d5eab5748dbee2f562311241f72c4ed5d193c81148729a6
Run Code Online (Sandbox Code Playgroud)

我将启动另一个共享主机 PID 命名空间的容器并尝试访问该environ文件:

ubuntu@sandbox:~$ docker container run -it --rm --pid host ubuntu /bin/bash

root@1c670d9d7138:/# ps aux | grep mysql
999        18212  5.0  9.6 2006556 386428 pts/0  Ssl+ 17:55   0:00 mysqld
root       18573  0.0  0.0   2884  1288 pts/0    R+   17:55   0:00 grep --color=auto mysql

root@1c670d9d7138:/# cat /proc/18212/environ
cat: /proc/18212/environ: Permission denied
Run Code Online (Sandbox Code Playgroud)

有些东西阻止了我读取环境变量的访问。我发现我需要CAP_SYS_PTRACE在容器中读取它:

ubuntu@sandbox:~$ docker container run -it --rm --pid host --cap-add …
Run Code Online (Sandbox Code Playgroud)

proc capabilities namespace docker kubernetes

4
推荐指数
1
解决办法
979
查看次数

标签 统计

capabilities ×1

docker ×1

kubernetes ×1

namespace ×1

proc ×1