1.关闭并禁用 firewalld 防火墙服务
bash
[root@localhost ~]# systemctl disable --now firewalld.service #立即停止并禁用 firewalld 服务;
Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service".
Removed "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service".
[root@localhost ~]# systemctl mask firewalld.service 屏蔽 firewalld 服务,防止它被意外启动;
Created symlink /etc/systemd/system/firewalld.service → /dev/null.
[root@localhost ~]# reboot #重启刷新防火墙状态;
[root@localhost ~]# systemctl status firewalld.service #查看防火墙状态;
○ firewalld.service
Loaded: masked (Reason: Unit firewalld.service is masked.)
Active: inactive (dead) #处于关闭状态;
2.完全禁用 SELinux
bash
[root@localhost ~]# vim /etc/sysconfig/selinux # 进入SELinux 的配置文件(/etc/selinux/config),并且编辑SELINUX=disabled;

作用:
优:
-
某些应用程序运行更顺畅,不会因权限问题报错
-
简化系统管理,减少权限相关的故障排查
劣:
-
失去强制访问控制(MAC)保护
-
进程以传统 Linux 权限(DAC)运行,安全性降低
-
如果服务被入侵,攻击者更容易横向移动
bash
[root@localhost ~]# reboot #重启刷新SELinux状态;
[root@localhost ~]# getenforce #查看SELinux状态;
Disabled #处于完全禁用状态;
3.传统网卡命名
bash
[root@localhost ~]# vim /boot/loader/entries/85f3e750b4e741bba69c3730fd8505e6-5 .14.0-570.12.1.el9_6.x86_64.conf #编辑系统启动的加载信息文件,并且在最长的一行后写入net.ifnames=0启用传统网卡命名;

bash
[root@localhost ~]# reboot #重启刷新网卡命名;

4.本地仓库搭建
bash
[root@localhost ~]# cd /etc/yum.repos.d/ #进入 yum 仓库配置目录;
[root@localhost yum.repos.d]# ll #查看目录内容(total 0 表示为空)
total 0
[root@localhost yum.repos.d]# vim rhel.repo #创建并编辑本地仓库配置文件,内容如下:
[AppStream] # 仓库ID标识,方括号内为唯一标识符
name = AppStream # 仓库描述名称,可自定义显示名称
baseurl = file:///rhel/AppStream # 软件包来源地址,file://表示本地文件系统,路径为/rhel/AppStream
gpgcheck = 0 # 禁用GPG签名验证,0表示不检查软件包签名(生产环境建议设为1)
[BaseOS] # 仓库ID标识,基础操作系统仓库
name = BaseOS # 仓库描述名称
baseurl = file:///rhel/BaseOS # 本地基础系统软件包路径,指向挂载的ISO镜像中BaseOS目录
gpgcheck = 0 # 禁用GPG签名验证,简化离线环境配置(有安全风险)
[root@localhost ~]# mkdir /rhel #创建挂载点目录;
[root@localhost ~]# mount /dev/cdrom /rhel/ #挂载光盘到 /rhel 目录;
mount: /rhel: WARNING: source write-protected, mounted read-only.
[root@localhost ~]# vim /etc/rc.d/rc.local #编辑开机启动脚本,并且写入mount /dev/cdrom /rhel/启用开机自动挂载;
5.自定义网卡IP、主机重命名和选择是否需要网关路由
bash
[root@localhost ~]# vim /bin/vmset.sh #创建虚拟机网络配置脚本在系统二进制命令目录,存放可执行程序;
#!/bin/bash
[ "$#" -lt "3" ] && { # 检查参数数量是否小于3个,$#表示传入的参数个数
echo "error!!" # 参数不足时输出错误信息
exit # 退出脚本执行
}
CONNECTION=`nmcli connection show | awk "/$1/"'{print $1}'|grep $1` # nmcli connection show显示所有网络连接,awk过滤匹配第一个参数的连接名,grep确认是否存在
[ "$?" -ne "0" ] && { # 检查上条命令退出状态,$?表示上个命令的返回值,-ne表示不等于0(即未找到连接)
echo "$1" is in used !! # 提示该连接名已被使用
nmcli connection delete $CONNECTION # nmcli connection delete删除已存在的网络连接
}
[ "$4" = "noroute" ] && { # 判断第四个参数是否为"noroute",用于区分是否配置默认网关
cat >> /etc/NetworkManager/system-connections/$1.nmconnection <<EOF # 将后续内容追加到NetworkManager连接配置文件中,$1为网卡名
[connection] # 连接配置段开始
id=$1 # 连接标识符,使用网卡名
type=ethernet # 连接类型为以太网
interface-name=$1 # 网卡接口名称
[ipv4] # IPv4配置段开始
method=manual # 手动配置IP地址(非DHCP自动获取)
address1=$2/24 # 设置IP地址和子网掩码,$2为传入的IP地址,/24表示255.255.255.0
EOF # here-document结束标记
}||{ # 如果第四个参数不是"noroute",则执行以下配置(包含网关)
cat >> /etc/NetworkManager/system-connections/$1.nmconnection <<EOF # 同样追加到NetworkManager配置文件
[connection] # 连接配置段开始
id=$1 # 连接标识符
type=ethernet # 以太网类型
interface-name=$1 # 网卡接口名称
[ipv4] # IPv4配置段开始
method=manual # 手动配置IP地址
address1=$2/24,172.25.254.2 # IP地址/掩码,默认网关地址(172.25.254.2为网关)
dns=8.8.8.8; # DNS服务器地址,使用Google公共DNS
EOF # here-document结束标记
}
chmod 600 /etc/NetworkManager/system-connections/$1.nmconnection # chmod 600设置配置文件权限为所有者可读写,其他用户无权限(NetworkManager要求)
nmcli connection reload # nmcli connection reload重新加载NetworkManager连接配置
nmcli connection up $1 # nmcli connection up激活指定网络连接,$1为网卡名
hostnamectl hostname $3 # hostnamectl hostname设置系统主机名,$3为传入的主机名参数
cat > /etc/hosts<< EOF # cat > 覆盖写入/etc/hosts文件,配置本地主机名解析
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 # IPv4本地回环地址解析
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 # IPv6本地回环地址解析
$2 $3 # 将设置的IP地址与主机名绑定,实现本地解析
EOF # here-document结束标记
ip address show $1 # ip address show显示指定网卡的详细网络信息,$1为网卡名(原简写ip a s)
hostname # hostname显示当前系统主机名
[root@localhost ~]# chmod +x /bin/vmset.sh #给脚本可执行权限;
#为什么放在 /bin/?
[root@base ~]# echo $PATH ## 查看环境变量
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin #/bin 在 PATH 中,所以可以直接执行脚本
[root@localhost ~]# vmset.sh eth0 172.25.254.123 base #执行脚本,设置网卡IP和重命名主机名,且不需要写完整路径 /bin/vmset.sh;
[root@base ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:ca:3a:22 brd ff:ff:ff:ff:ff:ff
altname enp3s0
altname ens160
inet 172.25.254.123/24 brd 172.25.254.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feca:3a22/64 scope link noprefixroute
valid_lft forever preferred_lft forever
6.SSH免密登陆
bash
#第一步:生成 SSH 密钥对
[root@base ~]# ssh-keygen -f /root/.ssh/id_rsa -P "" #-f指定私钥文件路径和名称,-p设置空密码(免密登录,无需输入密钥密码);
Generating public/private rsa key pair. #开始生成 RSA 公私钥对
Your identification has been saved in /root/.ssh/id_rsa #私钥保存位置(需保密)
Your public key has been saved in /root/.ssh/id_rsa.pub #公钥保存位置(可以分发)
The key fingerprint is:
SHA256:hC6qy+bYJhYJz9JYLxdmgknyq9E3/x2wEqR5K+YcCFw root@base #密钥指纹,用于唯一标识
The key's randomart image is: #随机艺术图像,便于人工比对密钥
+---[RSA 3072]----+
| |
|.. . |
|o+ E o . |
|= = += . |
|oO.*+.+ S |
|++Bo=o o o |
| ++++oo . . |
|==.+ o.. . . |
|B*. o .. . |
+----[SHA256]-----+
#第二步:复制公钥到目标主机
[root@base ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@localhost #-i指定要复制的公钥文件,root@localhost目标用户和主机(这里是自己);
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host 'localhost (::1)' can't be established. #首次连接,主机未知;
ED25519 key fingerprint is SHA256:ZrTviMg6qCDTfGiQgI+ehFmb24skRG2V3hvcWdn9KFI. #显示主机指纹;
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes #输入 yes,确认信任该主机;
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@localhost's password: #输入 root 密码 验证身份以安装公钥;
Number of key(s) added: 1 #公钥成功添加到授权列表;
Now try logging into the machine, with: "ssh 'root@localhost'"
and check to make sure that only the key(s) you wanted were added.
#实现原理:
┌─────────────────┐ ┌─────────────────┐
│ 客户端(base) │ │ 服务器(localhost)│
│ │ │ │
│ ┌───────────┐ │ SSH连接 │ ┌───────────┐ │
│ │ id_rsa │ │◄──────────────────►│ │ authorized│ │
│ │ (私钥) │ │ 公钥验证身份 │ │ _keys │ │
│ └───────────┘ │ │ │ (存放公钥) │ │
│ ┌───────────┐ │ │ └───────────┘ │
│ │ id_rsa.pub│ │ ─────────────────► │ │
│ │ (公钥) │ │ ssh-copy-id复制 │ │
│ └───────────┘ │ │ │
└─────────────────┘ └─────────────────┘
[root@base ~]# vim /etc/ssh/ssh_config #编辑 SSH 客户端全局配置文件,分别两行写入HOST*和StrictHostKeyChecking no;
[root@base ~]# cp -rp /root/.ssh/ /etc/skel/ #将root 用户的SSH配置递归且保留原文件的属性复制到用户家目录模板;
#/etc/skel/ 的作用:
┌─────────────────────────────────────────┐
│ /etc/skel/ 目录 │
│ (Skeleton Directory,骨架目录) │
│ │
│ 新用户创建时,系统会自动将这里的内容 │
│ 复制到用户的家目录中 │
└─────────────────────────────────────────┘
│
▼
┌─────────────────┐
│ useradd 新用户 │
│ 家目录:/home/xxx │
└─────────────────┘
│
▼
自动复制 /etc/skel/ 内容到 /home/xxx/

