Nacos 默认账户密码如何修改防止未授权访问漏洞风险?

文章导读
生产环境必须修改 Nacos 默认账户密码并开启鉴权,尤其是暴露在外网的实例,否则极易被扫描利用。
📋 目录
  1. 快速处理思路
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

生产环境必须修改 Nacos 默认账户密码并开启鉴权,尤其是暴露在外网的实例,否则极易被扫描利用。

先说结论:默认账号密码是公开信息,必须开启鉴权功能并修改默认凭证,同时限制网络访问范围。

  • 先判断:确认当前 Nacos 版本及是否已开启鉴权(nacos.core.auth.enabled)。
  • 优先做:修改配置文件开启鉴权,并通过控制台或数据库脚本修改默认密码。
  • 再验证:使用新密码登录成功,且旧密码无法登录,同时检查服务端日志无异常。

快速处理思路

如果不方便立即重启或修改数据库,可先通过网络策略限制访问来源,但根本解决需要修改配置。核心配置项如下:

# application.properties
nacos.core.auth.enabled=true
nacos.core.auth.default.token.secret.key=YourSecretKeyHere

注意:Secret Key 必须修改为随机字符串,且集群内所有节点保持一致。可使用以下命令生成安全随机串:

openssl rand -hex 32

为什么会这样

Nacos 早期版本或默认安装配置中,鉴权功能往往处于关闭状态,且默认账户密码为 nacos/nacos。这些信息在公开漏洞库和扫描脚本中是常识。一旦服务暴露在公网,攻击者无需任何破解成本即可登录控制台,获取配置信息、篡改服务路由甚至注入恶意配置导致业务中断。开启鉴权并修改密码是最低成本的安全加固手段。

分步处理

以下是基于 standalone 或集群模式通用的加固步骤,操作前请备份配置文件和数据库。

Nacos 默认账户密码如何修改防止未授权访问漏洞风险?

1. 开启鉴权功能

找到 Nacos 安装目录下的 conf/application.properties 文件,修改或添加以下配置:

nacos.core.auth.enabled=true

如果是集群部署,确保所有节点配置一致,否则节点间通信可能因鉴权失败而异常。

2. 修改默认密码

方式一(推荐):如果还能用默认密码登录控制台,登录后直接在“权限控制”页面修改当前用户密码。

方式二(数据库):如果无法登录,需直接修改数据库。注意版本差异:

Nacos 默认账户密码如何修改防止未授权访问漏洞风险?
  • Nacos 2.2.0 及以上:默认使用 BCrypt 加密,直接更新明文密码会导致无法登录。
  • Nacos 2.2.0 以下:通常使用明文密码。

BCrypt 密码生成方法(适用于 2.2.0+):

若本地有 Java 环境,可运行以下代码生成加密串(需引入 spring-security-core 依赖):

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

public class PasswordGen {
    public static void main(String[] args) {
        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
        // 将 newPassword 替换为你的新密码
        System.out.println(encoder.encode("newPassword"));
    }
}

数据库更新 SQL 示例:

-- 请将 $2a$10$... 替换为实际生成的 BCrypt 哈希值
UPDATE users SET password='$2a$10$...' WHERE username='nacos';

3. 修改 Token 密钥

在配置文件中找到 nacos.core.auth.default.token.secret.key,将其修改为长度大于 32 字符的随机字符串。默认密钥是公开的,不修改等于没设防。

# Linux/Mac 生成示例
openssl rand -hex 32

4. 重启服务

配置修改后需重启 Nacos 服务生效。集群环境建议滚动重启,避免服务不可用。

怎么验证是否生效

  • 登录测试:使用新密码登录控制台成功,使用旧密码 nacos/nacos 登录提示失败。
  • 接口验证:调用需要鉴权的 OpenAPI 接口,不带 Token 或带旧 Token 应返回 403 或 401 状态码。
  • 日志检查:查看 logs/start.outlogs/nacos.log,确认启动时无鉴权相关报错,且无异常登录尝试警告。

常见坑

  • 密码加密算法差异:不同版本 Nacos 密码加密方式不同(明文/BCrypt),手动改库时务必确认版本对应的加密规则,否则密码永远验证失败。
  • 集群密钥不一致:集群模式下,各节点的 token.secret.key 必须完全相同,否则节点间同步配置时会报鉴权错误。
  • 客户端未适配:开启鉴权后,所有接入的 SDK 客户端(Spring Cloud Alibaba 等)都需要配置用户名和密码,否则无法拉取配置或服务注册。
  • 默认 Secret 未改:只改密码不改 Token 密钥,攻击者仍可伪造合法 Token 绕过鉴权。
  • 特殊字符问题:生成 Secret Key 时避免使用可能影响配置解析的特殊字符(如空格、换行),推荐使用 hex 格式。

参考来源

  • Nacos 官方文档 - 权限控制:https://nacos.io/zh-cn/docs/v2/guide/user/auth.html
  • Alibaba Nacos GitHub 仓库:https://github.com/alibaba/nacos