服务器权限控制的核心是“只给刚好够用的权限”,需从最小化安装、专用账户、精细sudo授权、文件权限卡界及持续验证五方面落实,每步须有明确依据。

服务器权限控制的核心不是“怎么给更多权限”,而是“怎么只给刚好够用的权限”。最小化安装权限管理,本质是把权限当成稀缺资源来分配——装什么服务、开什么账户、读哪些文件、执行哪条命令,每一步都得有明确依据,不能图省事留后门。
系统安装阶段就该砍掉冗余
最小化安装不是选“最小包”就完事,而是从源头减少攻击面:
- 安装时只勾选必需组件,比如Web服务器就只装Nginx或Apache,不装FTP、Telnet、Samba等非必要服务
- 跳过GUI桌面环境,生产服务器用命令行更轻量、更可控
- 禁用所有非核心内核模块(如firewire、bluetooth、infiniband),用
lsmod检查,用modprobe -r卸载,再在/etc/modprobe.d/里黑名单锁定 - 安装后立即运行
systemctl list-unit-files --state=enabled,关掉没用的开机自启服务(如cups、avahi-daemon、rpcbind)
用户与服务账户必须专用且受限
别让一个账号既跑服务又给人登录,也别让root直接干活:
- 为每个服务创建独立系统用户,例如
sudo useradd -r -s /sbin/nologin nginx,-r表示系统用户,-s /sbin/nologin彻底禁用交互式登录 - 禁止root远程SSH登录:修改
/etc/ssh/sshd_config,设PermitRootLogin no,重启sshd - 普通运维用户不用密码登录,只配SSH密钥,且私钥本地加密存储;密钥对应公钥写入
~/.ssh/authorized_keys,权限设为600 - 用
sudo代替直接给root权限,且只授权具体命令,例如%webadmin ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx, /usr/bin/journalctl -u nginx
文件与目录权限要卡死边界
权限最小化不只是“不让别人改”,更是“连自己都不能越界”:
- 网站运行账户(如www-data)不能登录、不能执行shell、不能访问
/etc/var/log等敏感路径 - 网站根目录(如
/var/www/html)设为www-data:www-data,权限755;上传目录(如/var/www/html/uploads)设为750,且禁用PHP执行(Nginx中加location ~ \.php$ { deny all; }) - 配置文件归root所有,如
/etc/nginx/nginx.conf权限644,www-data组都不加进读取范围 - 日志目录由root或专用日志组(如adm)管理,服务账户无需读写权限
持续验证比一次配置更重要
权限不是设完就一劳永逸,得定期确认它还在生效:
- 用
getent group www-data和groups www-data查它是否被误加进sudo、docker等高危组 - 用
find /var/www -user www-data -perm -2 -o -perm -1扫出可写或可执行但不该有的文件 - 用
sudo -l -U deploy_user检查某用户实际能执行的sudo命令是否仍符合当前职责 - 每季度跑一次
auditctl规则或用aureport分析登录、提权、文件访问日志,看有没有异常模式

















