江西TGZ022-信创适配及安全管理-竞赛样题操作步骤

54 阅读29分钟

TGZ022-信创适配及安全管理

信创系统环境部署模块

(一)信创系统安装

一、前期准备与启动

  1. 准备 openEuler 官方 ISO 镜像文件,并通过 U 盘刻录工具(如 Rufus)制作启动 U 盘。
  2. 将 Server3 服务器从制作好的 U 盘启动,进入 openEuler 安装界面,选择 “Install openEuler” 选项。

二、基础配置设置

1. 语言与时区设置
  • 在 “Language Selection” 界面,选择 “English” 作为系统语言,点击 “Continue”。
  • 进入 “Installation Summary” 主配置界面,点击 “Time & Date” 选项。
  • 在时区地图中定位并选择 “Asia/Shanghai”,确认时间无误后点击 “Done” 返回主界面。

2. 安装类型选择
  • 在主配置界面点击 “Software Selection” 选项。
  • 在 “Base Environment” 列表中,勾选 “Server” 作为安装类型,保持其他默认组件,点击 “Done” 返回。

三、核心安全与分区配置

1. root 密码与 SM3 加密设置
  • 在主配置界面点击 “Root Password” 选项。
  • 输入自定义的 root 密码并重复确认,系统会自动检测密码强度(建议使用复杂密码)。
  • 系统默认支持 SM3 加密技术,无需额外操作,设置完成后点击 “Done” 返回。

2. 自定义系统分区(关键步骤)
  • 在主配置界面点击 “Installation Destination” 选项,确认已选中 Server3 的目标硬盘。

  • 选择 “Custom” 自定义分区模式,点击 “Done” 进入分区编辑界面。

  • 保留系统默认的启动分区(通常为 /boot 或 ESP 分区),不对其进行修改,然后按照以下要求创建其他分区:

    1. 点击 “+” 号,挂载点选择 “/”,容量输入 “25 GiB”,文件系统选择 “ext4”,分区类型勾选 “LVM”,点击 “Add Mount Point”。
    2. 再次点击 “+” 号,挂载点选择 “swap”,容量输入 “4 GiB”,文件系统选择 “swap”,分区类型勾选 “LVM”,点击 “Add Mount Point”。
    3. 最后点击 “+” 号,挂载点选择 “/opt”,容量输入 “5 GiB”,文件系统选择 “xfs”,分区类型勾选 “LVM”,点击 “Add Mount Point”。
  • 确认分区配置与需求一致后,点击 “Begin Installation” 开始安装。

四、安装完成与验证

  1. 等待系统安装进度条完成(期间无需操作),安装成功后点击 “Reboot System” 重启服务器。

  2. 服务器重启后,使用 root 账号和设置的密码登录,通过以下命令验证分区配置是否正确:

    • 执行 df -h 查看 /、/opt 分区的容量与文件系统。
    • 执行 free -h 查看 swap 分区的容量

克隆三台,server2/3也要加两张网卡,ws加一张就可以

(二)信创系统管理

配置静态ip

修改连接为静态 IP 配置

vim /etc/sysconfig/network-scripts/ifcfg-ens160    网卡看自己的是什么:ens160
​
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.12.162
NETMASK=255.255.255.0
GATEWAY=192.168.12.2   #  这里一定要配点2,不然上不了网
DNS1=114.114.114.114
DNS2=8.8.8.8

重启网络连接生效

systemctl restart NetworkManager

验证配置

ip a show ens160  # 查看IP是否生效
cat /etc/resolv.conf  # 查看DNS是否生效

一、Server3 网口绑定配置(bond1,balance-alb 模式)

openEuler 默认使用NetworkManager管理网络,网口绑定操作如下:

1. 检查并启用必要工具
#下载
dnf install -y NetworkManager
# 确保NetworkManager正常运行
systemctl enable --now NetworkManager

2. 创建 bond 接口及成员

这里虚拟机要先关机添加两张网卡

确认系统中实际存在的网络接口名

先查看当前系统中可用的网络接口(包括物理网卡、虚拟网卡等),确保接口名正确:

nmcli device status  # 查看所有网络设备状态  nmcli connection show  也可以
# 或
ip link show         # 查看接口列表

输出中 DEVICE 列即为实际接口名(例如 ens33eth0 等),注意区分大小写。

# 创建bond连接(名称nm_bond1,设备bond1,模式balance-alb)
nmcli connection add type bond con-name nm_bond1 ifname bond1 mode balance-alb
​
# 添加ens224为成员(连接名bond1_port1)
nmcli connection add type bond-slave con-name bond1_port1 ifname ens224 master bond1
​
# 添加ens256为成员(连接名bond1_port2)
nmcli connection add type bond-slave con-name bond1_port2 ifname ens256 master bond1
​
# 启动绑定(先从后主)
nmcli connection up bond1_port1
nmcli connection up bond1_port2
nmcli connection up nm_bond1

检查连接配置中的接口名是否错误

假设你之前创建的连接(例如 bond-slave 或普通网卡连接)中指定了错误的 ifname(如 ens160),但实际接口是 ens33,则需要修改连接的接口名配置:

nmcli connection modify 你的连接名 ifname 实际接口名
3. 配置 bond1 的 IP 地址(IPv4/IPv6)
# 配置IPv4:172.16.50.103/24,网关172.16.50.1
nmcli connection modify nm_bond1 ipv4.addresses 172.16.50.103/24
nmcli connection modify nm_bond1 ipv4.gateway 172.16.50.1
nmcli connection modify nm_bond1 ipv4.method manual

# 配置IPv6:2402:2025::103/64
nmcli connection modify nm_bond1 ipv6.addresses 2402:2025::103/64
nmcli connection modify nm_bond1 ipv6.method manual

# 重启生效
nmcli connection up nm_bond1

验证绑定状态
cat /proc/net/bonding/bond1  # 确认模式为balance-alb,成员接口状态为up

二、所有服务器基础配置

1. 配置主机名(以 Server3 为例)
hostnamectl set-hostname node3.server.itai.org

echo "127.0.0.1 $(hostname)" >> /etc/hosts 
# 避免hostname解析警告 
# echo:是一个用于在终端输出文本的命令,这里利用它将指定内容输出到其他地方。
#"127.0.0.1 $(hostname)":双引号内是要输出的内容。127.0.0.1 是本地回环地址,用于本地机器内部的网络通信 ;$(hostname) 是一个命令替换,它会获取当前系统的主机名(也就是前面通过 hostnamectl set-hostname 命令设置的 node3.server.itai.org )。所以整体内容就是将 127.0.0.1 和当前主机名组合成一行文本

2. 配置 IP 地址(Server1/2两个非 bond 接口,以 Server1 为例)

这里也要添加两张网卡(前面也强调了!!!)

创建连接

nmcli connection add type ethernet con-name ens224 ifname ens224
nmcli connection add type ethernet con-name ens256 ifname ens256
nmcli connection up ens224  # 重启连接生效
nmcli connection up ens256  # 重启连接生效

server1
# 配置ens224(IPv4/IPv6)  ens224 和ens56 替换为实际添加的网卡
nmcli connection modify ens224 ipv4.addresses 172.16.50.101/24
nmcli connection modify ens224 ipv4.gateway 172.16.50.1
nmcli connection modify ens224 ipv4.method manual
nmcli connection modify ens224 ipv6.addresses  2402:2025::101/64
nmcli connection modify ens224 ipv6.method manual
nmcli connection up ens224
# 配置ens256(仅IPv4)
nmcli connection add type ethernet con-name ens256 ifname ens256
nmcli connection modify ens256 ipv4.addresses 10.0.0.101/24
nmcli connection modify ens256 ipv4.method manual
nmcli connection up ens256  # 重启连接生效

server1
# 配置ens224(IPv4/IPv6)  ens224 和ens56 替换为实际添加的网卡
nmcli connection modify ens192 ipv4.addresses 172.16.50.111/24
nmcli connection modify ens192 ipv4.gateway 172.16.50.1
nmcli connection modify ens192 ipv4.method manual
nmcli connection modify ens192 ipv6.addresses  2402:2025::111/64
nmcli connection modify ens192 ipv6.method manual
nmcli connection up ens192
# 配置ens256(仅IPv4)
nmcli connection add type ethernet con-name ens224 ifname ens224
nmcli connection modify ens224 ipv4.addresses 10.0.0.102/24
nmcli connection modify ens224 ipv4.method manual
nmcli connection up ens224  # 重启连接生效

server2
# 配置ens224(IPv4/IPv6)  ens224 和ens56 替换为实际添加的网卡
nmcli connection modify ens224 ipv4.addresses 172.16.50.102/24
nmcli connection modify ens224 ipv4.gateway 172.16.50.1
nmcli connection modify ens224 ipv4.method manual
nmcli connection modify ens224 ipv6.addresses  2402:2025::102/64
nmcli connection modify ens224 ipv6.method manual
nmcli connection up ens224
# 配置ens256(仅IPv4)
nmcli connection add type ethernet con-name ens256 ifname ens256
nmcli connection modify ens256 ipv4.addresses 10.0.0.102/24
nmcli connection modify ens256 ipv4.method manual
nmcli connection up ens256  # 重启连接生效

如果遇到这种同名旧连接警告

清理同名旧连接(避免后续干扰)

若想删除残留的同名连接,先查看所有连接,再删除多余的 ens224:

# 1. 列出所有网络连接,找到多余的 ens224(UUID 不同)
nmcli connection show

# 2. 用 UUID 删除多余连接(替换为要删除的 UUID)
nmcli connection delete 多余的UUID
修改后需通过 down + up 重启连接,否则配置不会立即生效
nmcli connection down ens256
nmcli connection up ens256

如果遇到这种配ip是dhcp抽风

  1. 查看网络连接的 UUID
nmcli connection show

找到 ens224 对应的连接 UUID(类似 bf7733f1-xxx)。

  1. 修改连接为手动 IP 模式(仅保留 10.0.0.102/24
nmcli connection modify <UUID> ipv4.method manual ipv4.addresses 10.0.0.102/24

(将 <UUID> 替换为实际查询到的连接 UUID)

  1. 重启网络连接使配置生效
nmcli connection down ens256
nmcli connection up ens256
桌面端 ws.itai.org 网络配置(加一张网卡 ens224)
# 配置ens224(172.16.50.0/24网段,IPv4+IPv6)
nmcli connection add type ethernet con-name ens224 ifname ens224
nmcli connection modify ens224 ipv4.addresses 172.16.50.111/24
nmcli connection modify ens224 ipv4.gateway 172.16.50.1
nmcli connection modify ens224 ipv4.method manual
nmcli connection modify ens224 ipv6.addresses 2402:2025::111/64
nmcli connection modify ens224 ipv6.method manual
nmcli connection up ens224

验证配置是否正确:

执行以下命令检查各服务器的 IPv6 地址,确保无重复:

ip -6 addr show  # 查看当前主机的 IPv6 地址
ping6 2402:2025::102  # 从其他主机 ping Server2 的 IPv6 地址,确认连通性
3. 防火墙配置(public 区域,永久生效,所有四台)
# 开放SSH(后续按需添加服务端口)
systemctl enable --now firewalld
firewall-cmd --set-default-zone=public
firewall-cmd --add-port=22/tcp --permanent  
firewall-cmd --reload

4. root 密码与 SSH 远程登录(四台)
# 设置root密码为Admin@0000
echo "Admin@0000" | passwd --stdin root

# 允许root SSH登录(openEuler默认可能禁用)
vim /etc/ssh/sshd_config
PermitRootLogin yes
PasswordAuthentication yes
PubkeyAuthentication yes

设置开机自启:systemctl enable --now sshd

5. SSH 密钥对生成与免密登录(四台)

配置前要在vim /etc/hosts文件配置域名解析

server1
192.168.12.163 node2.server.itai.org
192.168.12.164 node3.server.itai.org
192.168.12.165 ws.itai.org
server2
192.168.12.162 node1.server.itai.org
192.168.12.164 node3.server.itai.org
192.168.12.165 ws.itai.org
server3
192.168.12.162 node1.server.itai.org
192.168.12.163 node2.server.itai.org
192.168.12.165 ws.itai.org
ws
192.168.12.162 node1.server.itai.org
192.168.12.163 node2.server.itai.org
192.168.12.164 node3.server.itai.org

# 生成RSA密钥(4096位,默认路径)
ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa

# 配置免密登录(以Server1到其他节点为例)
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2.server.itai.org
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node3.server.itai.org
ssh-copy-id -i ~/.ssh/id_rsa.pub root@ws.itai.org

验证:
ssh node1.server.itai.org

三、DNS 服务搭建(Server1 主 DNS,Server2 备用 DNS)

openEuler 使用bindbind-utils,配置如下:

1. 安装软件(Server1/2 均执行)
dnf install -y bind bind-utils
systemctl enable --now named

2. 主 DNS 配置(Server1)
(1)修改/etc/named.conf
cat > /etc/named.conf << EOF
options {
    listen-on port 53 { any; };  # 允许所有IP访问DNS服务
    listen-on-v6 port 53 { any; };
    directory       "/var/named";
    dump-file       "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    secroots-file   "/var/named/data/named.secroots";
    recursing-file  "/var/named/data/named.recursing";
    allow-query     { any; };  # 允许所有主机查询

    # 转发外部域名请求到公共DNS(如阿里云DNS),实现上网
    forwarders {
        223.5.5.5;    # 阿里云DNS
        223.6.6.6;
    };
    forward only;  # 仅转发,不自己迭代查询

    # 禁用递归查询限制(允许解析外部域名)
    recursion yes;
    dnssec-validation no;
    managed-keys-directory "/var/named/dynamic";
    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
    include "/etc/crypto-policies/back-ends/bind.config";
};

logging {
    channel default_debug {
        file "data/named.run";
        severity dynamic;
    };
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
EOF

给权限
chown root:named /etc/named.conf
chmod 640 /etc/named.conf

#检查语法(确保无输出):
named-checkconf

journalctl -u named -n 20 #定位具体错误

(2)创建正向解析文件/var/named/db.server.itai.org
cat > /var/named/db.server.itai.org << EOF
$TTL 86400
@       IN SOA  server.itai.org. root.server.itai.org. (
                                        2025101701  ; 序列号(日期+版本)
                                        3600        ; 刷新时间
                                        1800        ; 重试时间
                                        604800      ; 过期时间
                                        86400 )     ; 最小TTL
        IN NS   node1.server.itai.org.
        IN NS   node2.server.itai.org.
node1   IN A    172.16.50.101
node2   IN A    172.16.50.102
node3   IN A    172.16.50.103
ws.itai.org. IN A    172.16.50.111
EOF

# 设置权限(openEuler的named用户需要读取权限)
chmod 640 /var/named/db.server.itai.org
chown root:named /var/named/db.server.itai.org

root:表示文件的新所有者。在 Linux 系统中,每个文件和目录都有一个所有者,所有者对文件具有特定的权限,比如读取、写入、执行等。root 用户是系统的超级管理员,拥有最高权限,能够对系统中的任何文件和目录进行操作。
named:表示文件的新所属组。Linux 系统通过组来方便管理多个用户对文件或目录的访问权限。在这个例子中,named 通常是 BIND(Berkeley Internet Name Domain,用于实现 DNS 服务的软件)相关进程运行时所属的组。将文件所属组设置为 named ,意味着 named 组内的用户可以按照组权限设置对该文件进行相应操作。

(3)创建反向解析文件/var/named/db.0.50.16.172
cat > /var/named/db.0.50.16.172 << EOF
$TTL 86400
@       IN SOA  server.itai.org. root.server.itai.org. (
                                        2025101701
                                        3600
                                        1800
                                        604800
                                        86400 )
        IN NS   node1.server.itai.org.
        IN NS   node2.server.itai.org.
101     IN PTR  node1.server.itai.org.
102     IN PTR  node2.server.itai.org.
103     IN PTR  node3.server.itai.org.
111     IN PTR  ws.itai.org.
EOF

chmod 640 /var/named/db.0.50.16.172
chown root:named /var/named/db.0.50.16.172

验证区域文件语法
# 检查正向区域文件
named-checkzone server.itai.org /var/named/db.server.itai.org
# 检查反向区域文件
named-checkzone 50.16.172.in-addr.arpa /var/named/db.0.50.16.172
(4)添加区域配置到/etc/named.rfc1912.zones 在基于 BIND(Berkeley Internet Name Domain,用于实现 DNS 服务的软件)的 Linux 系统中,/etc/named.rfc1912.zones 是一个重要的配置文件,主要用于管理 DNS 区域信息
cat >> /etc/named.rfc1912.zones << EOF
zone "server.itai.org" IN {
    type master;
    file "db.server.itai.org";
    allow-transfer { 172.16.50.102; };  # 只允许Server2同步该区域
};

zone "50.16.172.in-addr.arpa" IN {
    type master;
    file "db.0.50.16.172";
    allow-transfer { 172.16.50.102; };  # 反向区域也允许Server2同步
};
EOF

(5)启动服务并开放端口
named-checkconf
systemctl start named
firewall-cmd --add-port=53/udp --add-port=53/tcp --permanent
firewall-cmd --reload
3. 备用 DNS 配置(Server2)
(1)修改/etc/named.conf(同主 DNS,允许监听和查询)
cat > /etc/named.conf << EOF
options {
    listen-on port 53 { any; };
    listen-on-v6 port 53 { any; };
    directory       "/var/named";
    dump-file       "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    secroots-file   "/var/named/data/named.secroots";
    recursing-file  "/var/named/data/named.recursing";
    allow-query     { any; };

    # 同样转发外部请求到公共DNS
    forwarders {
        223.5.5.5;
        223.6.6.6;
    };
    forward only;

    recursion yes;
    dnssec-validation no;   
    managed-keys-directory "/var/named/dynamic";
    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
    include "/etc/crypto-policies/back-ends/bind.config";
};

logging {
    channel default_debug {
        file "data/named.run";
        severity dynamic;
    };
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
EOF


#nssec-validation yes 启用后,BIND 会验证所有域名的 DNSSEC 签名是否有效。但 itai.org 是自定义区域,未配置 DNSSEC 签名(无 DS 记录、RRSIG 记录等),导致信任链断裂。
(2)添加从区域配置到/etc/named.rfc1912.zones

同步主 DNS 的解析文件,实现冗余:

cat >> /etc/named.rfc1912.zones << EOF
# 正向区域(从主DNS同步)
zone "server.itai.org" IN {
    type slave;
    masters { 172.16.50.101; };  # 主DNS地址
    file "slaves/db.server.itai.org";  # 同步后保存路径
};

# 反向区域(从主DNS同步)
zone "50.16.172.in-addr.arpa" IN {
    type slave;
    masters { 172.16.50.101; };
    file "slaves/db.0.50.16.172";
};
EOF

(3)启动服务
mkdir -p /var/named/slaves
chown named:named /var/named/slaves
systemctl start named
systemctl enable --now named
# 启动开放防火墙端口(同主DNS)
firewall-cmd --add-port=53/udp --add-port=53/tcp --permanent
firewall-cmd --reload

4. 所有服务器配置 DNS 客户端 (所有)
cat > /etc/resolv.conf << EOF
nameserver 172.16.50.101
nameserver 172.16.50.102
search server.itai.org itai.org
EOF
# 防止resolv.conf被NetworkManager覆盖
chattr +i /etc/resolv.conf
要取消:才可以重新修改
chattr -i /etc/resolv.conf


chattr:用于设置文件或目录的特殊属性。这些特殊属性可以对文件或目录进行更高级的访问控制,即便用户是文件所有者或超级用户 root,在某些特殊属性设置下,也会受到限制。比如设置文件为不可删除属性,防止误操作或恶意删除重要文件。
chmod:用于更改文件或目录的访问权限。它可以设置文件或目录对于文件所有者、所属组以及其他用户的读(r)、写(w)、执行(x)权限,从而控制不同用户对文件或目录的操作权限。例如,将一个脚本文件设置为可执行权限,让用户能够运行它。
chown:用于更改文件或目录的所有者和所属组。通过这个命令,可以指定新的所有者和所属组,方便对文件或目录的管理权限进行转移。比如将某个文件的所有者从普通用户变更为 root 用户,或者将文件所属组从一个用户组变更为另一个用户组。

解决ws不能正向解析的问题

修改 DNS 配置,让 ws.itai.org 属于本地域

直接在 DNS 服务器(Server1)上添加 itai.org 域的配置,让 ws.itai.org 成为本地可解析的域名:

创建 itai.org 正向解析文件
cat > /var/named/db.itai.org << EOF
$TTL 86400
@       IN SOA  itai.org. root.itai.org. (
                                        2025102201  ; 序列号
                                        3600
                                        1800
                                        604800
                                        86400 )
        IN NS   node1.itai.org.  ; DNS服务器指向本地
        IN NS   node2.itai.org.
node1   IN A    172.16.50.101
node2   IN A    172.16.50.102
ws      IN A    172.16.50.111  ; 关键:添加ws.itai.org的A记录
EOF

# 设置权限
chown root:named /var/named/db.itai.org
chmod 640 /var/named/db.itai.org

/etc/named.rfc1912.zones 中添加 itai.org 区域配置
cat >> /etc/named.rfc1912.zones << EOF
zone "itai.org" IN {
    type master;
    file "db.itai.org";
    allow-transfer { 172.16.50.102; };  # 允许从服务器同步
};
EOF

重启服务并测试
# 检查语法
named-checkconf
named-checkzone itai.org /var/named/db.itai.org
# 重启服务
systemctl restart named
# 客户端测试(此时解析 ws.itai.org 会命中本地域)
nslookup ws.itai.org 

验证:

四、CA 证书服务(Server1 作为 CA)

openEuler 的 CA 配置依赖openssl,步骤如下:

1. 初始化 CA 目录结构
mkdir -p /etc/pki/CA/{certs,crl,newcerts,private}
touch /etc/pki/CA/index.txt  # 证书索引文件
echo 01 > /etc/pki/CA/serial  # 证书序列号起始值

2. 生成 CA 根证书(RSA 4096 位,有效期 1 年)
# 生成CA私钥(cakey.pem)
openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096
chmod 600 /etc/pki/CA/private/cakey.pem  # 严格权限

openssl是一个强大的开源密码学工具包,用于生成和管理证书、密钥、进行加密解密等操作,广泛用于 SSL/TLS 通信、数字签名等场景。
genrsa是 openssl 的子命令,用于生成 RSA 算法的私钥(RSA 是一种非对称加密算法,包含一对密钥:私钥和公钥,私钥需严格保密,公钥可公开)。

# 生成根证书(cacert.pem)
openssl req -new -x509 -days 365 -key /etc/pki/CA/private/cakey.pem \
-out /etc/pki/CA/cacert.pem \
-subj "/C=CN/ST=Beijing/L=Beijing/O=itai.org/OU=ca-rsa/CN=ca-rsa.itai.org"

req 用于处理证书请求(Certificate Request),包括生成证书请求、创建自签名证书等。
-new表示生成一个新的证书请求(Certificate Signing Request, CSR)。
-x509特殊选项:通常证书需要由 CA 签名,但 -x509 会直接生成一个自签名证书(即证书的签发者和持有者是同一个实体),适用于创建根 CA 证书(根 CA 证书必须自签名,因为没有更高层级的 CA 为其签名)。
-key 指定用于签署该证书的私钥路径,即之前生成的 cakey.pem(CA 的私钥)。证书的合法性依赖于这个私钥,后续用该 CA 签署其他证书时也会用到此私钥。
-out 指定生成的 CA 证书的保存路径和文件名:
/etc/pki/CA/cacert.pem 是标准路径,cacert 表示 “CA 证书”(CA Certificate),.pem 是证书的文本格式(Base64 编码)。
-subj 直接指定证书的主题信息(避免交互式输入),各字段含义:
C=CN:国家(Country),CN 表示中国。
ST=Beijing:省份 / 州(State),这里是北京。
L=Beijing:城市(Locality),这里是北京。
O=itai.org:组织(Organization),通常是公司 / 机构名称,这里是 itai.org。
OU=ca-rsa:组织单位(Organizational Unit),表示组织内的部门,这里是 ca-rsa(可自定义)。
CN=ca-rsa.itai.org:通用名称(Common Name),证书的核心标识,通常是域名,这里是 CA 自身的域名 ca-rsa.itai.org(后续客户端信任该 CA 时,会验证此名称)。

3. 配置证书颁发策略(检查国家和组织)
# 修改openssl配置(openEuler默认路径)
#检查  /etc/pki/tls/openssl.cnf 下张图片字段是否为optional
vim /etc/pki/tls/openssl.cnf

国家( C )和组织( O )必须匹配,公用名( CN )必填,其他可选:
optional(可选,证书请求中可填可不填)match(必须与 CA 自身证书的对应字段一致)。
supplied(证书请求中必须提供该字段,否则 CA 拒绝签名)。

4. 生成服务器证书(*.itai.org,有效期 2 年)
# 生成服务器私钥和请求
openssl genrsa -out /tmp/server-rsa.key 4096
openssl req -new -key /tmp/server-rsa.key -out /tmp/server-rsa.csr \
-subj "/C=CN/ST=shanghai/L=shanghai/O=itai.org/OU=server/CN=*.itai.org"

生成的 server-rsa.csr 是服务器向 CA 申请证书的 “申请材料”,包含:
服务器的公钥(从 server-rsa.key 中提取)。
服务器的主题信息(如域名、组织等)。
接下来,需要将这个 CSR 文件提交给 CA,由 CA 用其私钥(cakey.pem)对 CSR 进行签名,生成最终的服务器证书(如 server-rsa.crt)。服务器后续会使用该证书(包含公钥)和自身私钥(server-rsa.key)进行加密通信(如 HTTPS、SSH 等)。

# 签名颁发证书   之前生成的 CA 私钥存放在 /etc/pki/CA/private/cakey.pem,而非默认默认路径 编辑 /etc/pki/tls/openssl.cnf 文件,找到 dir 相关的配置项,将默认的 dir = ./demoCA 修改为你实际的 CA 工作目录路径,比如 dir = /etc/pki/CA。这样 openssl ca 命令就会按照修改后的路径去查找所需的 index.txt、serial 等文件了。
要先做下面修改配置文件步骤    #dir             = /etc/pki/CA 
vim /etc/pki/tls/openssl.cnf

openssl ca -in /tmp/server-rsa.csr -out /tmp/server-rsa.pem -days 730 -keyfile /etc/pki/CA/private/cakey.pem -cert /etc/pki/CA/cacert.pem 

输入两次y
-keyfile # 指定 CA 私钥路径
-cert # 指定 CA 根证书路径
-outdir # 指定输出目录(可选)

# 复制到所有Server的/etc/ssl目录
scp /tmp/server-rsa.key /tmp/server-rsa.pem root@node1.server.itai.org:/etc/ssl/
scp /tmp/server-rsa.key /tmp/server-rsa.pem root@node2.server.itai.org:/etc/ssl/
scp /tmp/server-rsa.key /tmp/server-rsa.pem root@node3.server.itai.org:/etc/ssl/
scp /tmp/server-rsa.key /tmp/server-rsa.pem root@ws.itai.org:/etc/ssl/

验证:
gmssl certparse -in ca.crt

五、Redis 集群部署(Server1/2 各 3 节点)

openEuler 通过dnf安装 Redis,配置如下:

1. 安装 Redis(Server1/2 均执行)
dnf install -y redis
systemctl enable --now redis

永久启用内存过量使用(推荐)

编辑 /etc/sysctl.conf,添加配置使其永久生效:

vi /etc/sysctl.conf

在文件末尾添加一行:

vm.overcommit_memory = 1

保存退出后,执行以下命令加载新配置:

sysctl -p
2. 配置 Server1 的 3 个节点(node1:18901、node2:18902、node3:18903)
# 创建目录
for port in 18901 18902 18903; do
  # 从端口号中提取最后一位作为节点编号,如18901最后一位是1,对应node1
  node=$(echo $port | awk '{print substr($0, length($0))}')
  node="node${node}"  
  mkdir -p /opt/redis-cluster/${node}/data
  # 写入配置
  cat > /opt/redis-cluster/${node}.conf << EOF
port ${port}
cluster-enabled yes
cluster-config-file nodes-${port}.conf
cluster-node-timeout 5000
appendonly yes
dir /opt/redis-cluster/${node}/data
daemonize yes
bind 0.0.0.0
protected-mode no  
EOF
done

# 启动节点
redis-server /opt/redis-cluster/${node}.conf

node_num=$(echo $port | awk '{print substr($0, length($0))}'):使用 awk 的 substr 函数,提取端口号的最后一位字符。例如,端口 18901 最后一位是 1,18902 最后一位是 2,18903 最后一位是 3
最终节点名称为 node1(对应 18901)、node2(对应 18902)、node3(对应 18903)。

<< EOF:表示 “从这里开始读取输入,直到遇到下一个 EOF 为止” 中间的多行内容会作为整体输入到前面的命令(如 cat、ssh、配置文件写入等)

3. 配置 Server2 的 3 个节点(node4:18901、node5:18902、node6:18903)
for port in 18901 18902 18903; do
  node="node$((3 + $(echo $port | awk -F'9' '{print $2}')))"  # 18901→node4
  mkdir -p /opt/redis-cluster/${node}/data
  cat > /opt/redis-cluster/${node}.conf << EOF
port ${port}
cluster-enabled yes
cluster-config-file nodes-${port}.conf
cluster-node-timeout 5000
appendonly yes
dir /opt/redis-cluster/${node}/data
daemonize yes
bind 0.0.0.0
protected-mode no
EOF
done

4. 启动节点并创建集群
# Server1启动节点
for port in 18901 18902 18903; do
  node=$(echo $port | awk '{print substr($0, length($0))}')
  node="node${node}"
  redis-server /opt/redis-cluster/${node}.conf
done

# Server2启动节点
for port in 18901 18902 18903; do
  node="node$((3 + $(echo $port | awk -F'9' '{print $2}')))"
  redis-server /opt/redis-cluster/${node}.conf
done

# 查看是否启动
ps -ef | grep redis-server

# 在Server1创建集群(1主1从)  !!!!记得在两台机器上开端口 (不开死都做不出来,不信你试试看,别问我怎么知道的) 修改了配置记得一定要重新启动节点
firewall-cmd --add-port=18901-18903/tcp --permanent
firewall-cmd --permanent --add-port=28901-28903/tcp  # 集群总线端口(端口 + 10000)
firewall-cmd --add-port=6379/tcp --permanent
firewall-cmd --add-port=16379/tcp --permanent      # 集群总线端口(端口 + 10000)
firewall-cmd --reload

#如果出现 Unrecognized option or bad number of args for: '--cluster' 错误,是因为当前使用的 Redis 版本较低(低于 5.0),早期版本不支持 redis-cli --cluster 命令创建集群,需要通过 redis-trib.rb 工具(基于Ruby 实现)来创建。
redis-cli --cluster create \
172.16.50.101:18901 172.16.50.101:18902 172.16.50.101:18903 \
172.16.50.102:18901 172.16.50.102:18902 172.16.50.102:18903 \
--cluster-replicas 1

如创建失败
一键执行一键一键清理脚本
在任意一台服务器(如 172.16.50.101)上执行以下命令,批量清理所有节点:
bash
# 定义所有节点的 IP:端口(根据你的集群节点修改)
nodes=(
"172.16.50.101:18901"
"172.16.50.101:18902"
"172.16.50.101:18903"
"172.16.50.102:18901"
"172.16.50.102:18902"
"172.16.50.102:18903"
)

# 循环清理每个节点
for node in "${nodes[@]}"; do
  echo "清理节点: $node"
  # 连接节点,执行清理命令(FLUSHALL 清空数据,CLUSTER RESET HARD 重置集群配置)
  redis-cli -h $(echo $node | cut -d: -f1) -p $(echo $node | cut -d: -f2) << EOF
FLUSHALL
CLUSTER RESET HARD
exit
EOF
done


redis-cli 是 Redis 的命令行客户端,--cluster create 是创建 Redis 集群的专用选项。
这些节点需要提前启动(且已开启 cluster-enabled yes 配置),否则集群创建会失败。
--cluster-replicas 1指定每个主节点(master)配备 1 个从节点(slave),即 “一主一从” 的架构:
总节点数 6 个,按照此配置会自动分配为 3 个主节点 和 3 个从节点(3 主 × 1 从 = 3 从)。
Redis 会自动选举主节点,并为每个主节点分配从节点(通常从不同服务器分配从节点,提高容灾能力)。

手动触发集群通信(可选)

如果自动通信超时,可以手动让节点 “互相认识”

# 让 node1 与其他所有节点建立连接
redis-cli -h 172.16.50.101 -p 18901 cluster meet 172.16.50.101 18902
redis-cli -h 172.16.50.101 -p 18901 cluster meet 172.16.50.101 18903
redis-cli -h 172.16.50.101 -p 18901 cluster meet 172.16.50.102 18901
redis-cli -h 172.16.50.101 -p 18901 cluster meet 172.16.50.102 18902
redis-cli -h 172.16.50.101 -p 18901 cluster meet 172.16.50.102 18903

# (可选)让 node4 与其他节点再次确认连接(确保跨服务器通信)
redis-cli -h 172.16.50.102 -p 18901 cluster meet 172.16.50.101 18901
redis-cli -h 172.16.50.102 -p 18901 cluster meet 172.16.50.101 18902
redis-cli -h 172.16.50.102 -p 18901 cluster meet 172.16.50.101 18903
redis-cli -h 172.16.50.102 -p 18901 cluster meet 172.16.50.102 18902
redis-cli -h 172.16.50.102 -p 18901 cluster meet 172.16.50.102 18903

配置节点以下方法更容易记 (比赛推荐,复制粘贴改数据)

创建集群目录结构

#server1
mkdir -p /opt/redis-cluster/{node1,node2,node3}/data
#server2
mkdir -p /opt/redis-cluster/{node4,node5,node6}/data

Server1 节点配置

node1 配置文件 /opt/redis**-**cluster/node1.conf

vim /opt/redis-cluster/node1.conf
port 18901
bind 0.0.0.0
cluster-enabled yes
cluster-config-file /opt/redis-cluster/node1/nodes.conf
cluster-node-timeout 5000
appendonly yes
dir /opt/redis-cluster/node1/data
daemonize yes
protected-mode no

node2 配置文件 /opt/redis**-**cluster/node2.conf

vim /opt/redis-cluster/node2.conf
port 18902
bind 0.0.0.0
cluster-enabled yes
cluster-config-file /opt/redis-cluster/node2/nodes.conf
cluster-node-timeout 5000
appendonly yes
dir /opt/redis-cluster/node2/data
daemonize yes
protected-mode no

node3 配置文件 /opt/redis**-**cluster/node3.conf

vim /opt/redis-cluster/node3.conf
port 18903
bind 0.0.0.0
cluster-enabled yes
cluster-config-file /opt/redis-cluster/node3/nodes.conf
cluster-node-timeout 5000
appendonly yes
dir /opt/redis-cluster/node3/data
daemonize yes
protected-mode no

Server2 节点配置

node4 配置文件 /opt/redis**-**cluster/node4.conf

vim /opt/redis-cluster/node4.conf
port 18901
bind 0.0.0.0
cluster-enabled yes
cluster-config-file /opt/redis-cluster/node4/nodes.conf
cluster-node-timeout 5000
appendonly yes
dir /opt/redis-cluster/node4/data
daemonize yes
protected-mode no

node5 配置文件 /opt/redis**-**cluster/node5.conf

vim /opt/redis-cluster/node5.conf
port 18902
bind 0.0.0.0
cluster-enabled yes
cluster-config-file /opt/redis-cluster/node5/nodes.conf
cluster-node-timeout 5000
appendonly yes
dir /opt/redis-cluster/node5/data
daemonize yes
protected-mode no

node6 配置文件 /opt/redis**-**cluster/node6.conf

vim /opt/redis-cluster/node6.conf
port 18903
bind 0.0.0.0
cluster-enabled yes
cluster-config-file /opt/redis-cluster/node6/nodes.conf
cluster-node-timeout 5000
appendonly yes
dir /opt/redis-cluster/node6/data
daemonize yes
protected-mode no

启动节点

# 两台都要
firewall-cmd --permanent --add-port=18901/tcp
firewall-cmd --permanent --add-port=18902/tcp
firewall-cmd --permanent --add-port=18903/tcp
firewall-cmd --permanent --add-port=28901/tcp
firewall-cmd --permanent --add-port=28902/tcp
firewall-cmd --permanent --add-port=28903/tcp
firewall-cmd --reload
# server1
redis-server /opt/redis-cluster/node1.conf
redis-server /opt/redis-cluster/node2.conf
redis-server /opt/redis-cluster/node3.conf
#server2
redis-server /opt/redis-cluster/node4.conf
redis-server /opt/redis-cluster/node5.conf
redis-server /opt/redis-cluster/node6.conf

创建 Redis Cluster (任意一台)

redis-cli --cluster create 172.16.50.101:18901 172.16.50.101:18902 172.16.50.101:18903 172.16.50.102:18901 172.16.50.102:18902 172.16.50.102:18903 --cluster-replicas 1

确认节点是否启动成功

虽然有警告,但节点通常已启动,可通过以下命令验证:

# 查看 Redis 进程(应显示 3 个对应端口的进程)
ps -ef | grep redis-server | grep -v grep

# 检查端口监听(应显示 18901、18902、18903 端口处于 LISTEN 状态)
netstat -tulpn | grep redis

验证是否通信成功

连接任意节点,执行 CLUSTER NODES 命令,查看是否能列出所有 6 个节点:

redis-cli -h 172.16.50.101 -p 18901 cluster info
redis-cli -h 172.16.50.101 -p 18901 cluster nodes

cluster info 中 cluster_state:ok 。
cluster nodes 显示 6 个节点,3 个主节点各有 1 个从节点。

如果输出中包含所有 6 个节点的信息(状态为 connected),说明通信成功,此时再执行 redis-cli --cluster create ... 命令即可快速完成集群创建。

数据读写与分片测试

  1. 连接任意节点写入数据:
redis-cli -c -h 172.16.50.101 -p 18901 set key1 value1
redis-cli -c -h 172.16.50.101 -p 18901 set key2 value2
redis-cli -c -h 172.16.50.101 -p 18901 set key3 value3

  1. 查看数据分布:
redis-cli -c -h 172.16.50.101 -p 18901 cluster keyslot key1
redis-cli -c -h 172.16.50.101 -p 18901 cluster keyslot key2
redis-cli -c -h 172.16.50.101 -p 18901 cluster keyslot key3

  1. 从对应分片节点读取数据:
# 假设 key1 分片在 node2,连接 node2 读取
redis-cli -h 172.16.50.101 -p 18902 get key1

预期结果

不同 key 分布在不同主节点。

能从对应分片节点正确读取数据。

主从切换测试

  1. 找到某主节点的从节点(如 node1 的从节点是 node4)。
  2. 停止主节点 node1:
redis-cli -h 172.16.50.101 -p 18901 shutdown

3. 检查集群状态:

redis-cli -h 172.16.50.102 -p 18901 cluster nodes

  1. 尝试写入原主节点的数据:
redis-cli -h 172.16.50.102 -p 18901 set key1 newvalue
redis-cli -h 172.16.50.102 -p 18901 get key1

预期结果

node4 升级为新主节点。

数据读写正常,集群状态 ok 。

持久化验证

  1. 写入测试数据:
redis-cli -h 172.16.50.101 -p 18901 set persistKey persistValue

  1. 重启对应节点(如 node1):
redis-cli -h 172.16.50.101 -p 18901 shutdown
redis-server /opt/redis-cluster/node1.conf

  1. 读取数据:
redis-cli -h 172.16.50.101 -p 18901 get persistKey

预期结果

重启后数据仍存在, /opt/redis-cluster/node1/data 目录下有持久化文件(如 appendonly.aof )。

清理redis集群

1关闭集群

先关闭所有已启动的 Redis 节点,避免清理时数据再次写入:

# 逐个关闭节点(以 Server1 为例,Server2 同理)
#快速杀进程
ps -ef | grep redis-server | awk '{print $2}' | xargs kill
redis-cli -h 172.16.50.101 -p 18901 shutdown
redis-cli -h 172.16.50.101 -p 18902 shutdown
redis-cli -h 172.16.50.101 -p 18903 shutdown
# Server2 关闭节点
redis-cli -h 172.16.50.102 -p 18901 shutdown
redis-cli -h 172.16.50.102 -p 18902 shutdown
redis-cli -h 172.16.50.102 -p 18903 shutdown

2清理配置文件

删除每个节点的数据目录和集群配置文件( nodes.conf ),确保节点恢复 “空状态”:

rm -rf /opt/redis-cluster/node{1..6}/data/*
rm -rf /opt/redis-cluster/node{1..6}/nodes.conf

3重新启动

# Server1 启动节点
redis-server /opt/redis-cluster/node1.conf
redis-server /opt/redis-cluster/node2.conf
redis-server /opt/redis-cluster/node3.conf
# Server2 启动节点
redis-server /opt/redis-cluster/node4.conf
redis-server /opt/redis-cluster/node5.conf
redis-server /opt/redis-cluster/node6.conf

4验证

# 若使用 redis-cli --cluster(Redis 5.0+)
redis-cli --cluster create 172.16.50.101:18901 172.16.50.101:18902 172.16.50.101:18903
172.16.50.102:18901 172.16.50.102:18902 172.16.50.102:18903 --cluster-replicas 1
# 若使用 redis-trib.rb(Redis <5.0)
redis-trib.rb create --replicas 1 172.16.50.101:18901 172.16.50.101:18902
172.16.50.101:18903 172.16.50.102:18901 172.16.50.102:18902 172.16.50.102:18903

5 关键说明

nodes.conf 是 Redis 集群自动生成的节点配置文件,记录了集群拓扑信息,若节点曾加入过集群,必须删除

该文件。

数据目录( dir 配置项)中的持久化文件(如 appendonly.aof 、 dump.rdb )会残留历史数据,需一并删

除。

确保清理操作在所有节点上完成,否则未清理的节点仍会导致创建失败

六、Server1 的 Apache 配置 (这个方案废弃,请见最后)

安装 Apache 和国密支持(GM/TLS)

欧拉系统默认使用 dnf 包管理器,且支持国密算法(通过 GmSSL 或国密版 OpenSSL)。

dnf install -y httpd mod_ssl cmake

安装国密工具(GmSSL)

dnf install -y git gcc make
git config --global http.postBuffer 524288000  # 设置为 500MB
git clone https://github.com/guanzhi/GmSSL.git
cd GmSSL
mkdir build && cd build
cmake ..
make -j$(nproc)
make install
ldconfig

步骤二:生成国密证书(SM2)

使用 GmSSL 生成国密证书:

mkdir -p /etc/httpd/ssl
cd /etc/httpd/ssl

# 生成SM2私钥
gmssl sm2keygen -pass 1234 -out itai.org.key

# 生成 CSR
# 把要回答的 5 个字段一次性 echo 进去
gmssl reqgen \
  -C CN \
  -ST Beijing \
  -L Beijing \
  -O ITAI \
  -CN "*.itai.org" \
  -key itai.org.key \
  -out itai.org.csr \
  -pass 1234

# 生成 CA 私钥
gmssl sm2keygen -pass 1234 -out ca.key

# 基于私钥和配置文件生成 CA 根证书(有效期 3650 天)
gmssl certgen -key ca.key -pass 1234 -C CN -ST Beijing -L Beijing -O ITAI-CA -CN "ITAI Root CA" -key_usage keyCertSign -ca -out ca.crt -days 3650
 
验证:
gmssl certparse -in ca.crt

# 自签名证书
gmssl reqsign -in itai.org.csr -days 365 -key_usage digitalSignature -out itai.org.crt -cacert ca.crt -key ca.key -pass 1234

步骤三:创建网站内容与错误页面

# 创建主站点目录
mkdir -p /var/www/html/itai
echo "Hello_ITAI" | sudo tee /var/www/html/itai/index.html

# 创建403错误页面
sudo mkdir -p /var/www/html/error
sudo tee /var/www/html/error/403.html << 'EOF'
<!DOCTYPE html>
<html>
<head><title>403 Forbidden</title></head>

<body>
<h1>403 Forbidden</h1>

<p>You are not allowed to access this resource using an IP address.</p>

</body>

</html>

EOF

步骤四:配置 Apache 虚拟主机

编辑配置文件:

tee /etc/httpd/conf.d/itai.org.conf << 'EOF'
# 拒绝IP访问
<Directory "/var/www/html">
    Require all denied
</Directory>

# HTTP 虚拟主机 - 强制跳转 HTTPS
<VirtualHost *:80>
    ServerName itai.org
    ServerAlias *.itai.org
    RewriteEngine On
    RewriteRule ^(.*)$ https://www.itai.org$1 [R=301,L]
</VirtualHost>

# HTTPS 虚拟主机
<VirtualHost *:443>
    ServerName www.itai.org
    DocumentRoot /var/www/html/itai

    SSLEngine on
    SSLCertificateFile /etc/httpd/ssl/itai.org.crt
    SSLCertificateKeyFile /etc/httpd/ssl/itai.org.key

    # 国密支持(需要国密版 mod_ssl)
    # SSLCipherSuite SM2-WITH-SM4-SM3

    <Directory "/var/www/html/itai">
        Require all granted
    </Directory>

    # 设置主页内容
    DirectoryIndex index.html
</VirtualHost>

# IP访问返回403
<VirtualHost *:80>
    DocumentRoot /var/www/html/error
    <Directory "/var/www/html/error">
        Require all granted
    </Directory>

    ErrorDocument 403 /403.html
    Redirect 403 /
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot /var/www/html/error
    SSLEngine on
    SSLCertificateFile /etc/httpd/ssl/itai.org.crt
    SSLCertificateKeyFile /etc/httpd/ssl/itai.org.key
    <Directory "/var/www/html/error">
        Require all granted
    </Directory>

    ErrorDocument 403 /403.html
    Redirect 403 /
</VirtualHost>

EOF

步骤五:启动服务并设置开机自启

systemctl enable --now httpd
systemctl restart httpd

#看详细错误
journalctl -xeu httpd.service | tail -n 50

#强制检查 Apache 配置语法
httpd -t -D DUMP_VHOSTS

# 查看最近100行错误日志,重点关注启动时的具体报错
tail -n 100 /var/log/httpd/error_log

验证配置

访问方式预期行为
http://itai.org跳转到 https://www.itai.org
https://itai.org显示 Hello_ITAI
http://192.168.x.x返回 403 页面
https://192.168.x.x返回 403 页面

确认国密算法是否生效

使用 GmSSL 客户端测试:

gmssl s_client -connect www.itai.org:443 -cipher SM2-WITH-SM4-SM3

!!!这种方式我不会搞半天没用

openEuler 使用httpd,配置如下:

环境准备

确保 Server1 已联网,且使用 root 用户操作(或通过 sudo 获取权限)。

关闭或配置防火墙,开放 80(HTTP)和 443(HTTPS)端口:

# 开放 80 和 443 端口(永久生效)
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
# 重新加载防火墙规则
firewall-cmd --reload
1. 安装 Apache 及 SSL和git
dnf install -y httpd mod_ssl git cmake
systemctl enable --now httpd

2. 写入域名跳转配置
# 清空文件
echo "" > /etc/httpd/conf.d/itai.conf

# 重新写入正确配置(直接复制粘贴下面的完整内容)
cat << 'EOF' > /etc/httpd/conf.d/itai.conf
# 配置 1:itai.org 及非 www 的三级域名跳转到 www.itai.org
<VirtualHost *:80>
    ServerName itai.org
    ServerAlias *.itai.org !www.itai.org
    RedirectMatch permanent ^/(.*)$ http://www.itai.org/$1
</VirtualHost>

# 配置 2:www.itai.org http的基础配置
<VirtualHost *:80>
    ServerName www.itai.org
    DocumentRoot "/var/www/html"
    ErrorLog "/var/log/httpd/www.itai.org_error.log"
    CustomLog "/var/log/httpd/www.itai.org_access.log" combined
    <Directory "/var/www/html">
        Require all granted
        Options FollowSymLinks
        AllowOverride All
    </Directory>

</VirtualHost>

EOF

配置 ServerName node1.server.itai.org:80
# 检查 Apache 配置语法(无报错即为正确)
httpd -t
重启服务:
systemctl restart httpd

限制 IP 访问(IP 访问返回 403 页面)

修改 itai.conf 中的 www.itai.org 虚拟主机配置,添加 IP 限制规则:

vim /etc/httpd/conf.d/itai.conf

更新 www.itai.org 的 HTTP 配置块:

<VirtualHost *:80>
    ServerName www.itai.org
    DocumentRoot "/var/www/html"
    # 核心:限制 IP 访问,仅允许域名访问
    <Directory "/var/www/html">
        # 拒绝所有 IP 直接访问
        Require all denied
        # 允许通过域名解析后的访问(间接允许域名访问)
        Require all granted
    </Directory>

    # 自定义 403 错误页面(IP 访问时显示)
    ErrorDocument 403 /403.html
</VirtualHost>

创建自定义 403 页面
# 在网站根目录创建 403.html
vi /var/www/html/403.html

写入 403 页面内容(可自定义):

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>403 Forbidden</title>

</head>

<body>
    <h1>403 Forbidden</h1>

    <p>不允许通过 IP 地址访问,请使用域名 www.itai.org 访问。</p>

</body>

</html>

3. 配置默认页面(返回 Hello_ITAI)

设置域名访问默认页面(返回 Hello_ITAI)

Apache 默认首页是 DocumentRoot 目录下的 index.html,直接修改该文件即可:

# 覆盖默认 index.html
echo "Hello_ITAI" > /var/www/html/index.html
# 设置权限
chown apache:apache /var/www/html/index.html
chmod 644 /var/www/html/index.html
准备国密证书
  • 根据前文的 CA 证书服务配置(使用 openssl 自建 CA 签发证书),这里可以通过 自建国密算法(SM2)的 CA 和证书 来生成 www.itai.org_sm2.crt(公钥)和 www.itai.org_sm2.key(私钥)。以下是具体生成步骤:

前提:确保 OpenSSL 支持国密算法

  • 欧拉系统默认的 openssl 可能不支持 SM2/SM3 算法,需先安装支持国密的版本(以 openssl-1.1.1 及以上为例,或使用 gnutls 工具)。验证是否支持
openssl ecparam -list_curves | grep SM2

若输出 SM2 则支持,否则需安装国密补丁版 OpenSSL(可通过源码编译或第三方仓库安装,此处假设已支持)。

步骤一:生成国密 CA 根证书(自建 CA)

生成 CA 私钥(SM2 算法)

# 生成 SM2 私钥(密码保护,可省略 -des3 取消密码)
openssl ecparam -genkey -name SM2 -out /etc/pki/CA/private/cakey_sm2.key
# 设置私钥权限(仅 root 可读)
chmod 600 /etc/pki/CA/private/cakey_sm2.key

生成 CA 根证书(公钥,自签名)

openssl req -new -x509 -days 365 -key /etc/pki/CA/private/cakey_sm2.key -out /etc/pki/CA/cacert_sm2.crt -sm3 -subj "/C=CN/ST=Beijing/L=Beijing/O=itai.org/OU=ca-sm2/CN=ca-sm2.itai.org"

步骤二:生成 www.itai.org 的国密证书

生成服务器私钥(SM2 算法)

openssl ecparam -genkey -name SM2 -out /etc/pki/tls/private/www.itai.org_sm2.key
# 设置权限
chmod 600 /etc/pki/tls/private/www.itai.org_sm2.key
chown root:root /etc/pki/tls/private/www.itai.org_sm2.key

生成证书请求文件(CSR)

openssl req -new -key /etc/pki/tls/private/www.itai.org_sm2.key -out /tmp/www.itai.org_sm2.csr -sm3 -subj "/C=CN/ST=Beijing/L=Beijing/O=itai.org/OU=ca-sm2/CN=ca-www.itai.org"

输入信息时,Common Name 必须设为 www.itai.org(与域名一致),其他信息可与 CA 根证书保持一致。使用自建 CA 签发服务器证书

openssl x509 -req -in /tmp/www.itai.org_sm2.csr -CA /etc/pki/CA/cacert_sm2.crt -CAkey /etc/pki/CA/private/cakey_sm2.key -CAcreateserial -out /etc/pki/tls/certs/www.itai.org_sm2.crt -days 730 -sm3

步骤三:确认证书文件

执行后,会生成所需的两个文件:

可通过以下命令验证证书信息:

# 查看证书详情(确认算法为 SM2/SM3)
openssl x509 -in /etc/pki/tls/certs/www.itai.org_sm2.crt -noout -text | grep "Signature Algorithm"

输出应包含 sm3WithSM2,表示国密算法生效。

后续操作

将这两个文件路径填入 Apache 的 HTTPS 配置/etc/httpd/conf.d/itai.conf中,即可完成国密证书的配置:(见下方完整配置)

SSLCertificateFile /etc/pki/tls/certs/www.itai.org_sm2.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.itai.org_sm2.key

SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite HIGH:!aNULL:!MD5
- 公钥文件(证书):`/etc/pki/tls/certs/www.itai.org_sm2.crt`
- 私钥文件:`/etc/pki/tls/private/www.itai.org_sm2.key`

安装编译工具:如果您的系统是全新的,请先在服务器上安装 C++ 开发环境,为编译提供环境支持。您可以使用如下命令进行安装。

yum install -y gcc 
yum install -y gcc-c++ 

下载并编译安装 apr(以 apr 1.7.5 版本为例),您可以通过在服务器上输入以下命令,下载 apr 至服务器并编译安装,由于操作系统的版本不同,详细操作步骤略有区别。

#切换至 /usr/local/ 目录下
cd /usr/local/ 
#下载 apr 1.7.5
wget -c https://archive.apache.org/dist/apr/apr-1.7.5.tar.gz
#解压已下载的 apr 1.7.5 压缩包
tar -zvxf apr-1.7.5.tar.gz
#进入解压后的 apr 1.7.5 文件夹并指定编译目录路径。
cd apr-1.7.5/
./configure --prefix=/usr/local/apr
#编译安装 apr
make && make install 

下载并编译安装 apr-util(推荐使用 apr-util-1.5 版本,以 apr-util-1.5 版本为例)。

#切换至 /usr/local/ 目录下
cd /usr/local/ 
#下载 apr-util-1.5.4
wget -c http://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz
#解压已下载的 apr-util-1.5.4 压缩包
tar -zvxf apr-util-1.5.4.tar.gz 
#进入解压后的 apr-util-1.5.4 文件夹并指定编译目录路径。
cd /usr/local/apr-util-1.5.4/
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
#编译安装 apr-util
make && make install 

说明:

执行 make 命令时如果出现 #include <expat.h> ^ compilation terminated. 报错信息,请输入命令 yum install -y expat-devel 安装依赖库。

安装 pcre。您可以通过以下两种方式进行安装。

推荐使用 yum 进行安装。

 yum install -y pcre-devel 

编译安装。

#切换至 /usr/local/ 目录下
cd /usr/local/ 
#下载 pcre-8.45  (本地下载传上去)
wget -c https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz/download
#解压已下载的 pcre-8.45 压缩包
tar -zvxf pcre-8.45.tar.gz
#进入解压后的pcre-8.45文件夹并指定编译目录路径。
cd pcre-8.45/
./configure --prefix=/usr/local/pcre 
#编译安装 pcre
make && make install 

Apache 服务器安装:上述三个文件编译安装完成后,请下载 Apache 国密版和国密模块至 /usr/local 目录下进行编译安装。

注意:

国密模块文件名 wotrus_ssl.tar.gz 在解压与安装中请勿修改,否则可能会导致安装错误。

如果在安装 Apache 的过程中找不到 pcre、apr-util 或 apr 等相关文件,请将 /pcre/bin/apr-util/bin/apr/bin 等文件加入系统路径。

#下载 Apache httpd-2.4.62 压缩包
wget -c http://mirrors.tencent.com/apache/httpd/httpd-2.4.62.tar.gz
#下载国密模块
wget -c https://www.wotrus.com/download/wotrus_ssl.tar.gz
#解压已下载的 wotrus_ssl 压缩包
tar -zvxf wotrus_ssl.tar.gz 
#解压已下载的 httpd-2.4.62 压缩包
tar -zvxf httpd-2.4.62.tar.gz 
#进入解压后的 httpd-2.4.62 文件夹并指定编译目录路径。
cd httpd-2.4.62/
手动添加 PCRE 到系统环境(可选,解决路径识别问题)
若系统仍无法识别 pcre-config,可将其路径添加到环境变量:
# 临时生效(当前终端)
export PATH=/usr/local/pcre/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/pcre/lib:$LD_LIBRARY_PATH
./configure --prefix=/usr/local/httpd --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre --enable-so --enable-ssl 
#编译安装 Apache
make && make install

国密标准证书安装

在自建 DNS 服务中添加 TXT 记录

假设你是通过类似 bind 这样的 DNS 服务软件来管理域名解析(bind 是常见的开源 DNS 服务器软件),你需要找到域名 itai.org 的区域配置文件(通常在 /etc/bind/ 或类似目录下,文件名可能是 itai.org.zone 之类),然后添加如下内容: 这里我是 /var/named/db.itai.org

www IN TXT "202510201344292t71vdaij15n7gx3iqv3k2d0a2c7p0s7ts14ugqw4txt4g6jmt"

添加完成后,重启你的 DNS 服务(比如 systemctl restart bind9,具体命令根据你使用的 DNS 软件而定),使配置生效。我这是 systemctl restart named

验证是否生效 dig TXT www.itai.org 返回的 ANSWER SECTION 中显示与截图一致的 TXT 记录值时

强制终止残留的 named** 进程**

服务可能处于僵死状态,需先彻底清理进程:

# 查找所有 named 进程
ps aux | grep named

# 强制杀死所有 named 进程(替换 PID 为实际进程号,或直接用 pkill)
pkill -9 named

强制清理僵死进程
# 先确认僵死进程的 PID(图中为 59601)
kill -9 59601
# 再清理所有与 named 相关的阻塞进程
pkill -9 -f "systemctl.*named"
pkill -9 -f "journalctl.*named"

验证 DNS 解析

完成解析记录添加并重启 DNS 服务后,回到证书申请的页面,点击 “验证域名” 按钮,检查解析信息是否正确添加。如果验证通过,证书审核流程会继续推进;若未通过,需检查解析记录的配置是否有误,比如记录类型、记录值、主机记录是否准确,修正后再次验证。

已在 SSL 证书控制台 中下载并解压缩 cloud.tencent.com 证书文件包到本地目录。 解压缩后,可获得相关类型的证书文件。 其中包含 Apache 文件夹和 CSR 文件:

文件夹名称:cloud.tencent.com_apache

文件夹内容

root_sign_bundle.crt 证书文件

root_encrypt_bundle.crt 证书文件

cloud.tencent.com_sign.crt 证书文件

cloud.tencent.com_encrypt.crt 证书文件

cloud.tencent.com.key 私钥文件

CSR 文件内容

cloud.tencent.com_sign.csr 文件

cloud.tencent.com_encrypt.csr 文件

说明:

CSR 文件是申请证书时由您上传或系统在线生成的,提供给 CA 机构。安装时可忽略该文件。

使用 “WinSCP”(即本地与远程计算机间的复制文件工具)登录 Apache 服务器。

说明:

WinSCP 上传文件操作请参见 通过 WinSCP 上传文件到 Linux 云服务器

若您需部署到腾讯云云服务器,建议使用云服务器的文件上传功能,详情请参见 上传文件到云服务器

进入 /usr/local/httpd/conf 目录,新建 cert 目录,将已获取到的 root_sign_bundle.crt 证书文件、root_encrypt_bundle.crt 证书文件、cloud.tencent.com_sign.crt 证书文件、cloud.tencent.com_encrypt.crt 证书文件以及 cloud.tencent.com.key 私钥文件从本地目录拷贝到 Apache 服务器的 /usr/local/httpd/conf/cert 目录下。

进入 /usr/local/httpd/conf 目录,按照以下步骤编辑 httpd.conf 文件:

请在 #ServerName www.example.com:80 下增加 ServerName(您的域名):80

请去掉 LoadModule ssl_module modules/mod_ssl.so 前的 #

请在 #Include conf/extra/httpd-ssl.conf 下增加 Include conf/ssl.conf 文件内容后保存并退出。

/usr/local/httpd/conf 目录下,新建一个 ssl.conf 文件,添加如下配置:

Listen 443
<VirtualHost *:443>
#填写证书名称
ServerName cloud.tencent.com
#填写网站文件路径
DocumentRoot website根目录
#启用 SSL 功能
SSLEngine on
# SM2 证书 sign 配置
SSLCertificateFile /usr/local/httpd/conf/cert/cloud.tencent.com_sign.crt 
SSLCertificateKeyFile /usr/local/httpd/conf/cert/cloud.tencent.com.key
SSLCertificateChainFile /usr/local/httpd/conf/cert/root_sign_bundle.crt
# SM2 证书 encrypt 配置
SSLCertificateFile /usr/local/httpd/conf/cert/cloud.tencent.com_encrypt.crt
SSLCertificateKeyFile /usr/local/httpd/conf/cert/cloud.tencent.com.key
SSLCertificateChainFile /usr/local/httpd/conf/cert/root_encrypt_bundle.crt
# sign 和 encrypt 配置中的 .key 为同一个
#请按照以下协议配置
SSLProtocol all -SSLv2 -SSLv3
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
SSLCipherSuite ECC-SM4-SM3:SM2-WITH-SMS4-SM3:ECDH:AESGCM:HIGH:MEDIUM:!RC4:!DH:!MD5:!aNULL:!eNULL
SSLHonorCipherOrder on
<Directory "website根目录">
Options -Indexes -FollowSymLinks +ExecCGI
AllowOverride None
Order allow,deny
Allow from all
Require all granted
</Directory>

</VirtualHost>

说明:

以上配置内容仅为参考,具体的证书名称,证书目录,Directory 等配置请根据实际环境配置。

您通过执行以下命令验证配置文件问题。

/usr/local/httpd/bin/httpd -t

若提示 Syntax OK,则表示配置正常,可以启动 Apache 服务器。

若提示非 Syntax OK,请您重新配置或者根据提示修改存在问题。

执行以下命令重新启动 Apache 服务器,即可使用 https://cloud.tencent.com 进行访问。

/usr/local/httpd/bin/httpd -k restart

如果浏览器地址栏显示安全锁标识,则说明证书安装成功。

3. 配置 HTTPS 虚拟主机和 HTTP 跳转

完整配置如下:

# 1. itai.org 及三级域名 → www.itai.org(HTTP)
<VirtualHost *:80>
    ServerName itai.org
    ServerAlias *.itai.org
    Redirect permanent / http://www.itai.org/
</VirtualHost>

# 2. www.itai.org 的 HTTP → HTTPS 跳转
<VirtualHost *:80>
    ServerName www.itai.org
    DocumentRoot "/var/www/html"
    # 核心:HTTP 永久跳转到 HTTPS
    Redirect permanent / https://www.itai.org/

    # IP 访问限制(与之前一致)
    <Directory "/var/www/html">
        Require all denied
        Require all granted
    </Directory>

    ErrorDocument 403 /403.html
</VirtualHost>

# 3. www.itai.org 的 HTTPS 配置(国密证书)
<VirtualHost *:443>
    ServerName www.itai.org
    DocumentRoot "/var/www/html"

    # 启用 SSL
    SSLEngine on
    # 国密证书公钥路径
    SSLCertificateFile /etc/pki/tls/certs/www.itai.org_sm2.crt
    # 国密证书私钥路径
    SSLCertificateKeyFile /etc/pki/tls/private/www.itai.org_sm2.key

    # 国密算法配置(部分 CA 可能需要额外指定,根据证书说明补充)
    SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1  # 仅启用安全协议
    SSLCipherSuite ECDHE-SM4-GCM-SM3:ECDHE-SM4-CBC-SM3  # 国密加密套件

    # 允许域名访问(HTTPS 端无需 IP 限制,因 HTTP 已跳转)
    <Directory "/var/www/html">
        Require all granted
    </Directory>

</VirtualHost>

#####
Require all denied 直接拒绝所有访问,Require host itai.org 允许以 itai.org 为后缀的域名访问,这样既限制了 IP 访问,又能让域名正常访问
# SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1  # 仅启用安全协议
# SSLCipherSuite ECDHE-SM4-GCM-SM3:ECDHE-SM4-CBC-SM3  # 国密加密套件
4. 验证配置并重启 Apache
# 检查配置语法
httpd -t
# 重启 Apache 生效
systemctl restart httpd

七、Server2 的 LAMP 与 WordPress 部署 (有问题,暂代修复,见末尾)

1. 安装 LAMP 组件
dnf install -y httpd mariadb-server php php-mysqlnd php-gd php-common httpd-tools
systemctl enable --now httpd mariadb
2. 初始化数据库
# 设置root密码Admin@0000
mysql_secure_installation << EOF
n
Admin@0000
Admin@0000
y
y
y
y
EOF

# 创建数据库和用户
mysql -uroot -pAdmin@0000 << EOF
CREATE DATABASE wordpress;
CREATE USER 'wpadmin'@'localhost' IDENTIFIED BY 'wpAdmin@0000';
GRANT ALL ON wordpress.* TO 'wpadmin'@'localhost';
FLUSH PRIVILEGES;
EOF
3. 部署 WordPress

没有公网ip要在hosts里添加 (哪里打开哪里加)

# 下载并解压
wget https://wordpress.org/latest.tar.gz -P /tmp
tar -zvxf /tmp/latest.tar.gz -C /var/www/html/
chown -R apache:apache /var/www/html/wordpress
chmod -R 755 /var/www/html/wordpress

添加httpd.service 的环境变量引用
mkdir -p /etc/systemd/system/httpd.service.d
cat > /etc/systemd/system/httpd.service.d/override.conf << EOF
[Service]
ExecStart=
ExecStart=/usr/sbin/httpd -D FOREGROUND
EOF

# 配置虚拟主机(blog.itai.org)
cat > /etc/httpd/conf.d/blog.conf << EOF
<VirtualHost *:80>
    ServerName blog.itai.org
    DocumentRoot /var/www/html/wordpress
    <Directory /var/www/html/wordpress>
        AllowOverride All
        Require all granted
    </Directory>

</VirtualHost>

EOF

systemctl restart httpd
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload

#httpd 启动失败的核心原因在 /var/log/httpd/error_log 中必有明确记录,先通过日志定位具体问题(语法、端口、权限、模块),再针对性修复,即可解决。若日志中错误不明确,可将日志内容进一步反馈,以便精准排查

vim:
全部删除:按esc键后,先按gg(到达顶部),然后dG
全部复制:按esc键后,先按gg,然后ggyG
全选高亮显示:按esc键后,先按gg,然后ggvG或者ggVG

单行复制:按esc键后, 然后yy
单行删除:按esc键后, 然后dd
粘贴:按esc键后, 然后p

4. 浏览器初始化

访问http://blog.itai.org,按提示输入数据库信息及站点配置。

八、Server3 的 NFS 服务配置

openEuler 的 NFS 配置如下:

1. 安装 NFS 服务
yum install -y nfs-utils
systemctl enable --now nfs-server

2. 创建共享目录和用户
mkdir -p /data/nfs/lun_clutser
groupadd -g 1111 nfsusers
useradd -u 1111 -g 1111 nfsusers
chown -R nfsusers:nfsusers /data/nfs/lun_clutser
chmod 755 /data/nfs/lun_clutser

3. 配置 NFS 共享(/etc/exports
vim /etc/exports
#添加以下内容(假设 node1 的 FQDN 为 node1.server.itai.org ,node2 的 FQDNnode2.server.itai.org ):
/data/nfs/lun_clutser node1.server.itai.org(rw,sync,all_squash,anonuid=1111,anongid=1111)
/data/nfs/lun_clutser node2.server.itai.org(rw,sync,all_squash,anonuid=1111,anongid=1111)

rw :读写权限。
sync :磁盘写入完成后再返回成功(确保数据安全)。
all_squash :所有客户端用户操作映射到指定匿名用户。
anonuid=1111 、 anongid=1111 :映射到 nfsusers 用户的 UID/GID。

exportfs -r  # 生效配置

4. 开放防火墙端口(三台都要开放)
firewall-cmd --permanent --add-port=111/tcp
firewall-cmd --permanent --add-port=2049/tcp
firewall-cmd --reload

systemctl restart nfs-server
# 刷新 NFS 配置
exportfs -rv

systemctl enable --now rpcbind   # 服务端和客户端都要配置

5. Server1和2 配置自动挂载
yum install -y nfs-utils
mkdir -p /mnt/nfs
mount -t nfs node3.server.itai.org:/data/nfs/lun_cluster /mnt/nfs -o defaults,rw,sync,timeo=300,retrans=3

-t nfs
指定挂载的文件系统类型为 nfs(网络文件系统),告诉系统这是一个远程 NFS 共享。

# 编辑 fstab 文件自动挂载
vim /etc/fstab

# 添加以下内容(替换为实际服务端地址)
node3.server.itai.org:/data/nfs/lun_cluster  /mnt/nfs  nfs  defaults,rw,sync,timeo=300,retrans=3  0  0

重新加载并触发自动挂载
mount -a
systemctl daemon-reload

hard :使用硬挂载(超时后重试,保证可靠性)。
timeo=300 :超时时间 300ms。
retrans=3 :重试次数 3 次。

#验证挂载状态
mount | grep nfs
# 验证挂载
df -h | grep nfs

测试:

sever1创建

server3同步

三、验证配置

1. 服务端验证Server3

# 查看 NFS 共享状态
showmount -e 客户端地址(node1.server.itai.org)
# 验证目录权限和用户映射
su - nfsusers
touch /data/nfs/lun_clutser/test_file
ls -l /data/nfs/lun_clutser/test_file # 应显示 nfsusers:nfsusers

2. 客户端验证node1/node2

# 在挂载点创建文件
mkdir /mnt/nfs_shared
touch /mnt/nfs/client_test_file
# 切换到服务端查看文件
# 在 Server3 执行:
ls -l /data/nfs/lun_clutser/client_test_file # 应显示 nfsusers:nfsusers

3. 超时与重试验证(可选)

# 临时停止 Server3 的 NFS 服务
systemctl stop nfs-server
# 在客户端执行写操作,观察是否在超时后重试(300ms×3 后才会报错)
echo "test" > /mnt/nfs_shared/test_timeout
# 恢复 Server3 的 NFS 服务
systemctl start nfs-server

(三)信创系统适配验证

一、在 Server3 安装 OpenGauss 数据库及配套工具

配置 OpenGauss YUM 源 (在比赛时因为有资源,镜像也有,现在练习不用配)
# 创建 OpenGauss 源配置文件
vim /etc/yum.repos.d/opengauss.repo

写入以下内容(确保地址可用,若不可用需替换为官方最新仓库):

# 1. 备份旧 repo
mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/

cat /proc/version  
# 2. 写入清华源(openEuler 24.03 LTS)系统版本要对的上
cat >/etc/yum.repos.d/openEuler-TUNA.repo <<'EOF'
[OS]
name=openEuler-24.03-LTS - OS
baseurl=https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-24.03-LTS-SP2/OS/x86_64/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-24.03-LTS-SP2/OS/x86_64/RPM-GPG-KEY-openEuler

[everything]
name=openEuler-24.03-LTS - Everything
baseurl=https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-24.03-LTS-SP2/everything/x86_64/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-24.03-LTS-SP2/everything/x86_64/RPM-GPG-KEY-openEuler

[EPOL]
name=openEuler-24.03-LTS - EPOL
baseurl=https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-24.03-LTS-SP2/EPOL/main/x86_64/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-24.03-LTS-SP2/OS/x86_64/RPM-GPG-KEY-openEuler
EOF

刷新仓库缓存:

dnf clean all && sudo dnf makecache
开放端口
# 生产环境建议开放 5432 端口(OpenGauss 默认端口)
firewall-cmd --add-port=5432/tcp --permanent
firewall-cmd --reload
关闭 SELinux
setenforce 0  # 临时关闭
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config  # 永久关闭

安装 OpenGauss 核心组件

执行以下命令安装数据库服务器和客户端工具:

dnf install -y opengauss
编辑配置文件
vim /var/lib/opengauss/data/postgresql.conf

添加或取消注释以下两行:

listen_addresses = '*'
port = 5432

修改后需要重载:

gs_ctl reload -D /var/lib/opengauss/data

修改 pg_hba.conf 允许密码登录

OpenGauss 默认只信任本地 socket 登录(peer 认证),不允许密码登录

# 切换用户
su - opengauss

# 编辑配置文件
vim /var/lib/opengauss/data/pg_hba.conf

找到这一行(或类似):

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust

改成:

host    all             all             127.0.0.1/32            md5

修改后也需要重载:

gs_ctl reload -D /var/lib/opengauss/data

确认安装与环境变量配置

  1. 验证安装
rpm -qa | grep opengauss

应显示

opengauss-xxx.x86_64

包,说明安装成功。

  1. 配置环境变量OpenGauss 命令默认位于
/usr/local/opengauss/bin

将其加入系统路径:

配置共享库路径
echo "/usr/local/opengauss/lib" > /etc/ld.so.conf.d/opengauss.conf

# 刷新共享库缓存
ldconfig

echo 'export PATH=/usr/local/opengauss/bin:$PATH' >> /etc/profile

source /etc/profile

#验证命令是否可用 gs_initdb --version

   
### **配置 `GAUSSHOME` 环境变量(关键)**
   
`GAUSSHOME` 是 OpenGauss 必需的环境变量,指向安装目录,需在 `opengauss` 用户下配置:
   
1. **切换到 `opengauss` 用户**(若当前不是):
   
      ```bash
      su - opengauss
  1. 编辑环境变量配置文件
vim ~/.bashrc

3. 添加以下内容(根据实际安装路径调整,默认路径通常为 /usr/local/opengauss/opt/opengauss):

export GAUSSHOME=/usr/local/opengauss  # 替换为实际安装目录
export PATH=$GAUSSHOME/bin:$PATH       # 已配置过 PATH 可忽略此行
export LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATH

source ~/.bashrc

5. **验证环境变量**:

```bash
echo $GAUSSHOME  # 应输出安装目录路径,如 /usr/local/opengauss

检查安装目录完整性

确保 GAUSSHOME 指向的目录存在且完整(包含 binlibshare 等子目录):

4. **使配置生效**

ls $GAUSSHOME # 应显示 bin、lib、share 等文件夹

- 若目录不存在或文件缺失,说明安装不完整,需重新安装 OpenGauss。

![image-20251021195147826](https://cdn.nlark.com/yuque/0/2025/png/43330475/1765593186791-a3d4ffff-8ddb-4ddb-8ce4-da416c3797b4.png)

![image-20251021194845914](https://cdn.nlark.com/yuque/0/2025/png/43330475/1765593186887-bc049286-0987-4682-b267-6f82da574808.png)

 ![image-20251021194810439](https://cdn.nlark.com/yuque/0/2025/png/43330475/1765593186942-4006b9b8-15b2-4456-9534-9216d6450798.png)![image-20251021193656349](https://cdn.nlark.com/yuque/0/2025/png/43330475/1765593187003-0f857029-1885-4ddd-9900-fcb83995cd0a.png)

验证命令是否可用。

### 二、初始化数据库并配置系统用户

#### 1. 创建系统用户 `opengauss` 并设置密码

```bash
# 设置密码(输入 openGauss@0000 并确认)
echo "openGauss@0000" | passwd --stdin opengauss
#创建数据库数据目录
mkdir -p /var/lib/opengauss/data
# 授权数据库目录权限
chown -R opengauss:opengauss /var/lib/opengauss
chmod -R 700 /var/lib/opengauss
2. 初始化数据库(以 opengauss 系统用户操作)
# 切换到 opengauss 用户
su - opengauss
# 初始化数据库(设置管理员密码为 openGauss@0000)
gs_initdb -D /var/lib/opengauss/data --nodename=opengauss_node -U opengauss -w 'openGauss@0000'
# 启动数据库服务
gs_ctl start -D /var/lib/opengauss/data
检查:
gs_ctl status -D /var/lib/opengauss/data



一下遇到问题在尝试解决,不报错不用操作
!!!!!!!!!!!如果 /var/lib/opengauss/data 中的文件是无效或过时的数据,可直接清空:
# 切换到 opengauss 用户(确保权限正确)
su - opengauss
# 清空目录(谨慎操作,确保目录内无重要数据)
rm -rf /var/lib/opengauss/data/*

# 查看是否有数据库进程
ps -ef | grep gaussdb | grep -v grep
#如果进程存在但无法正常连接(如假死),需先强制停止再重启
# 切换到 opengauss 用户
su - opengauss
# 强制停止数据库(-m fast 表示快速关闭,未提交事务会回滚)
gs_ctl stop -D /var/lib/opengauss/data -m fast
# 若仍无法停止,直接 kill 进程(替换 PID 为实际进程 ID)
kill -9 12345  # 12345 是上一步 ps 命令查到的 PID
# 确认进程已终止(无输出即为终止)
ps -ef | grep gaussdb | grep -v grep
# 重新启动数据库
gs_ctl start -D /var/lib/opengauss/data

三、配置数据库用户及实例(db_oa 部分)

1. 登录数据库(管理员身份)
# 切换到 opengauss 用户
su - opengauss
# 登录数据库(密码:openGauss@0000)
gsql -d postgres -U opengauss -p 5432 -h localhost

2. 创建数据库用户 oaadmin

gsql 终端执行:

-- 创建用户 oaadmin (密码 oaAdmin@0000)
CREATE USER oaadmin WITH PASSWORD 'oaAdmin@0000';

3. 创建数据库 db_oa 及模式 sche_oa
-- 创建数据库 db_oa,所有者为 oaadmin
CREATE DATABASE db_oa WITH OWNER oaadmin ENCODING 'UTF8';

-- 切换到 db_oa 数据库   openGauss@0000
\c db_oa

-- 创建模式 sche_oa,所有者为 oaadmin
CREATE SCHEMA sche_oa AUTHORIZATION oaadmin;

-- 设置 oaadmin 登录 db_oa 时的默认模式为 sche_oa
ALTER USER oaadmin SET search_path TO sche_oa;

授权 oaadmin 对 db_oa 和 sche_oa 的完全权限(已通过 OWNER 继承,可省略):
sql
GRANT ALL PRIVILEGES ON DATABASE db_oa TO oaadmin;
GRANT ALL PRIVILEGES ON SCHEMA sche_oa TO oaadmin;

4. 在 sche_oa 模式下创建 tb_userinfo
-- 切换到 oaadmin 用户(验证权限) openGauss@0000
\c db_oa 

-- 创建表(主键为 user_sk)
CREATE TABLE sche_oa.tb_userinfo (user_sk INT4 PRIMARY KEY,c_user_id CHAR(5),c_first_name CHAR(10),c_last_name CHAR(10),c_role CHAR(10));

预期结果:
\dt sche_oa.* 会列出 sche_oa.tb_userinfo;
\d sche_oa.tb_userinfo 会显示各字段的名称、类型,且 user_sk 旁标注 PRIMARY KEY。

-- 退出数据库
\q

5. 导出 db_oa 数据库为纯文本(root下执行)
# 以 opengauss 用户执行,导出到 /data/db_oa.sql   openGauss@0000
mkdir -p /data
chown opengauss:opengauss /data
gs_dump db_oa -U opengauss -f /data/db_oa.sql -F p
# 授权文件权限(可选)
chmod 644 /data/db_oa.sql

四、配置数据库用户及实例(db_wordpress 部分)

1. 登录数据库(管理员身份)
su - opengauss
gsql -d postgres -U opengauss -p 5432 -h localhost  # 密码:openGauss@0000
2. 创建用户 opsadmin 及数据库 db_wordpress
-- 创建用户 opsadmin(密码 opsAdmin@0000)
CREATE USER opsadmin WITH PASSWORD 'opsAdmin@0000';

-- 创建数据库 db_wordpress,所有者为 opsadmin
CREATE DATABASE db_wordpress WITH OWNER opsadmin ENCODING 'UTF8';

-- 切换到 db_wordpress 数据库    openGauss@0000
\c db_wordpress

-- 创建模式 schema_wordpress,所有者为 opsadmin
CREATE SCHEMA schema_wordpress AUTHORIZATION opsadmin;

-- 设置 opsadmin 登录默认模式为 schema_wordpress
ALTER USER opsadmin SET search_path TO schema_wordpress;

-- 退出数据库
\q

五、通过 Navicat 迁移 Server2 的 WordPress 数据到 OpenGauss

1. 在 Desktop 安装 Navicat
  • 下载并安装 Navicat Premium(支持 PostgreSQL/OpenGauss 版本)。
  • 确保 Desktop 能同时访问 Server2(MySQL)和 Server3(OpenGauss)的数据库端口(MySQL 默认 3306,OpenGauss 默认 5432)。
2. 连接源数据库(Server2 的 MySQL)
  • 打开 Navicat,新建 “MySQL” 连接:

    • 主机:Server2 的 IP 地址
    • 端口:3306 (去server2先开端口)
    • 用户名:wpadmin
    • 密码:wpAdmin@0000
    • 数据库:wordpress
  • 测试连接并确认能访问数据。

先手动创建 wpadmin@% ,如果前面配置的用户是这个就不用重新配
-- 创建用户并设置密码(若用户已存在,会提示错误,可忽略或执行 ALTER USER 更新密码)
CREATE USER 'wpadmin'@'%' IDENTIFIED BY 'wpAdmin@0000';
再次执行授权(此时用户已存在,GRANT 仅授权,不创建用户)
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpadmin'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
连接目标数据库(Server3 的 OpenGauss)
  • 新建 “PostgreSQL” 连接(OpenGauss 兼容 PostgreSQL 协议):

    • 主机:Server3 的 IP 地址
    • 端口:5432
    • 用户名:opsadmin
    • 密码:opsAdmin@0000
    • 数据库:db_wordpress
  • 测试连接并确认能访问。

修改密码加密配置(postgresql.conf

登录数据库服务器,切换到 opengauss 用户,编辑配置文件:

su - opengauss
vim /var/lib/opengauss/data/postgresql.conf

找到 password_encryption_type 参数,修改为 0(表示使用 MD5 加密,兼容 Navicat):

password_encryption_type = 0

配置客户端认证规则(pg_hba.conf)

仍在 opengauss 用户下,编辑 pg_hba.conf 以允许远程客户端认证:

vim /var/lib/opengauss/data/pg_hba.conf

在文件末尾添加以下规则(允许所有 IP 以 md5密码方式连接):

host    all             all             0.0.0.0/0              md5

重启数据库服务

使配置生效:

gs_ctl restart -D /var/lib/opengauss/data -Z single_node

重置用户密码(确保密码以 MD5 格式存储)

连接到数据库,重置用户密码(以 opengauss 用户为例):

gsql -d postgres -U opengauss -p 5432 -h localhost

执行 SQL 重置密码:

# 临时将密码历史限制改为 0(允许重复使用所有历史密码):
SET password_history = 0;
-- 第一步:临时修改为一个不同的密码(例如 `Temp@1234`)
ALTER USER opengauss IDENTIFIED BY 'Temp@1234';
-- 第二步:改回目标密码 `openGauss@0000`
ALTER USER opengauss IDENTIFIED BY 'openGauss@0000';
4. 数据迁移(使用 Navicat 数据传输功能)
  • 在 Navicat 中,右键点击源 MySQL 连接的 wordpress 数据库,选择 “数据传输”。
  • 目标选择 OpenGauss 的 db_wordpress 数据库,点击 “下一步”。
  • 勾选所有表(确保结构和数据都迁移),点击 “开始”,等待迁移完成。

六、验证数据迁移及备份

1. 检查数据完整性
  • 在 Navicat 中查询目标库 db_wordpress 的表,确认记录数与源库一致(如 wp_postswp_users 等核心表)。
  • 登录 OpenGauss 终端验证:
su - opengauss
gsql -d db_wordpress -U opsadmin -p 5432 -h localhost  # 密码:opsAdmin@0000
SELECT COUNT(*) FROM schema_wordpress.wp_users;  # 应返回源库中的用户数
\q
2. 备份迁移后的数据库
# 以 opengauss 用户执行,备份到 /data/opengauss.sql
gs_dump -d db_wordpress -U opengauss -f /data/opengauss.sql -F p

关键说明

  1. OpenGauss 与 MySQL 存在语法差异(如字符串函数、数据类型),迁移后需检查应用兼容性(若后续 WordPress 连接 OpenGauss,需安装适配插件)。
  2. 确保 Server3 的防火墙开放 5432 端口,允许 Desktop 访问:
sudo firewall-cmd --add-port=5432/tcp --permanent
sudo firewall-cmd --reload

模块 C 信创系统安全模块

一、系统登录加固(所有服务器)

1. 配置终端超时自动登出(全局生效)

通过修改 /etc/profile 实现所有用户终端 180 秒无操作自动登出:

# 编辑全局环境变量文件
vim /etc/profile

# 在文件末尾添加以下内容
export TMOUT=180  # 超时时间180秒(3分钟)
readonly TMOUT

# 使配置立即生效
source /etc/profile

验证:新终端登录后静置 3 分钟,确认自动登出。

2. 删除不必要用户(game、ftp)
# 检查用户是否存在
id game >/dev/null 2>&1 && echo "game用户存在" || echo "game用户不存在"
id ftp >/dev/null 2>&1 && echo "ftp用户存在" || echo "ftp用户不存在"

# 删除用户及家目录(-r 选项彻底清理)
userdel -r game 2>/dev/null  # 忽略“用户不存在”报错
userdel -r ftp 2>/dev/null

# 验证删除结果(无输出即成功)
id game
id ftp

二、SSH 服务加固(所有服务器)

SSH 配置文件路径:/etc/ssh/sshd_config,按以下步骤加固:

1. 备份并编辑配置文件
# 备份原配置(防止配置错误无法恢复)
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

# 编辑配置文件
vim /etc/ssh/sshd_config
2. 添加 / 修改加固项

按需求配置以下参数(确保无注释符 #,顶格书写):

G  跳到最后一行
# 客户端存活性检测(20秒1次,3次无应答断开)
ClientAliveInterval 20
ClientAliveCountMax 3

# 禁用TCP转发
AllowTcpForwarding no

# 禁用X11转发
X11Forwarding no

# 限制登录尝试次数(6次失败后断开)
MaxAuthTries 6
3. 重启 SSH 服务生效
# 重启服务(根据系统选择命令)
systemctl restart sshd  # 欧拉/CentOS 7+
# 或
service sshd restart    # 欧拉/CentOS 6

# 验证状态
systemctl status sshd  # 显示“active (running)”即为正常

三、渗透测试任务(基于本地 PC 渗透平台)因为我kali是192的所以以下ip都为192的

假设本地渗透平台(如 Kali Linux)与目标服务器网络互通,按以下步骤执行 7 项任务:

任务 1:系统版本扫描(获取系统版本 FLAG)

工具nmap(系统指纹识别)命令

# 扫描目标服务器IP(如192.168.1.100)的系统版本
nmap -O -sV 192.168.12.162
nmap -O -sV 192.168.12.163
nmap -O -sV 192.168.12.164
nmap -O -sV 192.168.12.165

FLAG 提取:从输出的 “Running” 字段获取系统版本,例如:FLAG=Linux 4.18.0-348.2.1.el8_5.x86_64 (EulerOS 2.0 SP8)

任务 2:终端服务端口扫描(获取攻击端口 FLAG)

工具nmap(端口扫描)命令

# 扫描常见终端服务端口(22=SSH、23=Telnet、3389=RDP等)
nmap -p 22,23,3389 192.168.12.162
nmap -p 22,23,3389 192.168.12.163
nmap -p 22,23,3389 192.168.12.164
nmap -p 22,23,3389 192.168.12.165

FLAG 提取:从 “open” 状态的端口中筛选终端服务端口,例如:FLAG=22(SSH 服务端口)

任务 3:查找管理员桌面恶意可执行文件(获取文件名 FLAG)

前提:已通过漏洞(如弱口令)获取服务器权限(如root)。工具find命令或meterpreter命令

# Linux系统:搜索管理员桌面(/root/Desktop)下的可执行文件
find /root/Desktop -type f -executable

# Windows系统(通过meterpreter):
dir C:\Users\Administrator\Desktop*.exe

FLAG 提取:恶意可执行文件全称,例如:FLAG=hack_backdoor.exe

任务 4:查找管理员桌面窃取的文本文档(获取内容 FLAG)

工具cat(Linux)或type(Windows)命令

# Linux:先找到桌面txt文件,再读取内容
find /root/Desktop -name "*.txt"  # 假设找到/root/Desktop/steal.txt
cat /root/Desktop/steal.txt

# Windows:
type C:\Users\Administrator\Desktop\stolen_data.txt

FLAG 提取:文件完整内容,例如:FLAG=用户名:admin,密码:Admin@2025

任务 5:查找管理员文档中窃取的文件(获取内容 FLAG)

工具find(文件定位)+ 内容读取工具命令

# Linux:搜索管理员文档目录(/root/Documents)
find /root/Documents -type f  # 假设找到/root/Documents/confidential.txt
cat /root/Documents/confidential.txt

# Windows:
type C:\Users\Administrator\Documents\secret.txt

FLAG 提取:文件核心内容(如敏感数据),例如:FLAG=数据库密钥:DB_KEY_789

任务 6:查找黑客后门用户(获取用户名 FLAG)

工具cat /etc/passwd(Linux)或net user(Windows)命令

# Linux:查看所有用户,筛选异常用户(如无合理描述、UID异常)
cat /etc/passwd | grep -v "nologin|false"  # 排除系统用户

# Windows(通过cmd):
net user

FLAG 提取:后门用户的用户名,例如:FLAG=backdoor_user

任务 7:查找桌面背景文件(获取文件全称 FLAG)

工具:配置文件搜索或注册表查询命令

# Linux(GNOME桌面):读取背景配置
grep "picture-uri" /root/.config/dconf/user  # 输出类似file:///usr/share/backgrounds/bg.jpg

# Windows:查询注册表
reg query "HKEY_CURRENT_USER\Control Panel\Desktop" /v Wallpaper

FLAG 提取:背景文件完整路径,例如:FLAG=/usr/share/backgrounds/hacker_bg.jpg

四、验证与注意事项

加固验证

  • 终端超时:登录后静置 3 分钟,确认自动登出;
  • SSH 加固:使用ssh -v 服务器IP连接,日志中无TcpForwarding yesX11Forwarding yes

渗透测试前提

  • 需获得合法授权,避免违规操作;
  • 确保渗透平台与目标服务器网络互通(关闭不必要防火墙规则)。

验证所有功能

  1. 网络连通性:在 ws.itai.org 执行 ping node1.server.itai.orgping6 node2.server.itai.org
  2. DNS 解析nslookup blog.itai.orgnslookup 172.16.50.103
  3. Apache 服务:浏览器访问 https://www.itai.org,确认显示 Hello_ITAI
  4. WordPress:浏览器访问 http://blog.itai.org,确认可登录管理后台。
  5. NFS 挂载:在 Server1 的 /mnt/nfs 创建文件,检查 Server3 的 /data/nfs/lun_clutser 是否同步。
  6. Redis 集群redis-cli -c -h 172.16.50.101 -p 18901 cluster info

Apache

1.部署

yum install httpd mod_ssl -y
systemctl enable --now httpd

# 创建网站根目录
mkdir -p /var/www/www.itai.org
echo "hello_ITAI" > /var/www/www.itai.org/index.html
chown -R apache:apache /var/www/www.itai.org
mkdir -p /var/www/error
chown -R apache:apache /var/www/error

2.配置文件

vim /etc/httpd/conf/httpd.conf
# 修改
Listen 80
ServerName www.itai.org:80
# 末尾追加
#确保网站根目录权限正确
<Directory /var/www/www.itai.org>
    Require all granted
</Directory>

vim /etc/httpd/conf.d/redirect.conf
# 默认虚拟主机(优先匹配所有未被明确指定的IP/域名访问) # 必须写在最前面
<VirtualHost *:80>
    ServerName _default_
# 关键:匹配所有未被其他虚拟主机定义的访问
    DocumentRoot /var/www/error
# 错误页面目录
# 拒绝所有IP访问
    <Location />
        Require all denied
        ErrorDocument 403 "禁止使用IP地址访问,请使用域名访问\n"
    </Location>

</VirtualHost>

# 目标网站配置
<VirtualHost *:80>
    ServerName www.itai.org
    DocumentRoot /var/www/www.itai.org
</VirtualHost>

# 主域名跳转
<VirtualHost *:80>
    ServerName itai.org
    ServerAlias *.itai.org ! www.itai.org
    Redirect permanent / http://www.itai.org/
</VirtualHost>

其他

# 1、防火墙
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
# 2、seLinux
setenforce 0
# vim /etc/selinux/config
# 3、域名解析 DNS /etc/hosts
vim /etc/hosts
172.16.50.101 www.itai.org
172.16.50.101 itai.org
172.16.50.101 web.itai.org
# 4、重启
httpd -t
systemctl restart httpd

#测试
curl -I web.itai.org
curl -I itai.org
curl -I www.itai.org
curl 172.16.50.101

rsa加密

vim /etc/httpd/conf.d/rediect.conf
# 增加
<VirtualHost *:443>
    ServerName www.itai.org
    DocumentRoot /var/www/www.itai.org
    SSLEngine on
# 证书和私钥在 CA服务器 位置生成的
    SSLCertificateFile /etc/ssl/server-rsa.pem
    SSLCertificateKeyFile /etc/ssl/server-rsa.key
</VirtualHost>

<VirtualHost *:80>
    ServerName www.itai.org
    Redirect permanent / https://www.itai.org
</VirtualHost>

# 需要把证书添加到系统信任库中
cp /etc/ssl/server-rsa.pem /etc/pki/ca-trust/source/anchors/

update-ca-trust extract
httpd -t
systemctl restart httpd
curl www.itai.org
curl web.itai.org
wget www.itai.org
# wget临时跳过证书验证
wget https://www.itai.org/ --no-check-certificate
# curl临时跳过证书验证
curl https://www.itai.org/ -k

LAMP 环境下 WordPress 部署与配置

一、安装 LAMP 环境

1. 安装 Apache

yum install httpd -y
systemctl enable --now httpd

2. 安装 MySQL

yum install mysql-server -y
systemctl enable --now mysqld
# 初始化数据库并设置 root 密码(密码:Admin@0000)
mysql_secure_installation

3. 安装 PHP 及相关扩展

yum install php php-mysqlnd php-fpm php-gd php-xml -y
systemctl restart httpd

二、配置 MySQL 数据库

mysql -u root -p
# 输入密码 Admin@0000
#创建 WordPress 数据库
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 
#创建数据库用户 wpadmin 并授权
CREATE USER 'wpadmin'@'%' IDENTIFIED BY 'wpAdmin@0000';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpadmin'@'%';
FLUSH PRIVILEGES;
exit;

三、部署 WordPress 应用

1. 下载并解压 WordPress(这里传进去的配置有区别)

cd /var/www/html
wget https://wordpress.org/latest.tar.gz
tar -zxvf latest.tar.gz
mv wordpress/* .
rm -rf wordpress latest.tar.gz
chown -R apache:apache /var/www/html

2. 配置 WordPress 数据库连接

cp wp-config-sample.php wp-config.php
vim wp-config.php
#在文件中修改以下内容
define('DB_NAME', 'wordpress');
define('DB_USER', 'wpadmin');
define('DB_PASSWORD', 'wpAdmin@0000');
#防火墙开启
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload

四、初始化 WordPress 站点

打开浏览器,访问 http://Server2的IP ,按照提示完成初始化:

站点标题: Technology Innovation @ CHINA

管理员名称: admin

管理员密码: 1234567890A

管理员邮箱: mail@itai.org

5五、验证配置

1. 验证 LAMP服务状态

Apache 状态: systemctl status httpd (应显示 active (running) )

MySQL 状态: systemctl status mysqld (应显示 active (running) )

PHP 解析:在 /var/www/html 下创建 info.php ,内容为 ,访问 http://Server2

的IP/info.php ,应显示 PHP 信息页面。

如果解析不了(在这里是必须做的)
#打开 Apache 主配置文件
vim /etc/httpd/conf/httpd.conf
#在文件中搜索 <IfModule dir_module> 模块(通常在文件中部,负责目录索引配置),在该模块内添加 DirectoryIndex
<IfModule dir_module>
    # 手动添加此行,优先加载 index.php
    DirectoryIndex index.php index.html
</IfModule>

#配置将 PHP 请求转发给 PHP-FPM  (在这里是必须做的)
vim /etc/httpd/conf.d/php-fpm.conf

<FilesMatch ".php$">
    SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>


SetHandler  Apache 的核心指令,用于指定处理特定请求的处理器(Handler)。这里指定了一个特殊的处理器,用于代理请求到 PHP-FPM。
proxy:unix:/run/php-fpm/www.sock
proxy::表示使用 Apache 的 mod_proxy 模块进行代理转发。
unix:/run/php-fpm/www.sock:指定 PHP-FPM 监听的 Unix 套接字文件路径(而非 TCP 地址:端口)。
Unix 套接字是进程间通信的一种方式,比 TCP 端口通信更高效(减少网络协议栈开销),常用于同一服务器上的进程通信。
路径 /run/php-fpm/www.sock 是 PHP-FPM 配置中默认的套接字路径(可在 php-fpm.conf 或池配置文件中修改)。
|fcgi://localhost
|:分隔符,连接前面的套接字路径和后面的 FastCGI 协议标识。
fcgi://localhost:指定代理使用 FastCGI 协议 与后端通信(PHP-FPM 基于 FastCGI 协议工作)。
localhost 在这里仅作为占位符(因使用 Unix 套接字,实际不依赖网络地址),不影响功能。
systemctl restart httpd

2. 验证数据库配置

登录 MySQL,检查数据库和用户权限:

mysql -u wpadmin -p
# 输入密码 wpAdmin@0000
SHOW DATABASES; # 应显示 wordpress 数据库
USE wordpress;
SHOW TABLES; # 应显示 WordPress 相关表(初始化后生成)
exit;

3. 验证 WordPress 访问

6访问 blog.itai.org (需先在本地 hosts 文件或 DNS 中解析该域名到 Server2 的 IP),应能正常打开站

点,且管理员可通过 blog.itai.org/wp-admin 登录(使用 admin/1234567890A)。

# linux
vim /etc/hosts
# 追加
172.16.50.102 blog.itai.org`

在Windows上
C:\Windows\System32\drivers\etc
hosts文件末尾追加
172.16.50.102 blog.itai.org

opengauss

一、安装与启动(root)

下载

yum install -y opengauss

初始化库(系统用户 opengauss 已自动建)

su - opengauss
gs_initdb -D /var/lib/opengauss/data --nodename=node3 -U opengauss -E UTF8

启动并设超管密码

gs_ctl start -D /var/lib/opengauss/data
gsql -d postgres -c "ALTER ROLE opengauss PASSWORD 'openGauss@0000';"

二、创建 oaadmin 及 db_oa(opengauss 用户)

建用户、库、模式、默认搜索路径

gsql -d postgres -U opengauss -WopenGauss@0000
CREATE USER oaadmin PASSWORD 'oaAdmin@0000';
CREATE DATABASE db_oa OWNER oaadmin;
\c db_oa oaadmin    # oaAdmin@0000

CREATE SCHEMA sche_oa AUTHORIZATION oaadmin;
ALTER ROLE oaadmin SET search_path=sche_oa,public;

建表 tb_userinfo

CREATE TABLE sche_oa.tb_userinfo (user_sk INT4 PRIMARY KEY,c_user_id CHAR(5),c_first_name CHAR(10),c_last_name CHAR(10),c_role CHAR(10));
\q

预期结果:
\dt sche_oa.* 会列出 sche_oa.tb_userinfo;
\d sche_oa.tb_userinfo 会显示各字段的名称、类型,且 user_sk 旁标注 PRIMARY KEY。

导出 db_oa

mkdir -p /data   # root执行
chown opengauss:opengauss /data
# 以 opengauss 用户执行,导出到 /data/db_oa.sql   openGauss@0000
gs_dump db_oa -U opengauss -f /data/db_oa.sql -F p

三、创建 opsadmin 及 db_wordpress(opengauss 用户)

建用户、库、模式

gsql -d postgres -U opengauss -WopenGauss@0000
CREATE USER opsadmin PASSWORD 'opsAdmin@0000';
CREATE DATABASE db_wordpress OWNER opsadmin;
\c db_wordpress opsadmin   #opsAdmin@0000

CREATE SCHEMA schema_wordpress AUTHORIZATION opsadmin;
ALTER ROLE opsadmin SET search_path=schema_wordpress,public;
\q

四、Desktop 端 Navicat 迁移(图形)

  1. 新建连接

    • 源:MySQL wordpress(Server2)
    • 目标:PostgreSQL db_wordpress(Server3 IP,端口 5432,用户 opsadmin,密码 opsAdmin@0000
  2. 数据传输 工具 → 数据传输

    • 源数据库:wordpress
    • 目标数据库:db_wordpress
    • 目标模式:选择 schema_wordpress
    • 勾选 “创建前删除已存在对象” + “继续错误”
    • 开始,等待 Finished successfully

五、最终备份(opengauss 用户)

整库导出

gs_dump db_wordpress -Fp -f /data/opengauss.sql

验证文件

ls -lh /data/*.sql

应看到:

db_oa.sql
opengauss.sql

六、常用检查(可选)

  • 端口
ss -tnlp | grep 5432
  • 用户列表
gsql -d postgres -c '\du'
  • 模式列表
gsql -d db_oa -c '\dn'
gsql -d db_wordpress -c '\dn'