TGZ022-信创适配及安全管理
信创系统环境部署模块
(一)信创系统安装
一、前期准备与启动
- 准备 openEuler 官方 ISO 镜像文件,并通过 U 盘刻录工具(如 Rufus)制作启动 U 盘。
- 将 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 分区),不对其进行修改,然后按照以下要求创建其他分区:
- 点击 “+” 号,挂载点选择 “/”,容量输入 “25 GiB”,文件系统选择 “ext4”,分区类型勾选 “LVM”,点击 “Add Mount Point”。
- 再次点击 “+” 号,挂载点选择 “swap”,容量输入 “4 GiB”,文件系统选择 “swap”,分区类型勾选 “LVM”,点击 “Add Mount Point”。
- 最后点击 “+” 号,挂载点选择 “/opt”,容量输入 “5 GiB”,文件系统选择 “xfs”,分区类型勾选 “LVM”,点击 “Add Mount Point”。
-
确认分区配置与需求一致后,点击 “Begin Installation” 开始安装。
四、安装完成与验证
-
等待系统安装进度条完成(期间无需操作),安装成功后点击 “Reboot System” 重启服务器。
-
服务器重启后,使用 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 列即为实际接口名(例如 ens33、eth0 等),注意区分大小写。
# 创建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抽风
- 查看网络连接的 UUID:
nmcli connection show
找到 ens224 对应的连接 UUID(类似 bf7733f1-xxx)。
- 修改连接为手动 IP 模式(仅保留
10.0.0.102/24) :
nmcli connection modify <UUID> ipv4.method manual ipv4.addresses 10.0.0.102/24
(将 <UUID> 替换为实际查询到的连接 UUID)
- 重启网络连接使配置生效:
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 使用bind和bind-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 ... 命令即可快速完成集群创建。
数据读写与分片测试
- 连接任意节点写入数据:
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
- 查看数据分布:
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
- 从对应分片节点读取数据:
# 假设 key1 分片在 node2,连接 node2 读取
redis-cli -h 172.16.50.101 -p 18902 get key1
预期结果:
不同 key 分布在不同主节点。
能从对应分片节点正确读取数据。
主从切换测试
- 找到某主节点的从节点(如 node1 的从节点是 node4)。
- 停止主节点 node1:
redis-cli -h 172.16.50.101 -p 18901 shutdown
3. 检查集群状态:
redis-cli -h 172.16.50.102 -p 18901 cluster nodes
- 尝试写入原主节点的数据:
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 。
持久化验证
- 写入测试数据:
redis-cli -h 172.16.50.101 -p 18901 set persistKey persistValue
- 重启对应节点(如 node1):
redis-cli -h 172.16.50.101 -p 18901 shutdown
redis-server /opt/redis-cluster/node1.conf
- 读取数据:
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
确认安装与环境变量配置
- 验证安装
rpm -qa | grep opengauss
应显示
opengauss-xxx.x86_64
包,说明安装成功。
- 配置环境变量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
- 编辑环境变量配置文件:
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 指向的目录存在且完整(包含 bin、lib、share 等子目录):
4. **使配置生效**:
ls $GAUSSHOME # 应显示 bin、lib、share 等文件夹
- 若目录不存在或文件缺失,说明安装不完整,需重新安装 OpenGauss。



验证命令是否可用。
### 二、初始化数据库并配置系统用户
#### 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_posts、wp_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
关键说明
- OpenGauss 与 MySQL 存在语法差异(如字符串函数、数据类型),迁移后需检查应用兼容性(若后续 WordPress 连接 OpenGauss,需安装适配插件)。
- 确保 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 yes或X11Forwarding yes。
渗透测试前提:
- 需获得合法授权,避免违规操作;
- 确保渗透平台与目标服务器网络互通(关闭不必要防火墙规则)。
验证所有功能
- 网络连通性:在
ws.itai.org执行ping node1.server.itai.org、ping6 node2.server.itai.org。 - DNS 解析:
nslookup blog.itai.org、nslookup 172.16.50.103。 - Apache 服务:浏览器访问
https://www.itai.org,确认显示Hello_ITAI。 - WordPress:浏览器访问
http://blog.itai.org,确认可登录管理后台。 - NFS 挂载:在 Server1 的
/mnt/nfs创建文件,检查 Server3 的/data/nfs/lun_clutser是否同步。 - 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 迁移(图形)
-
新建连接
- 源:MySQL
wordpress(Server2) - 目标:PostgreSQL
db_wordpress(Server3 IP,端口 5432,用户opsadmin,密码opsAdmin@0000)
- 源:MySQL
-
数据传输 工具 → 数据传输
- 源数据库:
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'