如果我以 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)用户会话中执行此操作,只能在系统会话中执行此操作。