我创建了一个 systemd-nspawn 容器,其中/dev/fb1
来自主机的绑定为/dev/fb0
.我已经PrivateUsers=off
在 .nspawn 配置文件中进行了设置,/dev/fb0
容器中的文件所有权和权限似乎与/dev/fb1
主机上的相同。在主机上运行cat /dev/urandom >/dev/fb1
按预期工作(“设备上没有剩余空间”错误),但如果我启动容器,并以 root 身份登录(使用machinectl
)cat /dev/urandom >/dev/fb0
失败,并显示“不允许操作”。我还尝试使用 写入它dd -if /dev/urandom -of /dev/fb0
,这给出了错误 'dd: 无法打开 '/dev/fb0': 不允许操作'。我已经测试了需要 root 访问权限的其他命令,例如chmod
和chown
,并且容器中的 root 用户能够运行这些命令。
如果我绑定/dev/fb1
为自身(即只是Bind=/dev/fb1
),则写入操作是允许的。
有谁知道为什么我无法从容器内打开文件进行写入?
这是 .nspawn 配置:
[Exec]
Capability=CAP_SYS_ADMIN
PrivateUsers=off
[Files]
Bind=/dev/fb1:/dev/fb0
Bind=/srv
这是容器的 systemd-nspawn 服务覆盖文件:
[Service]
DeviceAllow=/dev/fb0 rw
DeviceAllow=char-input rw
DeviceAllow=char-drm rw
(我确信其中一些配置是不必要的——我只是投入了我能想到的一切来解决我的问题。)