AutoBackupGuard 多服务器自动化备份与完整性校验系统

项目说明

概述

  • 该项目共分为2个子项目,由环境搭建和实施备份两部分组成
  • 该项目旨在复习巩固系统服务部署使用、shell编程等知识,旨在让学生增加知识面,提高项目实习经历。

项目背景知识

总体需求

  • 某企业里有一台Web服务器,里面的数据很重要,但是如果硬盘坏了数据就会丢失,现在领导要求把数据做备份,这样Web服务器数据丢失在可以进行恢复
  • 要求如下:
    • 每天00点整在Web服务器上按日期打包备份系统配置文件、网站程序目录及访问日志文件
    • 通过rsync命令推送到备份服务器上保存
    • 备份服务器定时清除旧记录
    • 搭建邮件告警平台

备份需求

  • 所有服务器的备份目录必须都为/backup。

  • 要备份的系统配置文件包括但不限于:

    • 定时任务服务的配置文件(/var/spool/cron/root) (适合Web和NFS服务器)。

    • 开机自启动的配置文件(/etc/rc.local) (适合Web和NFS服务器)。

    • 日常脚本的目录 (/server/scripts)。

  • Web服务器要求

    • Web站点目录假定为/var/html/www,如果没有,可以先模拟创建。
    • Web服务器访问日志路径假定为/app/logs,如果没有,可以先模拟创建。
    • Web服务器本地保留打包后的7天备份数据即可(本地留存不能多于7天,因为数据太多硬盘会满)。
  • 备份服务器要求

    • 保留最近7天所有备份数据,保留6个月内每周一的所有数据副本。
    • 要按照备份数据服务器内网IP为目录名称,备份的文件按照时间、名称为文件名称。
    • 需要确保备份的数据尽量完整准确,在备份服务器上对备份的数据是否完整进行检查。
    • 备份服务器每天早晨8:00把备份成功或失败结果信息发送到系统管理员邮箱里。

    软硬件环境清单

已知3台服务器主机名分别为web01、backup、nfs01,主机信息建下表。

主机名 IP地址 硬件 软件
web01 192.168.88.200 cpu:1颗2核 内 存:2GB HDD:20GB 网 络:NAT VmWare17 Centos7.9 nginx.120 rsync3.1.2
nfs01 192.168.88.201 cpu:1颗2核 内 存:2GB HDD:20GB 网 络:NAT VmWare17 Centos7.9 nfs rpcbind rsync3.1.2
backup 192.168.88.202 cpu:1颗2核 内 存:2GB HDD:20GB 网 络:NAT VmWare17 Centos7.9 mailx12.5 rsync3.1.2

任务清单

项目环境搭建

  • 可以使用iventoy网启安装3台centos7.9服务器

  • 按照规划,最小化部署系统,关闭防火墙,禁用SELinux,确保能够联网。

服务器部署

Web服务器搭建部署
  • 验证Rsync服务能否推送成功。
  • 开发脚本实现打包备份、推送、校验、删除。
  • 配置定时任务每天0点定时推送(0时是时间的一个分割点)。
NFS服务器搭建部署
  • 验证Rsync服务能否推送成功。

  • 开发脚本实现打包备份、推送、校验、删除。

  • 配置定时任务每天0点定时推送(0时是时间的一个分隔点)。

  • 配置脚本和web服务器类似,过程略。

搭建备份服务器
  • rsync服务器搭建部署。
  • 开发脚本实现校验、删除、报警。
  • 配置实时任务每天6点实时执行。
  • 配置告警邮件发送平台

实施步骤

环境搭建

web服务器环境搭建
  • 安装Centos7.9系统,替换yum源,连接xshell,过程略

    下载地址:https://mirrors.aliyun.com/repo/Centos-7.repo

  • 关闭防火墙和selinux,设置主机名

    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# systemctl disable firewalld
    [root@localhost ~]# vi /etc/selinux/config
    SELINUX=disabled
    [root@localhost ~]# hostnamectl set-hostname web01
    [root@localhost ~]# reboot



  • 设置静态ip

    [root@web01 ~]#vi /etc/sysconfig/network-scripts/ifcfg-ens32
    #添加以下内容
    IPADD[root@web01 ~]# systemctl restart network

    安装所有软件

    [root@web01 ~]# yum install vim tree tar net-tools rsync nfs-utils -yR="192.168.121.200" # ip
    NETMASK="255.255.255.0" # 掩码
    GATEWAY="192.168.121.2" # 网关
    DNS1="114.114.114.114" # dns

复制代码
[root@web01 ~]# systemctl restart network

# 安装所有软件
[root@web01 ~]# yum install vim  tree tar net-tools rsync nfs-utils -y
  • 部署网站示例

    [root@web01 ~]# yum install epel-release -y
    [root@web01 ~]# yum install nginx -y
    [root@web01 ~]# mkdir -p /www/zy
    [root@web01 ~]# cd /www/zy

    将web源文件上传至/www/zy,如图:

复制代码
# 修改nginx配置文件

[root@web01 ~]# vim  /etc/nginx/nginx.conf     # 修改第42行之后的路径
42         root         /www/zy;
[root@web01 ~]# systemctl start nginx 
[root@web01 ~]# systemctl enable nginx 

# 测试:打开windows端浏览器输入服务端IP地址
nfs服务器环境搭建
  • 安装Centos7.9系统,替换yum源,连接xshell,过程略

  • 关闭防火墙和selinux,设置主机名

    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# systemctl disable firewalld
    [root@localhost ~]# vi /etc/selinux/config
    SELINUX=disabled
    [root@localhost ~]# hostnamectl set-hostname nfs01
    [root@localhost ~]# reboot

  • 设置静态ip

    [root@nfs01 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33

    添加以下内容

    IPADDR="192.168.88.201" # ip
    NETMASK="255.255.255.0"
    GATEWAY="192.168.88.2"
    DNS1="114.114.114.114"

    [root@nfs01 ~]# systemctl restart network

    [root@nfs01 ~]# yum install vim tree tar net-tools rsync -y

  • 部署共享存储,nfs01为服务端,web01为客户端

    nfs01服务端操作

    [root@nfs01 ~]# yum install rpcbind -y
    [root@nfs01 ~]# yum install nfs-utils -y
    [root@nfs01 ~]# mkdir /nfsfile
    [root@nfs01 ~]# echo "welcome to www.openlab.com" > /nfsfile/readme
    [root@nfs01 ~]# chmod -Rf 777 /nfsfile
    [root@nfs01 ~]# vim /etc/exports # 编辑nfs配置文件,添加如下内容
    /nfsfile 192.168.121.0/24(rw,sync,all_squash)

    [root@nfs01 ~]# systemctl start rpcbind
    [root@nfs01 ~]# systemctl enable rpcbind
    [root@nfs01 ~]# systemctl start nfs-server
    [root@nfs01 ~]# systemctl enable nfs-server
    Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

    web01客户端操作:

    [root@web01 ~]# showmount -e 192.168.121.201
    Export list for 192.168.121.201:
    /nfsfile 192.168.121.0/24
    [root@web01 ~]# mkdir /web_nfs
    [root@web01 ~]# mount -t nfs 192.168.121.201:/nfsfile /web_nfs
    [root@web01 ~]# cd /web_nfs
    [root@web01 web_nfs]# ls
    readme
    [root@web01 web_nfs]# cd ~
    [root@web01 web_nfs]# vim /etc/fstab # 永久挂载
    192.168.121.201:/nfsfile /web_nfs nfs defaults 0 0

    [root@web01 web_nfs]# mount -a
    [root@web01 web_nfs]# df -h
    #出现以下信息则表示挂载成功
    192.168.121.201:/nfsfile 17G 1.6G 16G 9% /web_nfs

backup服务器环境搭建
  • 安装Centos7.9系统,替换yum源,连接Hexhub,过程略

  • 关闭防火墙和selinux,设置主机名

    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# systemctl disable firewalld
    [root@localhost ~]# vi /etc/selinux/config
    SELINUX=disabled
    [root@localhost ~]# hostnamectl set-hostname backup
    [root@localhost ~]# reboot

  • 设置静态ip

    [root@backup ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
    #添加以下内容
    IPADDR="192.168.121.202" # ip
    NETMASK="255.255.255.0"
    GATEWAY="192.168.121.2"
    DNS1="114.114.114.114"
    TYPE=Ethernet

    [root@backup ~]# systemctl restart network

    [root@backup ~]# yum install vim tree tar net-tools rsync mailx -y

  • 修改rsync配置文件

    注意:配置文件中下列注释要删除

    [root@backup ~]# vim /etc/rsyncd.conf
    uid = rsync # 用户
    gid = rsync # 组
    use chroot = no # 程序安全设置
    max connections = 200 # 客户端连接数
    timeout = 300 # 超时时间
    pid file = /var/run/rsyncd.pid # 进程号文件位置
    lock file = /var/run/rsync.lock # 进程锁
    log file = /var/log/rsyncd.log # 日志文件
    fake super = yes # 无需rsync以root身份运行,允许接受数据

    [backup]
    path = /backup # 目录
    ignore errors # 有错误时忽略
    read only = false # 可读可写
    list = false # 阻止远程列表
    hosts allow = 192.168.121.0/24 # 允许IP
    hosts deny = 0.0.0.0/32 # 禁止IP
    auth users = rsync # 用于认证的账户
    secrets file = /etc/rsync.password # 存放用户和密码的文件

  • 根据配置文件设置

    创建rsync账户及共享目录并修改目录属主为rsync

    [root@backup ~]# useradd -M -s /sbin/nologin rsync
    [root@backup ~]# mkdir /backup
    [root@backup ~]# chown -R rsync /backup

    开机并启动服务

    [root@backup ~]# systemctl enable --now rsyncd
    [root@backup ~]# ps -ef | grep rsync
    root 1333 1 0 15:09 ? 00:00:00 /usr/bin/rsync --daemon --no-detach
    root 1335 1261 0 15:09 pts/0 00:00:00 grep --color=auto rsync

    创建rsync虚拟账户名和密码,并赋予密码文件600权限

    [root@backup ~]# echo "rsync:rsync123" > /etc/rsync.password
    [root@backup ~]# chmod 600 /etc/rsync.password

配置备份脚本

配置web01客户端本地备份脚本
  • web01客户端主机需要打包备份的内容:

    [root@web01 nginx]# tree /var/log/nginx # 日志
    /var/log/nginx
    ├── access.log
    └── error.log
    0 directories, 2 files

    [root@web01 nginx]# tree /www # 网站主数据
    /www
    ├── zy
    │ ├── css
    │ │ ├── animate.min.css
    │ │ ├── common.min.css
    ....................................

    以及定时任务和备份脚本源文件 :/var/spool/cron/root、/etc/rc.local、/server/scripts

  • 编写备份web01服务器的脚本

    [root@web01 ~]# mkdir /backup
    [root@web01 ~]# mkdir -p /server/scripts

    [root@web01 ~]# vim /server/scripts/backup.sh

    #!/bin/bash

    Date:2026-3-16

    Author:Andy

    Mail:andy@126.com

    Function: Regularly backup data from web servers

    Version: V1.0

    Date=(date +%F_week0%w) # 定义时间方式 Host_IP=(ifconfig ens33 | awk '/inet / {print $2}') # 获取IP,注意网卡名
    Backup_Dir="/backup/" # 本地备份路径
    Backup_Server_IP=192.168.121.202 # 备份服务器的IP

    创建指定目录和IP的目录

    [ ! -d Backup_Dir/Host_IP ] && mkdir -p Backup_Dir/Host_IP

    输出提示信息

    echo {Date} {Host_IP} start backup ......

    按要求打包备份所有本地重要文件

    cd / &&
    tar cf {Backup_Dir}{Host_IP}/sys_file_bak_{Date}_tar.gz var/spool/cron &&\ tar rf {Backup_Dir}{Host_IP}/sys_file_bak_{Date}tar.gz etc/rc.d/rc.local &&
    tar rf {Backup_Dir}{Host_IP}/sys_file_bak
    {Date}_tar.gz server/scripts/ &&\ tar zcf Backup_DirHost_IP/www_{Date}tar.gz www/ &&
    tar zcf Backup_DirHost_IP/nginx_logs
    ${Date}_tar.gz var/log/nginx/ &&\

    给所有备份的压缩文件建立指纹,放入指纹库flag,后面会验证完整性

    find {Backup_Dir:-/tmp} -type f -name "*{Date}_tar.gz" |xargs md5sum >Backup_Dir/Host_IP/${Date}.flag

    把备份推送到备份服务器

    rsync -az Backup_Dir rsync@{Backup_Server_IP}::backup --password-file=/etc/rsync.password

    删除7天以前的所有本地备份数据

    find ${Backup_Dir:-/tmp} -type f -name "*.tar.gz" -a -name "flag" -mtime +7|xargs rm -f

    echo "Local backup successful, the backup files have been pushed to the backup server"

    [root@web01 ~]# vim /etc/rsync.password # 客户端建立认证的文件密码如下:
    rsync123 # 注意:只写密码

    [root@web01 ~]# chmod 600 /etc/rsync.password # 密码认证文件必须为600

  • 测试

    [root@web01 ~]# bash /server/scripts/backup.sh
    2026-03-17_week02 192.168.121.200 start backup...
    Local backup successful,the backup files have been pushed to the backup server

    在backup服务器中可以看到推送的数据

    [root@backup ~]# ls /backup/192.168.121.200/
    2026-03-16_week01.flag sys_file_bak_2026-03-16_week01_tar.gz
    nginx_log_2026-03-16_week01_tar.gz www_2026-03-16_week01_tar.gz


bash 复制代码
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1656) [sender=3.1.2]
配置nfs01客户端本地备份脚本
  • nfs01客户端主机需要打包备份的内容:

    [root@nfs01 ~]# tree /nfsfile/ # 共享目录数据
    /nfsfile/
    └── readme

    以及/var/log/message文件、mount -l 挂载信息

  • 编写备份nfs01服务器的脚本

    [root@nfs01 ~]# mkdir /backup
    [root@nfs01 ~]# mkdir -p /server/scripts

    [root@nfs01 ~]# vim /server/scripts/backup.sh

    #!/bin/bash

    Date:2026-3-16

    Author:Andy

    Mail:andy@126.com

    Function: Regularly backup data from nfs servers

    Version: V1.0

    Date=(date +%F_week0%w) # 定义时间方式 Host_IP=(ifconfig ens32 | awk '/inet / {print $2}') # 获取IP,注意网卡名
    Backup_Dir="/backup/" # 本地备份路径
    Backup_Server_IP=192.168.121.202 # 备份服务器的IP
    mount -l > /var/log/mount.log # 挂载日志

    创建指定目录和IP的目录

    [ ! -d Backup_Dir/Host_IP ] && mkdir -p Backup_Dir/Host_IP

    输出提示信息

    echo {Date} {Host_IP} start backup ......

    按要求打包备份所有本地重要文件

    cd / &&
    tar cf {Backup_Dir}{Host_IP}/sys_file_bak_{Date}_tar.gz var/spool/cron &&\ tar rf {Backup_Dir}{Host_IP}/sys_file_bak_{Date}tar.gz etc/rc.d/rc.local &&
    tar rf {Backup_Dir}{Host_IP}/sys_file_bak
    {Date}_tar.gz server/scripts/ &&\ tar zcf Backup_DirHost_IP/nfs_{Date}tar.gz nfsfile/ &&
    tar zcf Backup_DirHost_IP/mount_logs
    ${Date}_tar.gz var/log/mount.log/ &&\

    给所有备份的压缩文件建立指纹,放入指纹库flag,后面会验证完整性

    find {Backup_Dir:-/tmp} -type f -name "*{Date}_tar.gz" |xargs md5sum >Backup_Dir/Host_IP/${Date}.flag

    把备份推送到备份服务器

    rsync -az Backup_Dir rsync@{Backup_Server_IP}::backup --password-file=/etc/rsync.password

    删除7天以前的所有本地备份数据

    find ${Backup_Dir:-/tmp} -type f -name "*.tar.gz" -a -name "flag" -mtime +7|xargs rm -f

    echo "Local backup successful, the backup files have been pushed to the backup server"

    [root@nfs01 ~]# vim /etc/rsync.password # 客户端建立认证的文件密码如下:
    rsync123 # 注意:只写密码

    [root@nfs01 ~]# chmod 600 /etc/rsync.password # 密码认证文件必须为600
    [root@nfs01 ~]# ls -ld /etc/rsync.password
    -rw-r--r-- 1 root root 9 Feb 19 16:40 /etc/rsync.password

  • 测试

    [root@nfs01 ~]# bash /server/scripts/backup.sh

    在backup服务器中可以看到推送的数据

    [root@backup ~]# ls /backup/
    192.168.88.200 192.168.88.201

配置定时任务

  • web01服务器编辑定时任务,实现每天00:00定时备份本地数据,并推送到Rsync服务器上

    查看crond服务状态,默认已安装

    [root@web01 ~]# systemctl status crond
    ● crond.service - Command Scheduler
    Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
    Active: active (running) since 一 2026-03-16 22:07:55 CST; 23h ago
    Main PID: 1158 (crond)
    Tasks: 1
    CGroup: /system.slice/crond.service
    └─1158 /usr/sbin/crond -n
    ..................................................................

    注意若未安装可执行:

    [root@web01 ~]# yum install crontabs

复制代码
# 编辑定时任务

[root@web01 ~]# crontab  -e    				# 添加:

# crond-id-001:data backup
00 00 * * * /bin/sh /server/scripts/backup.sh >/dev/null 2>&1

# 若出现定时任务如下信息不同处理:
no crontab for root - using an empty one
crontab: installing new crontab
  • nfs01服务器过程同上

  • backup服务器编写脚本,实现删除180天前的所有备份数据,但保存每周一的

    [root@backup ~]# mkdir -p /server/scripts
    [root@backup ~]# cd /server/scripts/
    [root@backup scripts]# vim /server/scripts/del_bak_data.sh

    #!/bin/bash

    Date:2026-3-16

    Author:Andy

    Mail:andy@126.com

    Function: Delete all backup data from 180 days ago, but save every Monday

    Version: V1.0

    Backup_Dir="/backup/"

    删除7天前的压缩包和flag文件,但是每周一的不删

    find ${Backup_Dir:-/tmp} -type f -name "tar.gz" ! -name "Week01" -o -name "flag" -mtime +7|xargs rm -f

    删除180天前的所有压缩包和flag文件

    find ${Backup_Dir:-/tmp} -type f -name "tar.gz" -name "flag" -mtime +180|xargs rm -f

    注意:Backup_Dir:-/tmp表示检查环境变量 Backup_Dir 是否已设置。如果设置了,就使用其值;如果没有设置,就使用默认值 /tmp

  • backup服务器配置定时任务,实现服务端180天前数据自动删除

    [root@backup ~]# crontab -e

    crond-id-003:data backup

    00 00 * * * /bin/sh /server/scripts/del_bak_data.sh >/dev/null 2>&1

数据传输完整性验证与监控告警

验证数据完整性
  • backup服务端针对客户端备份时的md5指纹数据,利用MD5命令进行验证,完成数据传输过程完整性验证。

    [root@backup scripts]# vim send_mail.sh

    #!/bin/bash

    Date:2026-3-16

    Author:Andy

    Mail:andy@126.com

    Function: Verify the integrity of backup files

    Version: V1.0

    Date=(date +%F_week0%w) Backup_Dir="/backup/" Check_Log="/tmp/bak.log_(date +%F)" # 定时检查备份结果的文件
    Admin_Mail=17674044@qq.com # 管理员邮箱

    find Backup_Dir -type f -name "{Date}.flag"|xargs md5sum -c >> $Check_Log

    if [ -n "cat Check_Log" ] then mail -s "Date backup data info" Admin_Mail < Check_Log
    else
    echo "Date backup data error,pls check it." > Check_Log # 如果结果文件不存在,日志信息变化,报错
    mail -s "Date backup data info" Admin_Mail < Check_Log fi cp Check_Log{,.ori} && > $Check_Log

配置邮件告警
  • 安装邮件服务

    [root@backup ~]# yum install mailx -y

  • 配置qq邮箱ssl证书

    [root@backup ~]# mkdir -p /root/.certs
    [root@backup ~]# cd /root/.certs

    [root@backup .certs]# echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt

    [root@backup .certs]# certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt

    [root@backup .certs]# certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt

    [root@backup .certs]# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt
    Notice: Trust flag u is set automatically if the private key is present.

  • 配置邮件服务

    [root@backup .certs]# vim /etc/mail.rc

    最后一行后添加以下内容:

    set from=123456789@qq.com #自己的qq邮箱
    set smtp=smtps://smtp.qq.com:465 # ssl端口默认465
    set smtp-auth-user=123456789qq.com #自己的qq邮箱
    set smtp-auth-password=doc****qdubqbibj # 授权码
    set smtp-auth=login
    set nss-config-dir=/root/.certs/ # 设置证书路径
    set ssl-verify=ignore # 启用加密ssl传输in

  • 测试邮件服务

    [root@backup ~]# echo "testmail" | mail -s "testmail" 123456789@qq.com

    [root@backup ~]# bash /server/scripts/send_mail.sh

四、遇到的问题

1、useradd -M -s /sbin/nologin rsync
2、date +%F_week0%w
  • %F → 完整日期:年-月-日

  • _week0 → 自定义固定文字

  • %w → 星期数字(0 = 周日,1 = 周一 ... 6 = 周六)

  • 组合效果:日期_week0星期数(2026-03-16_week01)

3、[ ! -d $Backup_Dir/$Host_IP ]

这是 Shell 条件判断语句,作用是:

  • ... \]:Shell 条件测试语法(等价于 test ...)

  • -d:判断是否为目录且存在
  • 整句含义:如果 $Backup_Dir/$Host_IP 目录不存在,则执行后面的 mkdir -p 命令
4、find ${Backup_Dir:-/tmp} -type f -name "*${Date}_tar.gz" |xargs md5sum >$Backup_Dir/$Host_IP/${Date}.flag
5、报错
c 复制代码
[root@web01 ~]# bash /server/scripts/backup.sh
2026-03-16_week01 192.168.121.200 start backup...
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1656) [sender=3.1.2]
Local backup successful,the backup files have been pushed to the backup server

错误原因:

服务端输出 rsync:rsync123,客户端输出 rsync123,在3后多打了一个空格

6、
  • 错误原因:POP3/SMTP 服务未开启、授权码错误

  • 解决步骤
    步骤 1:重新生成 QQ 邮箱授权码
    登录 QQ 邮箱 → 点击「设置」→ 切换到「账户」选项卡
    找到「POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV 服务」
    开启「POP3/SMTP 服务」,按提示发送短信验证
    生成新的授权码(复制备用,仅显示一次)
    步骤 2:修正 mailx 配置文件
    编辑 /etc/mail.rc,确保以下配置正确:

    set smtp-auth-password=刚生成的授权码

步骤 3:重启服务并测试

复制代码
echo "testmail" | mail -s "testmail" 你的qq号@qq.com
7、 /backup/192.168.121.201 备份未收到

原因:nfs01主机的/server/scripts/backup.sh文件 将Date变量里的week写成了大写,以至于生成的文件名和/server/scripts/send_mail.sh检索的文件名不匹配

8、解析
复制代码
[root@backup .certs]# echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt

(1) echo -n |:空输入传递给 openssl

作用:openssl s_client 是交互式的(需要手动输入退出),通过echo -n | 传递空输入,让openssl连接后自动退出,无需手动操作。
(2) openssl s_client -connect smtp.qq.com:465

  • openssl:开源的加密工具集,处理 SSL/TLS 证书的核心工具;

  • s_client:模拟 SSL 客户端,用于连接 SSL/TLS 服务器并获取证书信息;

  • connect smtp.qq.com:465:指定要连接的 SSL 服务器地址和端口(QQ 邮箱 SMTP 的 SSL 端口是 465);

  • 执行效果:连接到smtp.qq.com:465,输出包括服务器证书、握手信息、加密算法等大量内容。

    [root@backup .certs]# certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt

    [root@backup .certs]# certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt

    [root@backup .certs]# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt
    Notice: Trust flag u is set automatically if the private key is present.

这三行都是用certutil将证书添加到本地信任库,解决 "证书不受信任" 问题,先解释certutil的核心参数,再解析每一行:
(1) certutil 工具背景

certutil是 Mozilla/NSS(网络安全服务)的证书管理工具,Linux 系统中用于管理 SSL 证书信任库,常见于配置邮件 / 浏览器的证书信任。
(2) 核心参数含义

(3) 信任属性 -t 的值解析

格式:"SSL信任级别,Email信任级别,Object信任级别",每个级别可选值:

C:不信任(Casual);

P:信任(Valid Peer);

u:用户信任(User);

w:网站信任(Website);

,:空值,表示默认;

举例:

-t "C,":SSL 场景不信任,Email/Object 场景默认;
(4) 逐行解析这三行命令

  • 第 4 行:certutil -A -n "GeoTrust SSL CA" -t "C," -d ~/.certs -i ~/.certs/qq.crt
    给证书别名 "GeoTrust SSL CA",设置 SSL 场景不信任(先导入,后续调整),证书库目录~/.certs,导入文件qq.crt;
  • 第 5 行:certutil -A -n "GeoTrust Global CA" -t "C," -d ~/.certs -i ~/.certs/qq.crt
    别名 "GeoTrust Global CA",同样先以 "不信任" 状态导入;
  • 第 6 行:certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt
    别名 "GeoTrust SSL CA - G3",设置全信任(SSL/Email/Object 都信任),-d ./ 等价于 -d ~/.certs(当前目录就是.certs);
9、cp Check_Log{,.ori} \&\& \> Check_Log

cp $Check_Log{,.ori}:日志备份(Shell 通配符扩展)

  • 语法本质:{,.ori} 是 Shell 的大括号扩展(Brace Expansion),属于通配符的一种,作用是自动生成多个字符串组合。
  • 扩展过程:Shell 会先把 Check_Log{,.ori} 展开为 Check_Log Check_Log.ori(相当于手动写两个参数)。 举例:如果 Check_Log=/tmp/backup.log,则展开后是:
c 复制代码
cp /tmp/backup.log /tmp/backup.log.ori
  • 作用:把原日志文件复制一份,后缀加 .ori(origin,原始),实现日志备份。
相关推荐
lauo2 小时前
从“安全孤岛”到“信任基石”:ibbot智体机灵如何重新定义AI智能体的安全范式
人工智能·安全·智能手机·架构·开源·github
安科瑞小许2 小时前
零碳园区的电力保障——变电站综合自动化系统
运维·自动化·零碳园区
袁小皮皮不皮2 小时前
【HCIA】第二章 ipv4协议以及子网划分与集合
linux·运维·服务器·网络·网络协议·tcp/ip·信息与通信
FriendshipT2 小时前
Ubuntu 20.04 LTS 安装 Docker 指南
linux·ubuntu·docker
科技前瞻观察2 小时前
赋能智算升级|基于极海G32R501实时控制DSP MCU的AI服务器电源应用方案
服务器·人工智能·单片机
2501_941982052 小时前
企微机器人开发:实现私域流量的自动化管理与智能交互
机器人·自动化·企业微信
暴力求解2 小时前
Linux---ELF动态库加载
linux·运维·服务器
技术宅星云2 小时前
【极客的Ubuntu 操作系统维护手册】
linux·运维·ubuntu
Ken_11152 小时前
Linux放开端口
linux·服务器·网络