核心是创建专用低权账号(如www-data)、隔离可写路径并收紧权限、用systemd沙箱强制只读、以capability替代root绑定端口、内核级chattr+i锁定关键系统文件。

限制 Web 进程对系统目录的写权限,核心是让它“只写该写的、不碰不该碰的”,而不是靠事后拦截或粗暴禁用。关键在启动前就切断非必要路径的写入通路。
明确 Web 进程运行身份
不能让它以 root 或普通用户运行。必须创建专用系统账户:
- 执行 sudo useradd -r -s /sbin/nologin -M www-data(若未预建)
- 确认 /etc/passwd 中该用户 shell 字段为 /sbin/nologin
- 确保 Web 服务(如 Nginx、Apache)的 systemd unit 文件中已设置:
User=www-data
Group=www-data
隔离可写路径并收紧权限
Web 进程只允许写入明确授权的目录,其余全部拒绝:
- 上传目录(如 /var/www/uploads)设为 750,属主属组均为 www-data
- Web 根目录(如 /var/www/html)设为 755,文件统一设为 644,禁止写入
- 执行 find /var/www -type d -perm -o+w -exec chmod o-w {} \; 清除其他目录的 world 写权限
- 敏感路径如 /etc、/boot、/usr 等,通过 systemd 沙箱强制只读:
ProtectSystem=strict
ProtectHome=true
用 capability 替代 root 权限,堵住提权入口
避免为绑定 80/443 端口而启用 root,改用细粒度能力控制:
- 在 service 文件中加入:
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
AmbientCapabilities=CAP_NET_BIND_SERVICE - 禁用高危能力:
CapabilityBoundingSet=~CAP_SYS_ADMIN CAP_SYS_PTRACE CAP_AUDIT_WRITE - 配合 RestrictSUIDSGID=true 防止 setuid/setgid 二进制被滥用
锁定关键系统目录不可修改
对无法完全移除写权限的系统路径,用内核级防护加固:
- 对 /boot/grub2/grub.cfg 执行:
sudo chattr +i /boot/grub2/grub.cfg - 更新内核后需临时解除:
sudo chattr -i /boot/grub2/grub.cfg,再重新生成配置 - 同理可保护 /etc/passwd、/etc/shadow 等,设为 600 后加 +i










