为什么“systemd-run --user”不强制执行诸如“ProtectSystem”之类的限制?

为什么“systemd-run --user”不强制执行诸如“ProtectSystem”之类的限制?

如果我以 root 身份运行它,它会正确打印touch:无法触及‘/tmp/test’:只读文件系统.:

systemd-run --pty --property=ProtectSystem=strict /bin/bash -c "touch /tmp/test"

如果我以自己的身份运行它,在我的用户服务管理器(--user)中,它不再保护我,/tmp/test而是创建:

systemd-run --user --pty --property=ProtectSystem=strict /bin/bash -c "touch /tmp/test"

为什么?

我认为我对 systemd 中的“服务管理器”缺乏基本的了解。Systemd 将成为我(我们)生活中的重要组成部分,所以我真的很想充分了解它,以便能够弄清楚上述内容。有没有文档可以解释这一点?

上下文是我正在尝试对不受信任的脚本进行沙盒处理(通过 获取npm)。以 root 身份运行 systemd-run 似乎朝着错误的方向发展,尤其是因为我们的构建系统将使用它。我可以使用firejail,但我已经拥有 systemd,并且熟悉各种沙盒属性,因此如果可能的话,我希望使用 systemd-run 取得成功。

谢谢!

答案1

ProtectSystem其他Protect*选项使用只读绑定挂载来强制执行保护。这是非 root 用户无法执行的操作,因此您无法在(非 root)用户会话中执行此操作,只能在系统会话中执行此操作。

相关内容