尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
你的 Nacos 可能在“裸奔“——生产环境鉴权配置完整指南
你的 Nacos 可能在裸奔——生产环境鉴权配置完整指南文章目录你的 Nacos 可能在裸奔——生产环境鉴权配置完整指南背景为什么要关注 Nacos 鉴权30 秒验证你的 Nacos 是否在裸奔项目中 Nacos 的使用方式我们的踩坑时间线Nacos Server 端开启鉴权修改 Nacos 配置文件关键参数说明默认值的危害Docker 部署方式重启验证Spring Cloud 客户端适配配置方式本项目需要修改的模块密码安全管理Nacos 控制台用户管理修改默认密码附完整操作代码创建专用账号命名空间级别权限控制版本兼容速查安全加固 Checklist下一步背景为什么要关注 Nacos 鉴权30 秒验证你的 Nacos 是否在裸奔# 未开启鉴权时任何人可以直接拉取配置curlhttp://your-nacos:8848/nacos/v1/cs/configs?dataIdapplication-dev.yamlgroupDEFAULT_GROUPtenantdev# 返回内容可能包含# spring.datasource.passwordroot123456# spring.redis.passwordredis2024# aliyun.access-key-secretxxxxxx如果你在公网 Nacos 上执行这条命令能拿到结果现在就停下来去改然后再回来继续读。Nacos 作为微服务架构中最常用的注册中心和配置中心默认安装后鉴权是关闭的。这意味着任何人只要能访问 Nacos 的 IP 端口就能读取所有配置包括数据库密码、Redis 密码、第三方密钥等敏感信息。可以随意注册/下线服务实例造成流量劫持或服务不可用。可以修改配置直接影响线上运行行为。生产环境中这是一个严重的安全风险。本文结合一个真实的 Spring Cloud Alibaba 项目基于 YuDao Cloud 的 IoT 环境控制系统详细介绍 Nacos 鉴权的完整配置方法。项目中 Nacos 的使用方式在本项目中Nacos 同时承担注册中心和配置中心两个角色。以网关模块和业务服务为例典型配置如下# yudao-gateway/src/main/resources/application.yamlspring:cloud:nacos:server-addr:127.0.0.1:8848discovery:namespace:devconfig:namespace:dev注册/配置注册/配置注册/配置注册/配置注册/配置⚠️ 未鉴权时任何人可访问yudao-gatewayNacos Server8848yudao-module-iotkityudao-module-iotserviceyudao-module-huazhiqiaoyudao-server 攻击者我们的踩坑时间线Day 1开启nacos.core.auth.enabledtrue重启 Nacos控制台正常登录。以为搞定了下班。Day 1 晚上监控告警所有服务注册失败。日志里刷屏NacosException: ErrCode: -401, ErrMsg: unknown user!原因只改了 Server忘了给 6 个微服务客户端加username/password。Day 2客户端全部加上认证信息服务恢复。但安全团队扫描报告“Nacos 使用默认 Token 密钥存在 CVE-2021-29441 风险”。原因token.secret.key没改用的还是官方默认值。Day 3替换密钥同时发现server.identity也是默认值QVD-2023-6271。一并修复安全扫描通过。Nacos Server 端开启鉴权修改 Nacos 配置文件编辑 Nacos 安装目录下的conf/application.properties### 开启鉴权核心开关默认 false nacos.core.auth.enabledtrue ### 鉴权类型目前仅支持 nacos nacos.core.auth.system.typenacos ### 自定义 Token 密钥Base64 编码至少 32 字符原文 ### 重要必须替换默认值否则等于没开鉴权 nacos.core.auth.plugin.nacos.token.secret.keyeW91ci1jdXN0b20tc2VjcmV0LWtleS1hdC1sZWFzdC0zMi1jaGFyYWN0ZXJz ### Token 有效期秒默认 180005小时 nacos.core.auth.token.expire.seconds18000 ### 服务端身份识别 key/value集群节点间通信用 ### 同样必须自定义不能为空或使用默认值 nacos.core.auth.server.identity.keymyServerIdentity nacos.core.auth.server.identity.valuemy-unique-identity-value-2024关键参数说明参数说明注意事项nacos.core.auth.enabled鉴权总开关设为true才生效token.secret.keyJWT 签名密钥必须修改默认值Base64 编码原文 ≥ 32 字符server.identity.key/value集群间身份识别必须修改默认值防止伪造节点加入集群token.expire.secondsToken 有效期按安全策略调整不宜过长默认值的危害Nacos 1.x/2.x 历史上多次因默认密钥被利用导致安全漏洞CVE-2021-29441绕过鉴权直接访问 APIQVD-2023-6271利用默认identity绕过鉴权默认secret.keySecretKey012345678901234567890123456789012345678901234567890123456789是公开的任何人可以用它伪造 Token⚠️ 开启鉴权但不修改默认密钥 形同虚设。Docker 部署方式如果通过 Docker 部署 Nacos用环境变量配置# docker-compose.yamlservices:nacos:image:nacos/nacos-server:v2.2.3environment:-NACOS_AUTH_ENABLEtrue-NACOS_AUTH_TOKENeW91ci1jdXN0b20tc2VjcmV0LWtleS1hdC1sZWFzdC0zMi1jaGFyYWN0ZXJz-NACOS_AUTH_IDENTITY_KEYmyServerIdentity-NACOS_AUTH_IDENTITY_VALUEmy-unique-identity-value-2024ports:-8848:8848-9848:9848重启验证重启 Nacos 后直接访问http://nacos-ip:8848/nacos/v1/cs/configs?dataIdxxxgroupxxx应返回403或提示鉴权失败说明配置生效。Spring Cloud 客户端适配Nacos Server 开启鉴权后所有连接它的微服务客户端必须配置用户名和密码否则会出现NacosException: Client not connected, current status: STARTING ErrCode: -401, ErrMsg: unknown user! caused: Request nacos server failed配置方式在每个微服务的配置文件中添加username和passwordspring:cloud:nacos:server-addr:127.0.0.1:8848username:nacos# Nacos 控制台的用户名password:your-password# Nacos 控制台的用户密码discovery:namespace:devconfig:namespace:devspring: cloud: nacos: server-addr: 127.0.0.1:8848 username: ${NACOS_USERNAME:nacos} password: ${NACOS_PASSWORD:} discovery: namespace: dev config: namespace: dev​注意username/password放在spring.cloud.nacos层级下对discovery和config同时生效。也可以分别配置spring:cloud:nacos:discovery:server-addr:127.0.0.1:8848namespace:devusername:nacospassword:your-passwordconfig:server-addr:127.0.0.1:8848namespace:devusername:nacospassword:your-password本项目需要修改的模块根据项目结构以下模块都连接了 Nacos全部需要适配模块配置文件位置yudao-gatewayyudao-gateway/src/main/resources/application.yamlyudao-serveryudao-server/src/main/resources/application.yaml/application-local.yamlyudao-module-iotkit-bizsrc/main/resources/application-local.yamlyudao-module-iotservice-bizsrc/main/resources/application-local.yamlyudao-module-huazhiqiao-biz对应的application*.yaml其他微服务模块各自的application*.yaml密码安全管理不要在 Git 中明文存储 Nacos 密码。推荐方案方案一环境变量替换spring:cloud:nacos:username:${NACOS_USERNAME:nacos}password:${NACOS_PASSWORD:}启动时注入exportNACOS_USERNAMEnacosexportNACOS_PASSWORDyour-secure-passwordjava-jaryudao-gateway.jar方案二Nacos 自身配置管理bootstrap 阶段的鸡生蛋问题bootstrap 阶段需要连接 Nacos 读取配置所以 Nacos 自身的账号密码无法通过 Nacos 配置中心下发。只能用环境变量、启动参数或密钥管理服务解决。方案三Jasypt 加密spring:cloud:nacos:password:ENC(加密后的密文)配合jasypt-spring-boot使用启动时传入主密钥。Nacos 控制台用户管理开启鉴权后务必做好控制台的用户管理修改默认密码附完整操作代码方式一控制台修改推荐登录后 → 权限控制 → 用户列表 → 编辑 nacos 用户 → 修改密码方式二数据库直接修改// 生成 BCrypt 密文Spring Security 方式importorg.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;publicclassPasswordGenerator{publicstaticvoidmain(String[]args){BCryptPasswordEncoderencodernewBCryptPasswordEncoder();StringnewPasswordYourSecurePassword2024;Stringencryptedencoder.encode(newPassword);System.out.println(加密后密码encrypted);// 输出示例$2a$10$Rv3wfrJDtXxQrKw8kqTz8OpF...}}-- 更新数据库Nacos 使用内置 Derby 或外置 MySQLUPDATEusersSETpassword$2a$10$刚才生成的密文WHEREusernamenacos;-- 验证更新SELECTusername,passwordFROMusersWHEREusernamenacos;方式三使用 Nacos 官方提供的密码工具# Nacos 2.2 提供命令行工具cdnacos/binshpassword-reset.sh-unacos-pNewPassword123创建专用账号为不同服务或团队创建独立账号按需分配命名空间权限账号用途权限admin管理员全部读写app-readonlyCI/CD 或监控只读app-gateway网关服务指定 namespace 读写app-iotIoT 业务模块指定 namespace 读写命名空间级别权限控制在控制台「权限控制 → 角色管理」中可以细粒度控制每个角色对不同 namespace 的读/写权限实现最小权限原则。版本兼容速查Spring Cloud AlibabaNacos ClientNacos Server鉴权支持备注2021.0.4.02.0.4≥ 2.0.4✅ 完整本项目使用2021.0.1.02.0.1≥ 2.0.1⚠️ Token 刷新有 Bug建议升级2.2.x1.4.x1.4.x⚠️ 仅基础鉴权不推荐生产使用如果你的 Nacos Client 2.0.4开启鉴权后可能遇到 Token 过期不自动续期的问题。安全加固 Checklist复制到你的运维文档逐项打勾P0开启nacos.core.auth.enabledtrueP0替换token.secret.key不是默认的SecretKey0123P0替换server.identity.key/value不为空且非默认P0修改nacos用户默认密码不是nacosP1客户端密码通过环境变量注入不在 Git 中明文存储P1Nacos 8848/9848 端口仅限内网访问P1Nacos 控制台启用 HTTPSP2为不同服务创建独立账号P2建立密钥轮换机制P2开启访问日志审计下一步现在就去检查执行文章开头的 curl 命令确认你的 Nacos 是否裸奔按 Checklist 加固P0 项今天内完成P1 项本周内完成扩展阅读Nacos 官方鉴权手册CVE-2021-29441 分析Nacos 集群 TLS 配置如果这篇文章帮你避免了一次安全事故欢迎点赞/收藏/转发给你的运维同事
RELATED

相关推荐

C# GDI+发生一般性错误(A generic error occurred in GDI+))

C# GDI+发生一般性错误(A generic error occurred in GDI+))

C# GDI发生一般性错误(A generic error occurred in GDI)) C# GDI发生一般性错误(A generic error occurred in GDI)) 解决思路: 因为 .net GDI 是对底层 的封装。 所以可以尝试用 Marshal.GetLastWin32Error();函数获…

📅 2026/10/22 2:36:36
.net core webapi 添加 swagger 调试

.net core webapi 添加 swagger 调试

.net core webapi 添加 swagger 调试 开发环境:Visual Studio 2019 为解决前后端苦于接口文档与实际不一致、维护和更新文档的耗时费力等问题,swagger应运而生,同时也解决了接口测试问题。话不多说,直接说明应用步骤。 新建一个A…

📅 2026/10/14 7:36:45
PowerShell 获取AD域用户属性

PowerShell 获取AD域用户属性

1、查看指定用户信息Get-ADUser -Identity zhangsan# 显示 DistinguishedName : CNzhang san,OUSHA,DCmsh,DClocal Enabled : True GivenName : zhang Name : zhang san ObjectClass : user ObjectGUID : 7aa0a36a-4e9f-48b8-87dd…

📅 2026/10/23 9:15:57
MORE NEWS

更多资讯

📰

从JDBC到Spring JDBC:手写ORM框架的核心原理与设计实践

简介:这份PDF课程以Spring JdbcTemplate为起点,面向有一定Java基础、希望深入理解数据库访问层封装的开发者,讲解如何从零手写一个轻量级ORM框架。资源共1个PDF文件,压缩包约940KB,内容聚焦JDBC底层原理与结果集映射、…

📰

影刀RPA进阶教程:合并计算与跨表引用——多表关联不用VLOOKUP

影刀RPA进阶教程:合并计算与跨表引用——多表关联不用VLOOKUP 每个做Excel的人都体会过VLOOKUP的煎熬:两个表关联,函数一拖几千行,公式刷新半天,列一插就#N/A,表一卡就未响应。等你要三个表以上互相引用、还…

📰

附件二:《三档悬赏金额与成果认定标准》

附件二《三档悬赏金额与成果认定标准》文件编号:GG3M–KC–A02 所属文件:《GG3M 全球 Kucius Conjecture 永久开放悬赏公告》 发布机构:鸽姆智库(GG3M Think Tank) 命题提出者:Lonngdong Gu(贾龙…

📰

基于多通信半径与跳距加权的DV-HOP定位改进MATLAB实现

简介:这份资源面向无线传感器网络(WSN)方向的研究者与开发者,聚焦传统DV-Hop定位算法误差偏大的问题,提供一套基于多通信半径与跳距加权策略的改进实现。算法通过引入多通信半径适应节点通信能力差异,并对不…

📰

5G认证笔试通关指南:协议细节与易错点解析

简介:面向通信从业者与5G入门备考人员的5G考试基础试题练习文档,聚焦NR帧结构、EN-DC、Modem、beam report、5G参数集等核心考点,帮助读者在自测中梳理知识盲区、巩固协议细节。压缩包内共1个doc文件,约141KB,内容以单…

📰

避坑指南!2026年合规AI论文平台盘点 适配全学科专业写作需求

到了2026年,越来越多的人开始使用AI写论文工具来帮助完成学术写作。特别是在写硕士或博士那种长篇论文时,大家发现普通的AI论文写作工具经常让人失望。因为它们写出来的内容往往理论不够深入,逻辑也不够紧密,很难满足专业论文的要…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬