使用 systemd 对用户会话进行沙箱处理

使用 systemd 对用户会话进行沙箱处理

我想在远程 Linux VM 上对用户会话进行沙箱处理,就像对 systemd 服务进行沙箱处理一样。例如,在服务文件中,我可以添加到[Service]部分行,例如:

NoNewPrivileges=yes
PrivateDevices=yes
PrivateTmp=yes
ProtectKernelTunables=yes
ProtectSystem=strict
SystemCallFilter=...

我想对给定用户的任何用户进程执行相同的操作。有没有一种简单的方法可以做到这一点?

我尝试通过使用上面运行 systemd --user 的行创建一个 systemd 单元来做到这一点。然后在 sshd_config 中我添加了如下行:

Match User UserNameToRestrict
  ForceCommand env XDG_RUNTIME_DIR=/run/user/UserIdToRestrict systemd-run --user --pipe --pty /bin/bash -l

有了这个,事情似乎可行了。例如,通过 ssh 连接到盒子会得到:

$ ssh UserNameToRestrict@my-host
Running as unit: run-u2.service
Press ^] three times within 1s to disconnect TTY.
UserNameToRestrict@my-host:~$ ping 1.1.1.
ping: socket: Operation not permitted

其中 ping 被拒绝获得打开原始套接字的权限,因为NoNewPrivileges在运行systemd --user.

但整个设置看起来相当复杂,我不确定是否可以颠覆它。那么也许有更直接的方法?

相关内容