必须以非root用户运行docker容器,核心是在dockerfile中用adduser创建指定uid用户、chown修改目录属主,并将user指令置于所有root操作之后,确保权限最小化且可落地。

关键组件权限基线治理不是配完就完事,而是要让每个环节的权限都“说得清、管得住、动得明”。核心是把“最小权限”从原则变成可落地的配置动作,覆盖前端、后端、数据、中间件等真实运行单元。
Web服务器与应用服务器权限收紧
Apache/Nginx/Tomcat 等服务不应以 root 或 administrator 身份运行。必须创建专用低权限系统用户(如 www-data、tomcat),并确保:
- 配置文件(nginx.conf、server.xml)属主为 root,权限设为 644,禁止组/其他写入;
- 日志目录和临时工作目录(如 logs/、work/)属主为服务用户,权限设为 750;
- 禁用不必要的模块(如 Apache 的 mod_userdir、Nginx 的 autoindex),关闭目录遍历功能;
- Tomcat 的 manager 和 host-manager 应仅限内网IP访问,并通过独立认证(非默认账号)管控。
数据库账户按场景分级授权
绝不使用一个“root@%”账号跑全站。应按业务角色拆分数据库账户,例如:
- 读写账号(如 app_rw):只授予对应业务库的 SELECT/INSERT/UPDATE/DELETE,禁止 DROP/CREATE/ALTER;
- 只读账号(如 app_ro):用于报表、搜索等查询密集型接口,仅开放 SELECT;
- 迁移账号(如 db_migrate):仅在部署时启用,执行完立即禁用,权限含 CREATE/ALTER/DROP,但限定在指定 schema 内;
- 所有账号绑定固定 IP 白名单(如应用服务器内网地址),禁用通配符主机(@'%' )。
API网关与中间件访问控制硬隔离
API网关(如 Kong、APISIX)或服务网格(如 Istio)是权限前置卡口,不能只做路由转发:
- 对每个 API 路径强制校验 JWT token 中的 scope 或 role 字段,未匹配即拒;
- Redis/Memcached 实例禁用 CONFIG 命令,设置密码并绑定内网地址,拒绝公网监听;
- RabbitMQ/Kafka 的 topic 和 queue 权限按生产者/消费者角色分离,普通服务账号不得拥有 admin 权限;
- 所有中间件管理后台(如 Redis CLI、Kibana)必须走统一 SSO 认证,且操作日志同步接入审计平台。
代码与依赖项的执行权限约束
权限治理延伸到运行时上下文,防止“合法进程干坏事”:
- Node.js/Python 应用启动时使用 --no-sandbox(若 Chromium 渲染)、--disable-dev-shm-usage 等加固参数;
- 禁止在生产环境启用动态代码加载(如 Node.js 的 eval()、Python 的 exec()),CI 流水线中加入 semgrep 扫描规则拦截;
- 第三方包(npm/pip)安装后自动运行 snyk test 或 trivy fs 检查已知漏洞,高危漏洞未修复则阻断发布;
- Docker 容器以非 root 用户运行(USER 1001),挂载卷设为 ro(只读)或明确 chown 权限,避免容器逃逸后提权。










