最小权限原则是系统安全的底层逻辑,要求用户、进程、文件仅拥有完成职责所必需的最低权限;需一人一账号、禁用root直连、精细sudo白名单、服务降权运行、文件权限收敛,并持续审计加固。

最小权限原则不是配置技巧,而是系统安全的底层逻辑——每个用户、进程、文件只应拥有完成其职责所必需的最低权限,多一分即为风险入口。
用户账户必须一人一账号,禁用root直连
生产环境严禁使用 root 账户远程登录或日常操作。应关闭 SSH 的 root 登录:编辑 /etc/ssh/sshd_config,设 PermitRootLogin no,再执行 sudo systemctl restart sshd。同时锁定 root 密码:sudo passwd -l root。
为运维人员创建独立低权限账户,例如:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- sudo useradd -m -s /bin/bash ops(普通管理账号)
- sudo useradd -r -s /usr/sbin/nologin nginx_user(服务专用账号,无交互能力)
- 定期检查冗余系统账户:cat /etc/passwd | awk -F: '$3 ,确认无用后用 sudo userdel -r username 清理
sudo 权限必须精确到命令路径和执行上下文
绝不能授予 ALL=(ALL) ALL 或通配符权限。所有授权须通过 visudo 编辑 /etc/sudoers,确保语法正确且可审计。
- 按角色白名单授权,例如:deployer ALL=(www-data) NOPASSWD: /usr/bin/systemctl reload nginx
- 显式禁止危险行为:Defaults:deployer !/bin/sh, !/bin/bash, !/usr/bin/su
- 启用操作留痕:Defaults logfile="/var/log/sudo.log",并加 log_input,log_output 记录命令输入输出
- 限制环境变量与会话上下文:Defaults:deployer env_reset, always_set_home, env_keep += "PATH LANG LC_*"
服务进程必须降权运行,禁止 root 驻留
Web、数据库、缓存等服务默认不应以 root 身份启动或长期运行。攻击者一旦突破服务层,将直接获得最高控制权。
- Nginx 配置中明确指定:user nginx_user;(需提前创建该用户)
- systemd 服务单元中设置:User=nginx_user 和 Group=nginx_group
- MySQL 启动时使用专用账户:User=mysql Group=mysql,并设其 shell 为 /usr/sbin/nologin
- 如需绑定 1024 以下端口,可用 capabilities 替代 root:sudo setcap 'cap_net_bind_service=+ep' /usr/sbin/nginx
文件与目录权限要收敛归属与访问能力
敏感文件若权限过宽,极易成为横向渗透跳板。权限设置需兼顾属主(owner)、属组(group)与访问粒度(other)三重控制。
- SSH 私钥必须 chmod 600 ~/.ssh/id_rsa;/etc/shadow、/etc/sudoers 建议设为 640,属主 root,组为 root 或专用管理组
- 关键目录如 /etc、/var/log 推荐 750,避免非授权用户遍历
- 全局可写是高危信号,尤其 /tmp 以外目录:find /opt -type d -perm -o+w 2>/dev/null,发现即修复
- Web 根目录如 /var/www/html 设为 www-data:www-data,静态文件 644,上传目录 750 并加入可信维护组










