漏洞处理-nacos从2.1.0升级到次新版本的nacos2.5.1版本
前言
记录一下nacos从2.1.0版本升级到2.5.1版本的步骤
主要升级点就是打开了鉴权功能
一、扫描发现的漏洞
支撑的老师联系说绿盟扫描发现了一些漏洞,就开始挨个端口处理。nacos端口这里就出现了两个漏洞

二、升级前准备
先找开发环境升级,观察一段时间。
1. 选择版本
2025年7月14日,查看2版本的最新小版本
地址:https://nacos.io/download/nacos-server/?spm=5238cd80.2ef5001f.0.0.3f613b7crj7X5i
最新的是2.5.1版本
2. 下载镜像:
# 直接下载镜像
docker pull nacos/nacos-server:v2.5.1
# 国内源的话用下面这个
docker pull docker.1ms.run/nacos/nacos-server:v2.5.1
# 下载下来之后修改tag,推到本地仓库
docker tag docker.1ms.run/nacos/nacos-server:v2.5.1 local/library/nacos/nacos-server:v2.5.1
docker push local/library/nacos/nacos-server:v2.5.1
该处使用的url网络请求的数据。
3. 获取2.5.1版本数据库结构文件
下载地址:
https://download.nacos.io/nacos-server/nacos-server-2.5.1.zip?spm=5238cd80.2ef5001f.0.0.3f613b7crj7X5i&file=nacos-server-2.5.1.zip
下载解压后取出mysql-schema.sql文件
4. 检查启动文件差异
nacos就是nacos-quick-start.yaml来启动的,检查一下正在使用的和2.5.1的有没有啥区别
https://github.com/nacos-group/nacos-k8s/blob/master/deploy/nacos/nacos-quick-start.yaml
主要看下port和env,发现没啥特殊变化,修改nacos的版本信息
准备鉴权用到的变量
# 准备密钥
openssl rand -base64 24 | head -c 32
# 生成的密钥如下
TA8rNDQ4GsJF3i4qbqmee1dRCH59Ni2n
# 根据密钥再转
echo -n 'TA8rNDQ4GsJF3i4qbqmee1dRCH59Ni2n' | base64
得到结果就是NACOS_AUTH_TOKEN的值
VEE4ck5EUTRHc0pGM2k0cWJxbWVlMWRSQ0g1OU5pMm4=
新增的鉴权变量信息
- name: NACOS_AUTH_ENABLE
value: "true"
- name: NACOS_AUTH_TOKEN
value: "VEE4ck5EUTRHc0pGM2k0cWJxbWVlMWRSQ0g1OU5pMm4="
- name: NACOS_AUTH_IDENTITY_KEY
value: "nacos"
- name: NACOS_AUTH_IDENTITY_VALUE
value: "nacos"
三、开始升级nacos
1、下载nacos上已有的配置文件
使用配置导出功能将业务配置文件都导出保存,由于我们项目还是用seata,所以把seata-server命名空间下的配置也都导出保存
2、保存记录下已有的命名空间信息
3、关闭nacos服务
kubectl delete -f nacos-quick-start.yaml
4、删除掉外部数据库中的nacos表,并导入新的mysql-schema.sql表结构问题
5、启动nacos服务
kubectl create -f nacos-quick-start.yaml
6、检查nacos日志,查看有无明显ERR日志
没有明显异常日志,页面也可以打开,继续升级
7、初次登陆修改nacos管理员的密码
修改成之前的nacos密码,不要用新的带特殊符号的密码,带特殊符号的话,容易出现转义错误。
8、登陆之后把命名空间和命名空间下的配置项重新导入
至此,nacos升级完成
四、项目其他部分增加nacos鉴权信息
1、后端服务
业务的application.yml文件增加nacos的账号密码配置,configmap和deployment中增加变量参数,然后重新打包就可以正常运行了
application.yml文件

configmap文件
deployment文件
2、前端服务
在nacos_source_url后面追加账号密码信息&username=nacos&password=XXXXXX之后就能正常运行了

3、业务配置中seata配置增加nacos账号密码
增加账号密码信息之后,服务就可以正常注册到seata-server了

五、遇到的问题
1、业务pod未配置鉴权信息问题
解决方式就是后端服务增加nacos账号密码
7:05:06.418 [main] ERROR org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter --
***************************
APPLICATION FAILED TO START
***************************
Description:
Config data resource 'NacosConfigDataResource{properties=NacosConfigProperties{serverAddr='192.168.150.XX:8848', encode='null', group='DEFAULT_GROUP', prefix='null', fileExtension='yaml', timeout=3000, maxRetry='null', configLongPollTimeout='null', configRetryTime='null', enableRemoteSyncConfig=false, endpoint='null', namespace='ab4324b9-0b9e-4c4c-92c5-6f9c8e9c548a', accessKey='null', secretKey='null', ramRoleName='null', contextPath='null', clusterName='null', name='null'', shares=null, extensions=null, refreshEnabled=true}, optional=false, profiles=[Profiles@4fad9bb2 active = '[]', default = '[default]', accepted = '[default]'], config=NacosItemConfig{group='DEFAULT_GROUP', dataId='service-gateway.yaml', suffix='yaml', refreshEnabled=true, preference=null}}' via location 'nacos:service-gateway.yaml' does not exist
Action:
Check that the value 'nacos:service-gateway.yaml' at class path resource [application.yml] from api_gateway-1.0-SNAPSHOT.jar - 3:13 is correct, or prefix it with 'optional:'
17:05:06.426 [Thread-6] WARN com.alibaba.nacos.common.notify.NotifyCenter -- [NotifyCenter] Start destroying Publisher
17:05:06.426 [Thread-1] WARN com.alibaba.nacos.common.http.HttpClientBeanHolder -- [HttpClientBeanHolder] Start destroying common HttpClient
17:05:06.426 [Thread-6] WARN com.alibaba.nacos.common.notify.NotifyCenter -- [NotifyCenter] Destruction of the end
17:05:06.426 [Thread-1] WARN com.alibaba.nacos.common.http.HttpClientBeanHolder -- [HttpClientBeanHolder] Destruction of the end
2、密码带有特殊符号问题
解决方式就是去掉特殊符号
<html><body><h1>Whitelabel Error Page</h1><p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p>
<div id='created'>Fri Jul 23 14:28:47 GMT+08:00 2021</div><div>There was an unexpected error (type=Forbidden, status=403).</div>
<div>unknown user!</div>
总结
2.5.1的这个版本应该可以用一大段时间了
更多推荐


所有评论(0)