nacos开启鉴权与配置加密

server/2024/11/19 23:09:21/

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、Nacos漏洞复现

1.1.查看配置

1.2.查看用户列表

1.3.注册新用户

二、Nacos开启鉴权

三、变更配置与信息加密

1.变更配置

2.信息加密

四、增强安全性

五、常见问题

5.1.提示nacos启动异常

5.2 模块无法启动

5.3 提示缺少字段

总结


前言

        Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。使用 Nacos 简化服务发现、配置管理、服务治理及管理的解决方案,让微服务的发现、管理、共享、组合更加容易。随着nacos被广泛使用,也逐渐暴露一些的漏洞,官方给出了一些建议,具体需要用户自行维护。

本篇简单介绍实际运用过程遇到的问题,以及处理过程,以备后续参考

一、Nacos漏洞复现

在2.2.1之后的版本,默认不需要登录,直接就到的管理界面,所有信息一目了然,如果暴露在外网,使用默认端口,严重威胁到数据安全。虽然2.2.1的版本之前的版本有登录界面限制,一旦nacos没有开启权限认证,即nacos.core.auth.enabled = false,在这种情况下,通过一些请求就可以绕过nacos的权限认证。

这里列举常见的三种方式。

1.1.查看配置

在未登录的情况下,在浏览器中直接发起请求

http://127.0.0.1:18848/nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=&search=accurate&accessToken=&username=

这样直接可以看到返回了配置列表,如图:

1.2.查看用户列表

在未登录的情况下,在浏览器中直接发起请求,能拿到所有的用户信息。

http://127.0.0.1:18848/nacos/v1/auth/users?pageNo=1&pageSize=10

 同样的方式,也可以查询出所有的角色,如下图:

 提示:在2.2.1版本之后,已经直接报参数错误了

1.3.注册新用户

在未登录的情况下,通过第三方工具(postman或apifox)以post方式访问该请求,并传入指定参数,可以直接新增用户

http://127.0.0.1:18848/nacos/v1/auth/users?username=test&password=123456

 执行结果如下图:

二、Nacos开启鉴权

关于鉴权,官方文档:Authorization,相关参数说明如下:

接下来,介绍本如何按照文档来实现鉴权,这里以2.3.2版本为例,步骤如下:

修改nacos\conf文件夹下的application.properties文件中的部分属性

  • 开启鉴权

nacos.core.auth.enabled=true

  • 默认鉴权插件用于生成用户登陆临时accessToken所使用的密钥,这是采用base64生成,可以使用在线工具

Base64 在线编码解码 | Base64 加密解密 - Base64.us

在线加密解密

nacos.core.auth.plugin.nacos.token.secret.key=ZmF1bHRUb2tlblNlY30MjAyNDEwMTYxMTAzJldEtlebmFjb3NDb3JlQXV0aERlUNyZWF0ZUF

  • 用于替换useragent白名单的身份识别key和value

nacos.core.auth.server.identity.key=npsServerIdentity
nacos.core.auth.server.identity.value=customSecurity

 添加或修改后的配置如图:

全部配置好,无需重启nacos,刷新页面,很可能会出现下面的情况

此时,只需要关闭提示,点击用户名,登出,然后重新登录即可。

若后期还是会出现,那可能是因为在nacos的sql脚本中没有针对用户权限的数据录入 ,所以需要执行sql:

INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

按照上面的步骤设置好后,通过网页直接访问或postman的GET方式访问,都会被拒绝

三、变更配置与信息加密

1.变更配置

当nacos开启鉴权后,其它微服务会报错,而直接启动其他服务,其他服务也无法正常连接nacos,出现403错误,此时,需要再其他服务的配置文件中加上如下配置。

 spring.cloud.nacos.username=nacos

 spring.cloud.nacos.password=nacos

2.信息加密

从上图的配置可以看出,naocs以明文的形式出现,这样存在被泄露的风险,针对这种情况,可以采用jasypt加密,加密后效果,如图:

关于如何使用 jasypt加密,可以参考这里

四、增强安全性

  • 不采用默认端口,变更为端口
  • 设置只监听本地
  • 采用nginx代理,设置白名单
  • http {# ...upstream nacos_server {server nacos-server-ip:2838;}server {listen 1789;server_name nacos.example.com;location / {proxy_pass http://nacos_server;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 设置白名单allow 123.123.123.123; # 允许访问的 IPallow 234.234.234.234; # 可以添加更多允许的 IPdeny all; # 拒绝其他所有 IP}}# ...
    }

  • 开启防火墙,设置入站规则
  • 关闭登录界面

五、常见问题

5.1.提示nacos启动异常

若提示“com.alibaba.nacos.api.exception.NacosException: <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'>Thu Nov 14 17:04:16 CST 2024</div><div>There was an unexpected error (type=Forbidden, status=403).</div><div>unknown user!</div></body></html>”,导致无法启动的,需要检查账号密码是否正确

5.2 模块无法启动

若启动模块时,提示“Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true”,如图:

解决步骤:

检查bootstrap.yml是否配置了相关信息,即同名的bean覆盖,如下:

spring: main:allow-bean-definition-overriding: true

如果配置了,还是启动报错,可以采用在启动类加上配置来解决,示例代码:

@EnableDiscoveryClient
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
public class DemoApplication{public static void main(String[] args)  {SpringApplication application = new SpringApplication(DemoApplication.class);application.setAllowBeanDefinitionOverriding(true);application.run(args);    	}
}

5.3 提示缺少字段

如果下载使用最新nacos,延用旧的数据库,在启动nacos可能会出现缺少字段提示

Unknown column 'encrypted_data_key' in 'field list'

 此时,需要分别在3张表添加该字段

ALTER TABLE config_info ADD COLUMN `encrypted_data_key` text NOT NULL  COMMENT '秘钥' ;

ALTER TABLE config_info_beta ADD COLUMN `encrypted_data_key` text NOT NULL COMMENT '秘钥' ;

ALTER TABLE his_config_info ADD COLUMN `encrypted_data_key` text NOT NULL COMMENT '秘钥' ;

总结

低版本的nacos很有必要升级,或者开启鉴权,以保证数据安全,特别是1.x版本升级到2.0至关重要。nacos作为开源的项目,在实际运用中尽量少采用默认的配置,以提高nacos的安全性。

如果你还知道其他问题,欢迎补充或更正。 


http://www.ppmy.cn/server/143317.html

相关文章

为了数清还有几天到周末,我用python绘制了日历

日历的秘密 昨天&#xff0c;在看小侄子写作业的时候&#xff0c;发现了一个秘密&#xff1a;他在“演算纸”&#xff08;计算数学题用的草纸&#xff09;上画了非常多的日历。对此我感到了非常的困惑&#xff0c;“这是做什么的&#xff1f;” 后来&#xff0c;经过了我不懈…

【Rust中的项目管理】

Rust中的项目管理 前言Package&#xff0c;Crate&#xff0c;Module &use &#xff0c;Path通过代码示例解释 Crate&#xff0c;Module &#xff0c;use&#xff0c;Path创建一个package&#xff1a;代码组织化skin.rs 中的代码struct & enum 相对路径和绝对路径引用同…

基于C语言easyX实现的推箱子游戏

基于80x86汇编语言的推箱子游戏 一、游戏背景介绍 推箱子是一款众所周知的益智游戏&#xff0c;此游戏只有一个目标&#xff1a;将游戏中的所有箱子推到指定位置。简单易懂的游戏规则是此款游戏成功的根本原因。 此游戏具有如下特点&#xff1a;简便的操作、复杂的关卡以及层…

20241114软考架构-------软考案例15答案

每日打卡题案例15答案 15.【2016年真题】 难度&#xff1a;一般 阅读以下关于应用服务器的叙述&#xff0c;在答题纸上回答问题1至问题3。&#xff08;25分&#xff09; 【说明】 某电子产品制造公司&#xff0c;几年前开发建设了企业网站系统&#xff0c;实现了企业宣传、产品…

学习笔记023——Ubuntu中设置Java项目的 jar 包自启动

目录 1、设置 crontab 定时任务 2、定时脚本 startJar.sh内容 3、查看jar包进程 4、如何杀死进程 背景&#xff1a;有个需求&#xff0c;Ubuntu服务器中&#xff0c;虽有Java环境&#xff0c;但是没有tomcat。 想要运行jar包&#xff0c;只能通过java -jar命令了。 但是我…

基于 Python Django 的二手房间可视化系统分析

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

小程序-基于java+SpringBoot+Vue的实习生管理系统设计与实现

项目运行 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境&#xff1a;Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

使用GDB或Delve对已经运行起来的Go程序进行远程调试

同步发布在我的博客&#xff0c;欢迎来点赞。 使用 GDB 或 Delve 对已经运行起来的 Go 程序进行远程调试 使用 GDB 或 Delve 对已经运行起来的 Go 程序进行远程调试 背景 Java 程序可以很方便地通过 jdwp 参数指定一个对外端口进行远程调试&#xff0c;如 java \ -agentlib…