给 systemd 服务加一点沙箱
一个只需要读配置、写一个目录的服务,默认却拥有整个文件系统。systemd 提供了一组轻量的隔离选项,不用容器也能收紧:
[Service]
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
NoNewPrivileges=true
ReadWritePaths=/var/lib/app
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
ProtectSystem=strict 把 /usr、/boot、/etc 全部只读,只有 ReadWritePaths 列出的可写。PrivateTmp 给独立的 /tmp,避免和别的服务通过临时文件互相影响。
排查兼容性用 systemd-analyze security <unit>,会给一个评分并列出还没收紧的项。别一次全开,先加一项跑一天,看日志有没有 Permission denied。