背景
安全漏洞修复
升级
注意事项
近期Nacos社区收到关于Nacos鉴权功能通过
token.secret.key
默认值进行撞击,绕过身份验证安全漏洞的问题。社区在2.2.0.1和1.4.5版本已移除了自带的默认值,并在token.secret.key
未传入或非法时阻止Nacos节点启动来提醒用户设置自定义token.secret.key
。考虑到现在的控制台登陆页面并没有进行模块化,无法和是否开启鉴权功能关联,因此暂时需要强制设置token.secret.key
,社区正在进行控制台登陆页面和鉴权功能的关联,待完成后,未开启鉴权的集群将不再强制需要token.secret.key
,开启后仍然强制需要。
https://nacos.io/zh-cn/blog/announcement-token-secret-key.html
人话:原来默认 token.secret.key 及 server.identity 有风险,需要修改。
如何开启鉴权及自定义密钥:
修改 application.properties
nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=true
#自定义密钥时,推荐将配置项设置为Base64编码的字符串,且原始密钥长度不得低于32字符。
# 生成一个32位以上的密钥,然后base64加密
nacos.core.auth.plugin.nacos.token.secret.key=123456
nacos.core.auth.server.identity.key=456789
nacos.core.auth.server.identity.value=456789
为保证用户敏感配置数据的安全,Nacos 提供了配置加密的新特性。降低了用户使用的风险,也不需要再对配置进行单独的加密处理。
https://nacos.io/zh-cn/docs/v2/plugin/config-encryption-plugin.html
人话:数据库要加东西,官方只提供了一条,但 github 上的 issue https://github.com/alibaba/nacos/issues/8559 有 3条
ALTER TABLE config_info ADD encrypted_data_key TEXT NOT NULL COMMENT '秘钥';
ALTER TABLE config_info_beta ADD encrypted_data_key TEXT NOT NULL COMMENT '秘钥';
ALTER TABLE his_config_info ADD encrypted_data_key TEXT NOT NULL COMMENT '秘钥';
修改
token.secret.key
并重启Nacos Server端后,来自Nacos Client的请求将会因无效token被拒绝。直到客户端到达旧token的TTL时间后,才会重新去获取新token。
https://nacos.io/zh-cn/blog/announcement-token-secret-key.html
人话:要把使用旧token的连接尽快过期,不然会影响业务
# 2.1.0版本及更高版本
nacos.core.auth.plugin.nacos.token.expire.seconds=5
默认的过期时间为18000,设置为5s以后,要运行18000s即5个小时以后,再改回18000。
重启集群。
升级步骤
- 将旧的 nacos 过期时间修改为 5s,重启nacos。
sed -i '/nacos.core.auth.default.token.expire.seconds/ s/18000/5/' /data/nacos/conf/application.properties
cd /data/nacos/bin
./shutdown.sh
./startup.sh
5个小时后
- 备份旧的nacos
./shutdown.sh
mv /data/nacos.bak
- 数据库插入的由dba执行
- 下载 nacos-server-2.2.3.tar.gz ,github 下不动的话可以用 https://ghproxy.com/ 这个代理下载。
编辑 application.properties
最后的配置文件如下:
server.servlet.contextPath=/nacos
server.error.include-message=ALWAYS
server.port=8848
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.1.2:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos_config
db.password.0=123456
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.basedir=file:.
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=true
nacos.core.auth.caching.enabled=true
nacos.core.auth.enable.userAgentAuthWhite=false
nacos.core.auth.server.identity.key=123456
nacos.core.auth.server.identity.value=123456
nacos.core.auth.plugin.nacos.token.cache.enable=false
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
nacos.core.auth.plugin.nacos.token.secret.key=123456
nacos.istio.mcp.server.enabled=false
cluster.conf
192.168.96.223:8848
192.168.96.241:8848
192.168.96.82:8848
压缩配置好的nacos,分发到其他nacos服务器,启动即可。
回滚
恢复旧有的 nacos。
mv /data/nacos.bak /data/nacos
./startup.sh