linux权限最小化原则是只授予完成任务所必需的权限,涵盖用户账户(禁用root、sudo精细授权)、文件目录(按角色设权、禁用777)、服务进程(降权运行、systemd加固)、临时提权(范围与时效控制)及持续审计验证。

Linux权限最小化原则,核心是“只给必需的权限,不给多余的特权”。它不是简单地把所有东西设成755或644,而是从用户、进程、文件、网络等多维度出发,确保每个实体仅拥有完成其任务所绝对必要的权限。
用户账户:避免长期使用root,用sudo精细授权
日常操作不应以root身份登录。创建普通用户,通过sudoers配置实现按需提权:
- 用visudo编辑/etc/sudoers,添加类似alice ALL=(nginx) /usr/bin/systemctl restart nginx,让alice只能重启nginx服务,不能执行其他命令
- 禁用root密码:sudo passwd -l root;关闭SSH root登录:PermitRootLogin no在/etc/ssh/sshd_config中设置
- 对运维脚本或自动化任务,创建专用低权限系统用户(如backup),仅赋予访问备份目录和执行rsync的权限
文件与目录:按角色分离权限,慎用777
权限数字只是表象,关键是属主、属组与实际使用场景匹配:
- Web服务静态资源(如Nginx的/var/www/html)应属www-data:www-data(或对应用户组),权限设为755(目录)和644(文件),禁止写入
- 上传目录(如/var/www/uploads)可设为750,属组为www-data并加入可信维护组,避免开放world-writable
- 敏感配置文件(如/etc/shadow、数据库凭证)必须600或400,属主为服务运行用户,禁止组和其他用户读取
服务进程:降权运行,限制能力边界
服务不应默认以root启动,而应主动放弃特权:
- Nginx主进程以root启动用于绑定80/443端口,但worker进程自动切换到www-data用户,可在配置中确认user www-data;
- 使用systemd时,通过User=、Group=、NoNewPrivileges=yes、RestrictSUIDSGID=true等指令加固单元文件
- 容器化部署时,用--user指定非root UID(如--user 1001:1001),配合CAP_DROP移除不必要的Linux capabilities
临时提权与调试:用完即收,不留后门
临时需要高权限时,要控制范围与时效:
- 调试时用sudo -u www-data -s切换到服务用户环境,而非直接sudo su -
- 批量修改权限后,立即检查是否误放开(如find /var/www -type f -perm /o+w查其他用户可写文件)
- 定期审计sudo日志(/var/log/auth.log或journalctl _COMM=sudo),识别异常提权行为
最小权限不是一劳永逸的配置,而是持续评估、收敛与验证的过程。每次新增功能、部署新服务或调整用户职责,都应回头审视“它真的需要这个权限吗?”










