Linux应急响应
0x01 Linux日志分析理论
前言
Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。
1.日志简介
日志默认存放位置:/var/log/
查看日志配置情况:more /etc/rsyslog.conf
路径 | 说明 |
---|---|
/var/log/messages | 记录 Linux 内核消息及各种应用程序的公共日志信息 |
/var/log/cron | 记录 crond 计划任务产生的事件信息 |
/var/log/dmesg | 记录 Linux 操作系统在引导过程中的各种事件信息 |
/var/log/maillog | 记录进入或发出系统的电子邮件活动 |
/var/log/lastlog | 记录每个用户最近的登录事件 |
/var/log/secure | 记录用户认证相关的安全事件信息 |
/var/log/wtmp | 记录每个用户登录、注销及系统启动和停机事件 |
/var/log/btmp | 记录失败的、错误的登录尝试及验证事件 |
比较重要的几个日志:
登录失败记录:/var/log/btmp //lastb
最后一次登录:/var/log/lastlog //lastlog
登录成功记录:/var/log/wtmp //last
登录日志记录:/var/log/secure
目前登录用户信息:/var/run/utmp //w、who\users
2.日志分析技巧
常用的shell命令:
Linux下常用的shell命令如:find、grep 、egrep、awk、sed
grep -C 5 foo file //显示file文件里匹配foo字符串所在行以及上下5行
grep -B 5 foo file 显示foo及前5行内容
grep -A 5 foo file 显示foo及后5行内容
grep -rn "hello,world!" //查找当前目录中所有包含"hello,world!"的所有文件。
-r 递归查找
-n 显示行号
-R 查找所有文件包含子目录
-i 忽略大小写
cat srarch_file | tail -n +1000 | heaf -n 2000
#从第1000行开始,显示2000行。(显示1000~2999行)
find /etc -name "filename" #在etc中查找文件
find /* -name "*filename*" #查找包含任意filename的文件路径
cat /etc/passwd | awk -F ':' '{print $1}'
#awk -F参数指定分隔符为':',$0显示所有、$1显示以':'分割后的第一个字符串,以此类推。
系统日志分析技巧
- /var/log/secure
#定位有多少IP在爆破初级的root账号
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
#定位有那些IP在爆破
grep "Failed password" /var/log/secure | grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" | uniq -c
#爆破尝试的用户名都有那些
grep "Failed password" /var/log/secure | perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}' | uniq -c | sort -nr
#登录成功的IP有哪些
grep "Accepted" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
#登录成功的日期、用户名、IP
grep "Accepted" /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
#添加用户日志
[root@bogon test]# grep "useradd" /var/log/secure
Feb 26 21:34:01 bogon useradd[75619]: new group: name=test1, GID=1001
Feb 26 21:34:01 bogon useradd[75619]: new user: name=test1, UID=1001, GID=1001, home=/home/test1, shell=/bin/bash
#删除用户日志
grep "userdel" /var/log/secure
Feb 26 21:38:08 bogon userdel[75717]: delete user 'test1'
Feb 26 21:38:08 bogon userdel[75717]: removed group 'test1' owned by 'test1'
Feb 26 21:38:08 bogon userdel[75717]: removed shadow group 'test1' owned by 'test1'
#su切换用户日志
grep "su:" /var/log/secure
Feb 26 21:39:25 bogon su: pam_unix(su:session): session opened for user root by root(uid=0)
Feb 26 21:39:32 bogon su: pam_unix(su:session): session opened for user admin by root(uid=0)
Feb 26 21:40:25 bogon su: pam_unix(su:session): session opened for user admin by root(uid=0)
Feb 26 21:41:25 bogon sudo: admin : user NOT in sudoers ; TTY=pts/1 ; PWD=/home/admin ; USER=root ; COMMAND=/bin/grep su: /var/log/secure
Feb 26 21:41:35 bogon sudo: admin : user NOT in sudoers ; TTY=pts/1 ; PWD=/home/admin ; USER=root ; COMMAND=/bin/grep su: /var/log/secure
Feb 26 21:41:44 bogon su: pam_unix(su:session): session opened for user root by root(uid=1000)
#sudo授权执行日志
grep "sudo" /var/log/secure
Feb 26 21:41:25 bogon sudo: admin : user NOT in sudoers ; TTY=pts/1 ; PWD=/home/admin ; USER=root ; COMMAND=/bin/grep su: /var/log/secure
Feb 26 21:41:35 bogon sudo: admin : user NOT in sudoers ; TTY=pts/1 ; PWD=/home/admin ; USER=root ; COMMAND=/bin/grep su: /var/log/secure
Feb 26 21:43:56 bogon sudo: root : TTY=pts/1 ; PWD=/home/admin ; USER=root ; COMMAND=list
软件安装、升级、卸载日志:/var/log/yum.log
[root@bogon admin]# more /var/log/yum.log
Feb 26 19:19:18 Installed: tree-1.6.0-10.el7.x86_64
Feb 26 19:19:26 Updated: 2:vim-common-7.4.629-8.el7_9.x86_64
Feb 26 19:19:26 Updated: 2:vim-enhanced-7.4.629-8.el7_9.x86_64
Feb 26 21:48:59 Updated: wget-1.14-18.el7_6.1.x86_64
Feb 26 21:49:35 Updated: libgcc-4.8.5-44.el7.x86_64
Feb 26 21:49:35 Updated: libquadmath-4.8.5-44.el7.x86_64
Feb 26 21:49:35 Updated: libstdc++-4.8.5-44.el7.x86_64
Feb 26 21:49:36 Updated: libstdc++-devel-4.8.5-44.el7.x86_64
Feb 26 21:49:36 Updated: libgfortran-4.8.5-44.el7.x86_64
Feb 26 21:49:36 Updated: libgomp-4.8.5-44.el7.x86_64
Feb 26 21:49:36 Updated: cpp-4.8.5-44.el7.x86_64
Feb 26 21:49:38 Updated: gcc-4.8.5-44.el7.x86_64
Feb 26 21:49:38 Updated: libquadmath-devel-4.8.5-44.el7.x86_64
Feb 26 21:49:38 Updated: gcc-gfortran-4.8.5-44.el7.x86_64
Feb 26 21:49:39 Updated: gcc-c++-4.8.5-44.el7.x86_64
0x02Linux应急排查
1.检查账号安全
-
用户信息文件/etc/passwd
root:x:0:0:root:/root:/bin/bash account:password:UID:GID:GECOS:directory:shell 用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后shell 注意:无密码只允许本机登陆,远程不允许登陆
-
影子文件/etc/shadow
1.root:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV9ajBwUt1DpYxTCVvI/:16809:0:99999:7::: 用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留
who 查看当前登录用户(tty本地登陆 pts远程登录) w 查看系统信息,想知道某一时刻用户的行为 uptime 查看登陆多久、多少用户,负载
-
查询特权用户特权用户(uid 为0)
awk -F: '$3==0{print $1}' /etc/passwd
-
查询可以远程登录的帐号信息
awk '/\$1|\$6/{print $1}' /etc/shadow
-
sudo权限检查
除root帐号外,其他帐号是否存在sudo权限。如非管理需要,普通帐号应删除sudo权限
more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
-
多余账号检查(删除不必要的账户)禁用或删除多余及可疑的帐号 1.usermod -L user 禁用帐号,帐号无法登录,/etc/shadow第二栏为!开头 2.userdel user 删除user用户 3.userdel -r user 将删除user用户,并且将/home目录下的user目录一并删除
2.检查历史命令
通过.bash_history查看帐号执行过的系统命令
#root的历史命令
/root/.bash_history
打开/home各帐号目录下的.bash_history,查看普通帐号的历史命令
为历史的命令增加登录的IP地址、执行命令时间等信息
#1.保存1万条命令
sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile
#2.在/etc/profile的文件尾部添加如下行数配置信息:
### ### jiagu history xianshi### ### ###
USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]
then
USER_IP=`hostname`
fi
export HISTTIMEFORMAT="%F %T $USER_IP `whoami` "
shopt -s histappend
export PROMPT_COMMAND="history -a"
### ### ### jiagu history xianshi ### ### ### #
#3.source /etc/profile让配置生效
生成效果: 1 2018-07-10 19:45:39 192.168.204.1 root source /etc/profile
历史操作命令的清除:history -c
但此命令并不会清除保存在文件中的记录,因此需要手动删除.bash_profile文件中的添加的记录。
3.检查端口进程
使用netstat 网络连接命令,分析可疑端口、IP、PID
[root@bogon ~]# netstat -antlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 678/rpcbind
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1789/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1365/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1361/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1714/master
tcp 0 0 192.168.1.209:43086 89.187.187.14:443 TIME_WAIT -
tcp 0 0 192.168.1.209:55890 192.168.1.170:4444 ESTABLISHED 1373/./etc/sysconfi
tcp6 0 0 :::111 :::* LISTEN 678/rpcbind
tcp6 0 0 :::22 :::* LISTEN 1365/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1361/cupsd
tcp6 0 0 ::1:25 :::* LISTEN 1714/master
查看下pid所对应的进程文件路径。
#ls -l /proc/$PID/exe
[root@bogon ~]# ls -l /proc/1373/exe
lrwxrwxrwx. 1 root root 0 2月 28 17:35 /proc/1373/exe -> /etc/sysconfig/msfhell.elf
或者
#file /proc/$PID/exe($PID 为对应的pid 号)
[root@bogon ~]# file /proc/1373/exe
/proc/1373/exe: symbolic link to `/etc/sysconfig/msfhell.elf'
使用ps命令,分析进程
#ps aux | grep pid
[root@bogon ~]# ps aux | grep 1373
root 1373 0.0 0.0 1720 728 ? Rl 17:33 0:00 ./etc/sysconfig/msfhell.elf
root 2707 0.0 0.3 642792 13736 ? Sl 17:35 0:00 /usr/libexec/gsd-keyboard
root 3393 0.0 0.0 112724 980 pts/0 S+ 17:38 0:00 grep --color=auto 1373
#或 ps -elf
#使用树形图展示 pstree -aup
#实时显示进程情况 top
4.检查开机启动项
开机启动项隐藏方法
方法一:使用chkconfig命令添加开机启动项:
[root@bogon ~]# cp msfhell.elf /etc/sysconfig/.msfshell.elf && chmod +x /etc/sysconfig/.msfshell.elf
#将木马存放在任意目录命名前加'.'设置为隐藏文件(ls -la命令可以看到隐藏文件)。
#新建启动shell文件,并且赋予执行权限,利用chkconfig命令添加启动项
[root@bogon ~]# echo -e '#!/bin/bash'"\n"'#chkconfig:2345 80 90'"\n\t"'#description:shell'"\n"'./etc/sysconfig/.msfshell.elf' >/etc/init.d/shell && chmod +x shell && chkconfig --add shell && chkconfig shell on
#使用chkconfig --list命令,我们可以看到开机启动项已经添加成功
[root@bogon ~]# chkconfig --list
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。
要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。
msf 0:关 1:关 2:开 3:开 4:开 5:开 6:关
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:开 4:开 5:开 6:关
shell 0:关 1:关 2:开 3:开 4:开 5:开 6:关
vmware-tools 0:关 1:关 2:开 3:开 4:开 5:开 6:关
#reboot重启机器msf上线成功
#清除chkconfig启动项方法
[root@bogon ~]# chkconfig msf off
[root@bogon ~]# chkconfig --del msf
[root@bogon ~]# chkconfig shell off
[root@bogon ~]# chkconfig --del shell
启动脚本必须含有以下参数
###启动shell脚本文件说明###
#!/bin/sh
//指定以什么方式运行该脚本
#chkconfig: 2345 80 90
//2345为默认启动级别(linux启动级别为0-7) 80含义为启动时脚本执行优先级 90含义为停止运行优先级 (范围0-100,数字越大,优先级越低)
#description:auto_run
//auto_run 可以是任意名字,即软连接后的文件名
注意debin系列系统(如:ubuntu)配置参数不同,排查思路相同
方法二:利用chkconfig规则,手动配置启动项
#第一步还是将文件写入init.d目录中
[root@bogon ~]# echo -e '#!/bin/bash'"\n"'#chkconfig:2345 80 90'"\n\t"'#description:shell'"\n"'./etc/sysconfig/.msfshell.elf' >/etc/init.d/shell
#或者使用nohup使脚本在后台运行
[root@bogon ~]# echo -e '#!/bin/bash'"\n"'#chkconfig:2345 80 90'"\n\t"'#description:shell'"\n"'nohup ./etc/sysconfig/.msfshell.elf' >/etc/init.d/shell
#第二步配置软连接
配置软链接需要注意,查看启动的运行等级,我这里运行等级为5,就配置软链接到rc.5.d目录中。
[root@bogon init.d]# runlevel
N 5
软连接含义:第一位(S为启动,K为结束)第二位(数字为运行级别,与shell中保持一致) 第三位 (名字,与shell中保持一致)
[root@bogon init.d]# ln -sv /etc/iniit.d/shell /etc/rc.d/rc5.d/S80shell
#Linux 运行级别0-10代表不同的系统状态,常用的系统状态有:
0. 关机级别
1. 系统启动级别(单用户模式)
2. 系统关机级别(shutdown)
3. 完全多用户级别
4. 无网络服务级别
5. X11多用户图形界面级别
6. 重新启动级别
7. 后台运行级别
8. 安全模式
9. 开发者模式
10. 内核调试模式
方法三:配置rc.local实现开机自启
#在/etc/rc.local文件中配置命令,将执行木马文件写入rc.local最后
[root@bogon ~]# echo 'cd /root && nohup ./msfshell.elf&' >> /etc/rc.local
#在.bashrc文件实现启动后门
[root@bogon ~]# echo 'cd /root && nohup ./msfshell.elf&' >> /root/.bashrc
启动项排查方法
开机启动配置文件
1./etc/rc.local
2./etc/rc.d/rc[0~6].d
启动项文件:
1.more /etc/rc.local /etc/rc.d/rc[0~6].d ls -l /etc/rc.d/rc3.d/
#依据以上入侵思路
1.排查/etc/rc.d/rc*.d/目录是否存在可以连接文件
2.排查/etc/init.d/目录是否存在可以脚本
3.排查/etc/rc.local目录是否有可疑文件
4.排查环境初始化文件中是否有后门命令,如:用户目录下的.bashrc文件,.bash_profile等文件
Linux初始化文件说明
-
/etc/profile
全局(公有)配置,不管是哪个用户,登录时都会读取该文件。
-
/ect/bashrc
Ubuntu没有此文件,与之对应的是/ect/bash.bashrc 它也是全局(公有)的 bash执行时,不管是何种方式,都会读取此文件。
-
~/.profile
若bash是以login方式执行时,读取/.bash_profile,若它不存在,则读取/.bash_login,若前两者不存在,读取~/.profile。
另外,图形模式登录时,此文件将被读取,即使存在/.bash_profile和/.bash_login。
-
~/.bash_login
若bash是以login方式执行时,读取/.bash_profile,若它不存在,则读取/.bash_login,若前两者不存在,读取~/.profile。
-
~/.bash_profile
Unbutu默认没有此文件,可新建。
只有bash是以login形式执行时,才会读取此文件。通常该配置文件还会配置成去读取~/.bashrc。
-
~/.bashrc
当bash是以non-login形式执行时,读取此文件。若是以login形式执行,则不会读取此文件。
-
~/.bash_logout
注销时,且是longin形式,此文件才会读取。也就是说,在文本模式注销时,此文件会被读取,图形模式注销时,此文件不会被读取。
5.检查定时任务
1、利用crontab创建计划任务
基本命令
1.crontab -l 列出当前用户计划任务
crontab -u username 指定用户
crontab -r 删除每个用户cront任务(谨慎:删除所有的计划任务)
crontab -e 使用编辑器编辑当前的crontab文件
Tips:默认编写的crontab文件会保存在 (/var/spool/cron/用户名 例如: /var/spool/cron/root
crontab -l -u admin 查看admin用户的计划任务
使用crontab sysstat 可以载入某个文件中的计划任务 (crontab 跟文件名)
如:* * * * * echo "hello world" >> /tmp/test.txt 每分钟写入文件
或者:echo '* * * * * echo "hello world" >> /tmp/test.txt' >/var/spool/cron/root 利用写文件的方式直接写入cron
2.在/etc/crontab文件写入计划任务
#在crontab文件写入计划任务必须注意格式 (计划任务时间 启动计划任务的用户 需要执行的command)
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
* * * * * root echo "123qwe" >> /tmp/123.txt
2、利用anacron实现异步定时任务调度
使用案例
每天运行 /home/backup.sh脚本:
[root@bogon ~]# vim /etc/anacrontab
#编辑内容为:
@daily 10 example.daily /bin/bash /home/backup.sh
#当机器在 backup.sh 期望被运行时是关机的,anacron会在机器开机十分钟之后运行它,而不用再等待 7天。
重点关注以下目录中是否存在恶意脚本
/var/spool/cron/*
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*
小技巧:
- more /etc/cron.daily/* 查看目录下所有文件
总结:
排查计划任务时,检查crontab有无计划任务,检查/etc/cron*是否有新增计划任务,关注/var/spool/cron/* 与/var/spool/anacron/*。
6.检查服务
方法一:利用systemd服务启动脚本
1.测试shell脚本如下
#!/bin/bash
while true
do
#打印hello world ,sleep 1 是每隔一秒打印一次
echo hello world >> /tmp/hello.log
#打印当前系统时间
echo $(date +%Y%m%d-%H%M%S)
sleep 1
done
2.创建service文件
文件必须位于/etc/systemd/system/目录下,我们起名为shell.service
Unit中一般分三个部分【Unit/Service/Install】
Unit中主要是对服务的说明
里面有两个参数:
Description(用于描述服务)
After(用于描述服务启动的依赖);
Sevice中主要是设置运行参数
里面参数的意思:
ExecStart (服务的具体运行命令)
Restart = always(进程时服务意外故障的时候可以自动重启的模式)
Type = simple(表示其余选项均为系统默认);
Install中主要是服务安装的相关设置。
[Unit]
Description = shell daemon
[Service]
ExecStart = /opt/shell.sh
Restart = always
Type = simple
[Install]
WantedBy = multi-user.target
3.把Unit添加进Service
list-unit-files --type 是列出所有启动文件
[root@localhost ~]# systemctl list-unit-files --type=service |grep shell
shell.service disabled
5、启动服务
[root@localhost ~]# systemctl enable hello # 开机自动启动on
此时参数中的enable换成disable就是禁止开启自动启动
[root@localhost ~]# systemctl start hello # 单次开机启动
此时参数中的start换成stop就是停止服务
[root@localhost ~]# systemctl status hello #运行状态确认
6.查看脚本启动情况
[root@localhost ~]# systemctl enable shell
Created symlink from /etc/systemd/system/multi-user.target.wants/shell.service to /etc/systemd/system/shell.service.
[root@localhost ~]# systemctl start shell
[root@localhost ~]# cat /tmp/shell.service.log
hello world
#查看脚本运行状态
[root@localhost ~]# systemctl status shell
● shell.service - shell daemon
Loaded: loaded (/etc/systemd/system/shell.service; enabled; vendor preset: disabled)
Active: active (running) since 四 2023-03-02 22:31:41 CST; 5min ago
Main PID: 6165 (shell.sh)
Tasks: 2
CGroup: /system.slice/shell.service
├─6165 /bin/bash /opt/shell.sh
└─7097 sleep 1
3月 02 22:36:32 localhost.localdomain shell.sh[6165]: 20230302-223632
3月 02 22:36:33 localhost.localdomain shell.sh[6165]: 20230302-223633
3月 02 22:36:34 localhost.localdomain shell.sh[6165]: 20230302-223634
3月 02 22:36:35 localhost.localdomain shell.sh[6165]: 20230302-223635
3月 02 22:36:36 localhost.localdomain shell.sh[6165]: 20230302-223636
3月 02 22:36:37 localhost.localdomain shell.sh[6165]: 20230302-223637
3月 02 22:36:38 localhost.localdomain shell.sh[6165]: 20230302-223638
3月 02 22:36:39 localhost.localdomain shell.sh[6165]: 20230302-223639
3月 02 22:36:40 localhost.localdomain shell.sh[6165]: 20230302-223640
3月 02 22:36:41 localhost.localdomain shell.sh[6165]: 20230302-223641
#至此结束,停止脚本
[root@localhost ~]# systemctl stop shell
方法二:利用chkconfig命令(上文已详细说明)
1.chkconfig --list 查看服务自启动状态,可以看到所有的RPM包安装的服务
2.ps aux | grep crond 查看当前服务
系统在3与5级别下的启动项
中文环境
1.chkconfig --list | grep "3:启用\|5:启用"
英文环境
1.chkconfig --list | grep "3:on\|5:on"
源码包安装的服务
查看服务安装位置 ,一般是在/user/local/
1.service httpd start
搜索/etc/rc.d/init.d/ 查看是否存在
7.检查异常文件
1、查看敏感目录
如:/tmp目录下的文件,同时注意隐藏文件夹,以“…”为名的文件夹具有隐藏属性
2、得到发现WEBSHELL、远控木马的创建时间,如何找出同一时间范围内创建的文件?
可以使用find命令来查找,如:
find /opt -iname “*” -atime 1 -type f
找出 /opt目录下 一天前访问过的文件
-atime 1 查找一天前
-atime -1 查找一天内
3、针对可疑文件可以使用stat进行创建修改时间。
[root@localhost ~]# stat /opt/shell.sh
文件:"/opt/shell.sh"
大小:204 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:902482 硬链接:1
权限:(0777/-rwxrwxrwx) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:usr_t:s0
最近访问:2023-03-02 22:31:41.387571743 +0800
最近更改:2023-03-02 22:19:25.875267953 +0800
最近改动:2023-03-02 22:24:30.081485907 +0800
创建时间:-