Web服务器运行账号权限最小化须做到:禁止登录、限定文件访问范围、剥离高危组成员身份、配合中间件双重约束;如Linux下禁用www-data的shell,仅授网站根目录读执行权,上传目录禁执行,配置文件由root管理,且不加入adm/sudo等敏感组。

Web服务器运行账号(如Linux下的www-data、Windows下的IIS_IUSRS)是攻击者提权和横向移动的关键跳板。权限最小化不是“让它能跑就行”,而是确保它**只能访问必要资源、不能执行高危操作、无法登录系统、无法提权到更高权限组**。
一、禁止登录与交互式访问
运行账号绝不能具备登录能力,否则攻击者一旦获取WebShell,可直接切换身份执行命令。
- Linux:用
usermod -s /usr/sbin/nologin www-data或usermod -s /bin/false www-data禁用shell - 确认
/etc/passwd中该用户登录shell字段为/nologin或/false,且家目录为空或不存在 - Windows:在本地用户和组中检查
IIS_IUSRS是否被赋予“允许本地登录”或“允许通过远程桌面服务登录”权限——必须取消
二、严格限制文件系统访问范围
账号权限应以“网站根目录”为边界,禁止跨目录读写,尤其要隔离配置文件、日志、系统路径。
- 只赋予网站文档根目录(如
/var/www/html)及其子目录的读取和执行权限(rx),不给写权限 - 上传目录(如
/var/www/html/uploads)仅开放写+读(rw-),绝对禁止执行权限(即不能运行PHP/JS等脚本) - 配置文件(如
/etc/nginx/、/etc/php/)所有者设为root:root,权限644或600,www-data不应有读取权限(Nginx主进程由root启动,worker才降权) - 日志目录(如
/var/log/nginx/)由root:adm管理,www-data无需访问
三、剥离不必要的系统组成员身份
默认情况下,www-data可能被自动加入adm、dialout、sudo等高风险组,需手动清理。
- 执行
groups www-data查看当前所属组 - 移除非必需组:
deluser www-data adm、deluser www-data dialout等 - 仅保留必要组,例如
www-data自身组,或用于日志轮转的wwwlog(若自建) - 特别注意:不要让
www-data属于root、sudo、docker、systemd-journal等敏感组
四、配合中间件配置实现双重约束
账号权限只是基础,还需在Nginx/Apache/IIS层面做对应限制,形成纵深防御。
- Nginx:主配置中明确指定
user www-data www-data;,并关闭autoindex on、禁用php_admin_flag类危险指令 - Apache:使用
mpm_event或mpm_worker,设置User www-data+Group www-data,禁用mod_userdir - IIS:在应用池高级设置中,将“标识”设为自定义账户(如
NT AUTHORITY\IUSR或专用低权用户),禁用“加载用户配置文件” - 所有中间件中,上传目录务必配置
deny all;(Nginx)或<httpProtocol><customHeaders>禁用执行

















