Web服务必须以最小权限账号运行:禁用登录(Linux设nologin/false,Windows取消本地及远程桌面登录)、限定文件访问(根目录仅rx、上传目录仅rw、配置文件由root管理)、剥离adm/sudo等高危组、中间件同步配置user指令并禁用危险功能。

Web服务必须以最小权限账号运行,这是系统加固中最基础也最关键的一步。它不是“让服务跑起来就行”,而是确保该账号既不能登录系统、也不能访问无关文件、更无法通过组成员身份获得额外权限。
禁用登录能力
运行账号一旦能交互式登录,攻击者拿到WebShell后就能直接提权执行任意命令。
- Linux下执行:usermod -s /usr/sbin/nologin www-data,确认/etc/passwd中该用户shell字段为/nologin或/false
- Windows下检查IIS_IUSRS或自建服务账户,确保未勾选“允许本地登录”和“通过远程桌面服务登录”
- 家目录应为空或不存在,避免残留配置或缓存文件被利用
限定文件访问边界
权限范围必须严格收敛到网站运行所必需的路径,跨目录访问一律禁止。
- 网站根目录(如/var/www/html)仅授rx(读+执行),不给写权限
- 上传目录(如/var/www/html/uploads)只给rw-(读+写),绝对禁用执行权限
- 配置文件(/etc/nginx/、/etc/php/等)所有者设为root:root,权限600或644,www-data不得有读权限
- 日志目录(/var/log/nginx/)由root:adm管理,Web账号无需访问
清理高危组成员身份
默认分组常含adm、sudo、docker等敏感组,必须手动剥离。
- 运行groups www-data查看当前所属组
- 逐个移除非必要组:deluser www-data adm、deluser www-data sudo
- 仅保留自身组(如www-data)或为日志轮转单独创建的低权组(如wwwlog)
- 特别注意:绝不能属于root、systemd-journal、docker等高风险组
中间件层同步约束
账号权限只是第一道防线,必须配合Web服务器配置形成双重限制。
- Nginx主配置中明确写入:user www-data www-data;,并关闭autoindex on
- Apache设置User www-data + Group www-data,禁用mod_userdir
- IIS应用池高级设置中,“标识”必须设为专用低权账户,而非Local System或ApplicationPoolIdentity
- 禁用PHP中php_admin_flag等可覆盖权限的指令,防止脚本绕过限制

















