为什么`systemd-run –user`没有强制执行像ProtectSystem这样的限制?

如果我以root身份运行它,它正确地打印触摸:不能触摸'/ tmp / test':只读文件系统

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

如果我运行它作为我自己,在我的用户的服务pipe理器( --user ),它不再保护我, /tmp/test创build:

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

为什么?

我想我对systemd中的“服务pipe理器”有什么基本的理解。 Systemd将会是我(我们)生活中的重要组成部分,所以我真的很想了解这一点,以便能够弄清楚上述情况。 有没有解释这个文件?

上下文是我试图沙箱不受信任的脚本(通过npm获取)。 以root用户身份运行systemd-run似乎是朝着错误的方向前进,特别是当我们的构build系统将使用这个。 我可以使用firejail ,但是我已经有了systemd,并且熟悉了各种沙箱属性,所以如果可能的话我想用systemd-run来取得成功。

谢谢!

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