vnc加固
0x00 认识VNC
先我们看看VNC运行的工作流程:
-
VNC客户端通过浏览器或VNC Viewer连接至VNC Server;
-
VNC Server传送一个对话窗口至客户端,要求输入连接密码(可能为空),以及存取的VNC Server显示装置;
-
在客户端输入连接密码后,VNC Server验证客户端是否具有存取权限;
-
若是客户端通过VNC Server的验证,客户端即要求VNC Server显示桌面环境;
-
被控端将画面显示控制权交由VNC Server负责;
-
VNC Server将把被控端的桌面环境利用VNC通信协议送至客户端,并且允许客户端控制VNC Server的桌面环境及输入装置。
0x01 VNC攻击工具:vncpwdump
国内很少没有针对VNC攻击技术的专门研究团队,大部分的VNC攻击技术和相关工具都是国外攻击者推出的,所以如果要深入研究VNC的攻防技术,在国内比较难找到新的技术资料,如这里将要介绍的Vncpwdump。Vncpwdump是一个很早以前就已经推出的VNC综合性的攻击和破解工具,最新的可以针对各版本VNC进行密码破解和攻击的vncpwdump是1.0.6版,具有非常强悍的各项功能。Vncpwdump是个开源的程序,不但可以下载到它,还可以下载到它的源代码进行修改和增加、删除相关功能。
Vncpwdump的主要功能是获取VNC的密码,它提供多种获取方式,比如:从NTUSER.DAT文件中获取;从命令行输入获取;注入VNC线程获取;注册表中获取等方式。
0x02 使用vncpwdump进行攻击模拟
Vncpwdump的功能很多,从它的使用界面来看,有如下的功能参数:
下面对各参数的具体含义和使用方式做简单演示。
首先是"-c"和"-s"参数,这两个参数的意义是从注册表的"HKEY_CURRENT USER"或"HKEY_LOCAL MACHINE"下读取VNC的密码,因为版本不同的关系,上述两个注册表键值中的其中一个会存在VNC的密码。其中"HKCU "是简写,代表注册表中得"HKEY_CURRENT_USER"位置。当我们打开注册表,找到相应位置得时候密码内容就逐步浮出水面,可以找到里面有一行如下显示:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\RealVNC\WinVNC4]
"Password"=hex:49,40,15,f9,a3,5e,8b,22
"SecurityTypes"="VncAuth"
"ReverseSecurityTypes"="None"
"QueryConnect"=dword:00000000
"QueryOnlyIfLoggedOn"=dword:00000000
"PortNumber"=dword:0000170c
"IdleTimeout"=dword:00000e10
"HTTPPortNumber"=dword:000016a8
"LocalHost"=dword:00000000
"Hosts"="+,"
"AcceptKeyEvents"=dword:00000001
"AcceptPointerEvents"=dword:00000001
"AcceptCutText"=dword:00000001
"SendCutText"=dword:00000001
"DisableLocalInputs"=dword:00000000
"DisconnectClients"=dword:00000001
"AlwaysShared"=dword:00000000
"NeverShared"=dword:00000000
"DisconnectAction"="None"
"RemoveWallpaper"=dword:00000000
"RemovePattern"=dword:00000000
"DisableEffects"=dword:00000000
"UpdateMethod"=dword:00000001
"PollConsoleWindows"=dword:00000001
"UseCaptureBlt"=dword:00000001
"UseHooks"=dword:00000001
"Protocol3.3"=dword:00000000
这password后得值就是加密的密码,虽然我们不能直接读懂他,我们可以使用多种方法来破解,比如VNCX4和我们下面要介绍的vncpwdump均可.
以VNC 4为例,使用"-s"参数可以直接得到相关的密码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gYFAC0DW-1690884037395)(./pic/2019-07-30-01-48-30.png)]
“-r"参数后的说明是"decrypts password in ”,也就是从文件中读出密码,通常情况下,攻击者会尝试使用"NTUSER.DAT"文件读取密码。"NTUSER.DAT"和"NTUSER.ini"都属于系统的用户配置文件,里面存储了一些用户的相关配置信息,有一些版本的VNC会将密码存储于这个文件之中,不过大家不必担心,一般情况下这个文件无法读出密码。
“-d"参数的说明是"dumps the password by injecting into running process”,意思是以注入进程的方式读取密码。在实际的网络中,考虑到服务器的稳定性,一般不适用这个参数进行攻击。
“-k"参数和”-e"参数是相对应的配套参数,“-k"的作用是在获得系统中存在的加密VNC密码以后解密,”-e"参数的作用是将没有经过VNC加密的密码进行加密。
先看看"-e"是什么效果。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vwhEzxcw-1690884037396)(./pic/2019-07-30-01-51-03.png)]
从上图中可以看到,使用命令后得到加密后的KEY是"494015F9A35E8B22",实际上,这个key如果是VNC的链接密码的话,VNC会将这个密码存放在注册表中的一个固定的地方,每当用户连接的时候都会验证,如果管理员修改密码,这个值也跟着改变。再看看使用"-k"参数进行解密的命令:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P7W5H5Df-1690884037396)(./pic/2019-07-30-01-50-45.png)]
可以看到密码"123456"已经被破解出来。
“-s"和”-c"参数也是成对使用的,功能类似。“-s"参数用于直接修改VNCserver的链接密码,”-c"参数用户修改当前用户的密码。
举例来说,如果使用"-s"参数将vnc的链接密码改成"123",则使用如下命令
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ALPHx4VS-1690884037397)(./pic/2019-07-30-01-49-44.png)]
这里需要注意的是,vncpwdump的各个参数都是区分大小写的,大小写不同作用也不同,大家在实际使用过程中一定要注意区分。在实际的网络攻击中,当攻击者无法获得VNC密码时候,就可以使用"-s"参数来强制改变VNC密码,但这样做也会被管理员发现。
0x03 针对VNC的扫描
在这里我们使用的是vncscan工具。运行截图如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mvhc1ejf-1690884037397)(./pic/2019-07-30-01-49-58.png)]
从上图可知,这个程序主要包含3个部分,分别是"target"、“scantype”、“option”,其中"target"用于定义扫描的IP地址范围,"scantype"确定扫描的方式,"option"是附带的其他参数。
举例来说,要批量扫描内部网络中安装了VNC的计算机,确定IP地址段为192.168.0.1-192.168.0.254,VNC默认端口是5900,这样需要构造的命令如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cxB9KQMW-1690884037397)(./pic/2019-07-30-01-50-13.png)]
其中有6个输出参数,分别如下:
"FOUND" :表示得到的结果数据;"PORT":扫描的端口数;"IP": 扫描的IP数;"STATUS": 完成进度"THREADS": 线程;"TOTAL/REMAINING":用时;
从结果中我们看出192.168.0.243开放了5900端口。在实际的攻击过程中,攻击者往往都会利用自己控制的肉鸡进行大范围的扫描,如果只通过在CMD下运行并查看结果,这样比较繁琐,所以这个扫描程序会在程序目录生成一个TXT文件,里面有扫描结果的记录。例如:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cMkotLod-1690884037398)(./pic/2019-07-30-01-50-22.png)]
VNC_bypauth.txt文件会记录开放5900端口的IP地址及VNC状态。其中只有"VULNERABLE"是存在直接可以利用的漏洞,可以被攻击者利用的,而"patched,banned"这两种状态没有用。
0x04 加固方法
- 修改默认端口,设置强口令
修改启动文件vncserver
# vim /usr/bin/vncserver
查找5900,修改两处地方$vncPort = 5900 + $displayNumber;if (!bind(S, pack('S n x12', $AF_INET, 5900 + $n)))
为$vncPort = 15900 + $displayNumber; //数字自定义,但不能与其他端口冲突,最好选择10000以后的端口if (!bind(S, pack('S n x12', $AF_INET, 15900 + $n))) //与上面的自定义的数字保持一致
- 限制访问ip
利用iptables来限制ip访问
iptables -A INPUT -i eth0 -p tcp -s 192.168.1.1/24 --dport 5901 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 5901 -m state --state ESTABLISHED -j ACCEPT
- 使用ssh隧道连接登录
服务器:
- 配置vnc只允许本地访问
- vim编辑完文件后,保存并重启VNC服务端。
本地客户端:
- 假定服务器ip 是 128.128.128.128
- 假定服务器SSH 端口是 8888
ssh -v -C -L 5901:localhost:5901 root@128.128.128.128 -p 8888
登录VNC客户端:
只需将vnc服务器填本机即可。
VNC SERVER:127.0.0.1:5901
拓展:民生银行openstack中的vnc加固方法
1 前言
在构建企业私有云时,除了平台的功能性和稳定性,安全性也是非常重要的因素,尤其对于银行业,数据中心以及监管部门对平台的安全性要求更高。
OpenStack 是 IaaS 的开源实现,经过几年的发展,OpenStack 的功能越来越完善,运行也越来越稳定,目前已经成为企业构建私有 IaaS 云的主流选择之一。
民生银行从 2016 年就开始研究和使用 OpenStack 了,不仅积累了大量的 OpenStack 云平台开发和运维经验,还针对 OpenStack 平台的安全性进行了探索与研究,对社区 OpenStack 进行了大量的安全加固优化,本文接下来将详细分享我们针对开源 OpenStack 的安全加固优化方案。
2 配置文件明文密码加密
2.1 为什么明文密码需要加密
密码是非常重要的敏感数据,一旦密码被泄露,系统就有可能被非授权人员利用导致信息泄露、篡改,因此密码的安全性保障是企业的重中之重工作。避免在服务器上保存文本明文密码是防止密码泄露的有效手段之一,对于银行业来说,也是监管部门的硬性要求之一。
目前我们已基于开源 OpenStack 构建了多套 IaaS 云平台,社区 OpenStack 配置文件使用的都是明文密码存储,存在巨大的安全隐患,社区针对这个问题也有讨论,。不过至今社区还没有现成的配置文件密码加密方案,但已经在尝试使用 Secrets Management 管理密码,如 Castellan,详细文档可参考社区关于 secrets-management 的讨论,不过该方案离完全实现可能还需要一段时间。
然而由于我们线上系统的安全要求,我们对配置文件密码加密具有更迫切的需求,不得不在社区方案实现前完成 OpenStack 密码安全加固,对明文密码进行整改,对配置文件包含的所有敏感数据进行加密处理。
3 计算节点 VNC 加密
3.1 OpenStack 虚拟机 VNC 简介
虚拟机的 VNC 是非常重要的功能,类似于物理服务器的带外 console,能够不依赖于虚拟机操作系统的网络进行远程访问与控制。当虚拟机操作系统出现故障或者网络不通时,往往需要通过 VNC 进行远程连接修复。
OpenStack 原生支持 Web VNC 功能,用户可通过 Nova API 获取虚拟机的 VNC 链接,VNC 链接会带上一个授权的临时 Token。用户访问 Web VNC 时其实访问的是 Nova 的 nova-novncproxy 服务,nova-novncproxy 会首先检查 Token 是否有效,如果有效则会转发到对应虚拟机所在计算节点监听的 VNC 地址,否则连接将会被强制阻断。
因此,用户通过 OpenStack 平台访问虚拟机 VNC 是安全的,能够有效阻止非授权人员通过端口扫描非法访问 VNC。
然而,原生 OpenStack 的 Libvirt Driver 目前还没有实现 VNC 连接密码认证功能,意味着非法人员可以不需要任何认证直接连接计算节点绕过 OpenStack 访问虚拟机 VNC,利用 VNC 可发送电源指令或者 Ctrl+Alt+Delete 指令重启虚拟机并进入单用户模式,绕过操作系统 root 认证直接登录虚拟机,这显然存在巨大的安全隐患。
社区针对这个问题也有讨论,但一直没有实现,参考社区 bug #1450294[4]。
3.2 VNC 加密优化
针对如上 OpenStack 虚拟机没有配置 VNC 密码问题,我们对 OpenStack 进行了二次开发,增加了 password 参数配置 VNC 密码,核心代码如下:
@staticmethod
def _guest_add_video_device(guest):# ...if CONF.vnc.enabled and guest.virt_type not in ('lxc', 'uml'):graphics = vconfig.LibvirtConfigGuestGraphics()graphics.type = "vnc"if CONF.vnc.keymap:graphics.keymap = CONF.vnc.keymapif CONF.vnc.vnc_password:graphics.password = CONF.vnc.vnc_passwordgraphics.listen = CONF.vnc.server_listenguest.add_device(graphics)add_video_driver = True# ...return add_video_driver
如上实现了新创建虚拟机添加 VNC 密码功能,但是对正在运行的虚拟机并无影响,如果要使 VNC 密码生效必须重启虚拟机。但由于我们线上环境已经有业务在运行,重启虚拟机意味着必须中断业务,这显然不能接受。虚拟机不重启如何让其重刷配置呢?我们自然想到了虚拟机热迁移办法,虚拟机从一个宿主机热迁移到另一个宿主机,理论上会重新生成虚拟机配置,而又几乎对业务无影响。
然而当我们在测试环境上验证时发现虚拟机在线迁移并不会更新配置,于是我们又分析了虚拟机在线迁移的流程,发现在源端更新 xml 配置文件时没有添加 VNC 密码,该功能代码位于 nova/virt/libvirt/migration.py
的 _update_graphics_xml( )
方法:
def _update_graphics_xml(xml_doc, migrate_data):listen_addrs = graphics_listen_addrs(migrate_data)# change over listen addressesfor dev in xml_doc.findall('./devices/graphics'):gr_type = dev.get('type')listen_tag = dev.find('listen')if gr_type in ('vnc', 'spice'):if listen_tag is not None:listen_tag.set('address', listen_addrs[gr_type])if dev.get('listen') is not None:dev.set('listen', listen_addrs[gr_type])return xml_doc
我们修改了该方法实现,增加了 VNC 密码的更新,经过验证,所有虚拟机通过在线迁移方法增加了 VNC 密码认证功能。
3.3 用户 VNC 连接
前面提到用户是通过 Nova
的 novncproxy
代理访问虚拟机 VNC 的,novncproxy
北向接收用户请求,南向连接计算节点的 VNC server,由于我们的 VNC server 增加了密码认证功能,因此 novncproxy
就无法直接连接 VNC server 了。
由于 VNC 使用了 RFB(Remote Frame Buffer)协议进行数据传输,我们对 RFB 协议进行了研究,通过重写 (overwrite)(nova/console/websocketproxy.py
的 do_proxy
方法,实现 VNC 密码的代填功能,从而实现用户能够沿用原有的方式通过 OpenStack 标准 API 访问虚拟机 VNC,该部分实现准备在下一篇文章中进行详细介绍。
相关文章:

vnc加固
0x00 认识VNC 先我们看看VNC运行的工作流程: VNC客户端通过浏览器或VNC Viewer连接至VNC Server; VNC Server传送一个对话窗口至客户端,要求输入连接密码(可能为空),以及存取的VNC Server显示装置&#…...

Windows下Nginx安装与配置教程
一、前言 1、Nginx是什么? Nginx是一个开源的Web服务器,同时Nginx也提供了反向代理和负载均衡的功能。 Nginx通常作为负载均衡器暴露在外网接受用户请求,同时也使用其反向代理的功能,将用户的请求转发到实际提供服务的内网服务器…...

Iterator迭代器和Generator生成器
Iterator迭代器和for/of循环原理 Iterator迭代器规范 自己创建一个Iterator类,来实现ES6中的迭代器规范: class Iterator {constructor(assemble) {// assemble:需要迭代的数据结构this.assemble = assemble// index:记录迭代的次数(或者索引)this.index = -1}// 必须具…...

Modbus-RTU协议C#实现
1、安装依赖包 System.IO.Ports 2、读协议 /// <summary>/// Modbus-RTU协议读实例/// </summary>private static void Read(){//组装一个请求报文// 01 03 00 00 00 0A C5 CDbyte slave 0x01;//byte function 0x03; //读单个寄存器byte function 0x01; //…...

Redis学习---大数据技术之Redis(NoSQL简介、Redis简介、Redis安装、五大数据类型、相关配置、持久化)
星光下的赶路人star的个人主页 毅力是永久的享受 文章目录 1、NoSQL1.1 NoSQL数据库1.1.1 NoSQL是什么1.1.2 NoSQL的特点1.1.3 NoSQL的适用场景1.1.4 NoSQL的不适场景 1.2 NoSQL家族 2、Redis简介2.1 Redis官网2.2 Redis是什么2.3 Redis的应用场景2.3.1 配合关系型数据库做高速…...

基于组合双向拍卖的共享储能机制研究(Matlab代码实现)
目录 💥1 概述 📚2 运行结果 2.1 算例数据 2.2 买家中标 2.3 卖家中标 🎉3 文献来源 🌈4 Matlab代码实现 💥1 概述 文献来源: 摘要:为满足共享储能中储能用户的互补性和替代性需求、解决常规单…...

服务机器人有哪些品类
服务机器人是指具备自主运动、感知环境、实现人机交互等能力的机器人,它可以被应用于不同的场景,如餐饮、医疗、物流等行业。根据其功能和应用场景的不同,服务机器人可以分为以下几类:1. 餐饮服务机器人 随着社会发展和人们需…...

3.netty和protobuf
1.ChannelGroup可以免遍历由netty提供,覆盖remove方法即可触发删除channel\ 2.群聊私聊 13.群聊私聊简单原理图 3.netty心跳检测机制,客户端对服务器有没有读写(读,写空闲) //IdleStateHandler(3,5,7,TimeUnite.SECONDS)是netty提供的检测状态的处理器,也加到pipeline,读,写,…...

NLP实践——Llama-2 多轮对话prompt构建
NLP实践——Llama-2 多轮对话prompt构建 1. 问题提出2. prompt的正确形式3. 效果测试4. 结尾 1. 问题提出 最近,META开源了Llama-2模型,受到了广泛的关注和好评,然而,在官方给的使用说明中,并没有对使用方法进行特别细…...

《TCP IP网络编程》第十四章
第 14 章 多播与广播 14.1 多播 多播(Multicast)方式的数据传输是基于 UDP 完成的。因此 ,与 UDP 服务器端/客户端的实现方式非常接近。区别在于,UDP 数据传输以单一目标进行,而多播数据同时传递到加入(注…...

网络基础-认识每层的设备和每层的特点用途
目录 网络层次常见设备各层介绍数据链路层网络层传输层应用层 网络层次 常见设备 各层介绍 数据链路层 有了MAC地址。数据链路层工作在局域网中的,以帧为单位进行传输和处理数据。 网络层 网络层有了IP。不同的网络通过路由器连接成为互联网 路由器的功能: …...

【Linux操作系统】深入解析Linux定时任务调度机制-cronat指令
在Linux操作系统中,定时任务调度是一项重要的功能,它可以让用户在指定的时间或周期性地执行特定的任务。这种机制使得用户能够自动化地执行一些重复性工作,提高工作效率。本文将详细介绍Linux定时任务调度的原理、常用指令和代码示例…...

动手学深度学习(一)预备知识
目录 一、数据操作 1. N维数组样例 2. 访问元素 3. 基础函数 (1) 创建一个行向量 (2)通过张量的shape属性来访问张量的形状和元素总数 (3)reshape()函数 (4)创建全0、全1、…...

item_get-KS-获取商品详情
一、接口参数说明: item_get-根据ID取商品详情 ,点击更多API调试,请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/ks/item_get 名称类型必须描述keyString是调用key(http://o0b.cn/…...

[华为OD] 最小传输时延(dijkstra算法)
明天就要面试了我也太紧张了吧 但是终于找到了一个比较好理解的dijkstra的python解法,让我快点把它背下来!!!! 文章目录 题目dijkstra算法的python实现python解答dfs解法dijkstra解法 题目 先把题目放出来 某通信网络…...

问道管理:总资产大于总市值好吗?
在财政领域,总财物和总市值是两个非常重要的指标。总财物是指公司所有的财物,包括固定财物、流动财物、无形财物等,而总市值则是指公司股票在商场上的总价值。当总财物大于总市值时,这是否是一个好的信号呢?咱们将从多…...

IBM Spectrum LSF (“LSF“ ,简称为负载共享设施) 用户案例
IBM Spectrum LSF (“LSF” ,简称为负载共享设施) 用户案例 IBM Spectrum LSF (“LSF” ,简称为负载共享设施) 软件是业界领先的企业级软件。 LSF 在现有异构 IT 资源之间分配工作,以创建共享,可扩展且容错的基础架构,…...

Pytorch深度学习-----神经网络之非线性激活的使用(ReLu、Sigmoid)
系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用(ToTensor,Normalize,Resize ,Co…...

Gis入门,使用起止点和两个控制点生成三阶贝塞尔曲线(共四个控制点,线段转曲线)
前言 本章讲解如何在gis地图中使用起止点和两个控制点(总共四个控制点)生成三阶贝塞尔曲线。 二阶贝塞尔曲线请参考上一章《Gis入门,如何根据起止点和一个控制点计算二阶贝塞尔曲线(共三个控制点)》 贝塞尔曲线(Bezier curve)介绍 贝塞尔曲线(Bezier curve)是一种…...

Web-7-深入理解Cookie与Session:实现用户跟踪和数据存储
深入理解Cookie与Session:实现用户跟踪和数据存储 今日目标 1.掌握客户端会话跟踪技术Cookie 2.掌握服务端会话跟踪技术Sesssion 1.会话跟踪技术介绍 会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断…...

Springboot设置Https
1、修改配置文件application.yml,并将*.jks放到resource目录下。 server:port: 8080ssl:key-store: classpath:*.jkskey-store-password: *key-store-type: JKSenabled: truekey-alias: boe.com.cn2、添加http转https的配置 Configuration public class TomcatCon…...

Windows 使用 Linux 子系统,轻轻松松安装多个linux
Windows Subsystem for Linux WSL 简称WSL,是一个在Windows 10\11上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,其目标是使纯正的Ubuntu、Debian等映像能下载和解压到用户的本地计算机&#…...

中级课程——弱口令(认证崩溃)
文章目录 什么是弱口令密码生成器分类暴力破解万能密码测试环境工具 什么是弱口令 密码生成器 分类 暴力破解 万能密码 or true --测试环境 工具 九头蛇,超级弱口令爆破工具,bp,...

web自动化测试进阶篇05 ——— 界面交互场景测试
😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…...

NICE-SLAM: Neural Implicit Scalable Encoding for SLAM论文阅读
论文信息 标题:NICE-SLAM: Neural Implicit Scalable Encoding for SLAM 作者:Zihan Zhu, Songyou Peng,Viktor Larsson — Zhejiang University 来源:CVPR 代码:https://pengsongyou.github.io/nice-slam…...

cmake 配置Visual studio的调试命令
配置代码如截图: set_property(TARGET ${TARGET_NAME} PROPERTY VS_DEBUGGER_COMMAND "./consoleTest.exe") set_property(TARGET ${TARGET_NAME} PROPERTY VS_DEBUGGER_COMMAND_ARGUMENTS "./config/labelDriver.cfg") set_propert…...

MPDIoU: A Loss for Efficient and Accurate Bounding BoxRegression--论文学习笔记
超越GIoU/DIoU/CIoU/EIoU MPDIoU让YOLOv7和YOLACT双双涨点 目标检测上的指标对比: 论文地址: [2307.07662] MPDIoU: A Loss for Efficient and Accurate Bounding Box Regression (arxiv.org) 摘要 边界框回归(Bounding Box Regression&am…...

【Uniapp 的APP热更新】
Uniapp 的APP热更新功能依赖于其打包工具 HBuilder,具体步骤如下: 1. 在 HBuilder 中构建并打包出应用程序 具体步骤: 1.点击发行,点击制作wgt包 2.根据需求修改文件储存路径和其他配置,点击确定 3.等待打包完成&a…...

MySQL主从复制配置
Mysql的主从复制至少是需要两个Mysql的服务,当然Mysql的服务是可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。 (1)首先确保主从服务器上的Mysql版本相同 (2)在主服务器上,创建一个充许从数据库来访问的用户slave,密码为:123456 ,然后使用REPLICATION SLAV…...

Linux - 添加普通用户为信任用户
1.添加用户 在Linux系统中,可以使用以下步骤添加用户: 打开终端并以root用户身份登录 输入以下命令以创建新用户(请将username替换为您想要创建的用户名): adduser username 设置该用户的密码,使用以下命…...