ubuntu 20.04如何沙箱化systemd服务

2023-02-22 23:52:44 浏览数 (2)

随着systemd越来越成熟,systemd提供了很多的功能特性可以对进程进行资源隔离和防护,虽然不是完全的隔离性,但是还是为安全性提供了保障。

这里我们使用vncserver systemd服务来做演示,这里的vncserver systemd配置如下

代码语言:javascript复制
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=simple
ExecStartPre=/bin/bash -c '/usr/bin/vncserver -kill ":$(id -u %i)" > /dev/null 2>&1 || :'
ExecStart=/bin/bash -c 'cd /home/%i;/usr/bin/vncserver ":$(id -u %i)" -geometry 1440x900 -alwaysshared -fg'
ExecStop=/bin/bash -c '/usr/bin/vncserver -kill ":$(id -u %i)"'
[Install]
WantedBy=graphical.target

将上述的进程沙箱化的话我们可以执行下述步骤:

1. 配置进程执行的用户和用户组

代码语言:javascript复制
[Service]
User=%i
Group=%i

2. 禁止服务进程及其子进程获取新的权限

代码语言:javascript复制
NoNewPrivileges=true

3. 阻止进程获取内核变量

代码语言:javascript复制
ProtectKernelTunables=true

4. 阻止进程加载或者卸载内核模块

代码语言:javascript复制
ProtectKernelModules=true
  1. 阻止进程读取或者写入内核日志
代码语言:javascript复制
ProtectKernelLogs=true

6. 阻止修改cgroup

代码语言:javascript复制
ProtectControlGroups=true

7. 阻止进程修改系统内存中的任何代码

代码语言:javascript复制
MemoryDenyWriteExecute=true

8. 阻止进程对文件或者目录设置SUID或者SGID

代码语言:javascript复制
RestrictSUIDSGID=true

9. 阻止进程修改硬件或者软件的时钟

代码语言:javascript复制
ProtectClock=true

10. 禁用进程启用实时调度,防止cpu过载

代码语言:javascript复制
RestrictRealtime=true

11. 强制进程使用特定目录。这可以防止进程读取其他程序在临时文件夹的内容

代码语言:javascript复制
PrivateTmp=true

0 人点赞