我正在尝试了解 Linux 容器安全性。我有一个运行着 root shell 的 docker 容器。该容器没有在 中可见的块设备/dev
,但我可以使用 来创建它们mknod
。然后,当我尝试使用 读取块设备(对应于我的主分区)时file -s /dev/vda1
,它会显示vda1: no read permission
。
什么内核级安全系统阻止我读取块设备?我原以为这是一种能力,但事实并非如此。
答案1
cgroup 设备控制器控制对原始设备的访问。根据类型(字符或块)、主要和次要设备编号,它允许您指定读取、写入和创建权限。 Docker 默认情况下不允许对大多数设备进行读写。
在 cgroup-v2 中,设备控制器被删除,您可以将 eBPF 程序附加到 cgroup 来决定设备访问。我很好奇它的可读性/可发现性如何。