在企业环境中快速安装配置 Rocky Linux 服务器操作系统
时间:2024-07-04 11:46 来源:未知 作者:IT
0x01 Linux 服务器系统
描述: 在 2020 年 12 月所宣布的,CentOS 计划已将重点从 CentOS Linux 转移到 CentOS Stream,这是一个介于Fedora和RHEL之间的发行版,旨在作为RHEL的上游(即测试、预发布版本)。并且 CentOS Stream 8 也将于 2024 年结束迭代更新补丁, 鉴于被 Redhat 收购的 CentOS 即将停止更新维护了,然而在企业中还有大量的 CentOS 的服务器操作系统,不得不考虑其替代产品,此时 原 CentOS 创始人之一的 Gregory Kurtzer 为纪念其创始成员 Rocky McGaugh,创建了 Rocky Linux 与 RHEL 百分之百兼容,目的是用于替代 CentOS Stream 发行版本。
以下是 CentOS 官网针对各种版本的预期生命周期结束 (EOL) 日期的说明,所以迁移已经非常紧急了。
-
CentOS Linux 7 EOL:2024-06-30
-
CentOS Linux 8 EOL:2021-12-31 (已停止维护)
-
CentOS Stream 8 EOL:2024-05-31 (发文前即将停止维护)
-
CentOS Stream 9 EOL:预计 2027 年,取决于 RHEL9 结束的“全面支持阶段”
其实原本作者是想使用市场占用率高,且有代表性的 CentOS 作为给大家Linux运维学习参考的,但是又想到 CentOS 停止维护了,而其创始人之一又推出了百分百兼容 RHEL 的发行版 Rocky Linux,遂作者在后续演示将使用 Rocky Linux 环境作为 Linux 运维学习的基础系统,实际上操作与 CentOS 大同小异,所以也请小伙伴们无需担心;不过若还是想以CentOS8为学习环境的朋友,可参考作者此文《运维实践 | 运维打工人必备 CentOS-Linux/Stream-8 服务器系统基础安装与配置实践》进行安装,当然你也可以选择其他发行版本进行学习.
Rocky Linux
Rocky Linux 是什么?
描述: Rocky Linux 是一个社区企业操作系统,其设计为的是与美国顶级企业 Linux 发行版实现 100% Bug 级兼容,而原因是后者的下游合作伙伴转移了发展方向 (sysin),你可以将其看做为CentOS的一个分支。
现在CentOS已经改变了方向;自2021年6月以来,Rocky Linux已经发布了稳定的、可供生产的版本,有关 Rocky Linux 的最新信息,请可访问其官网 rockylinux.org
代码语言:javascript
复制
"Thinking back to early CentOS days... My cofounder was Rocky McGaugh. He is no longer with us, so as a H/T to him, who never got to see the success that CentOS came to be, I introduce to you...Rocky Linux"
— Gregory Kurtzer, Founder
那 CentOS 是什么?
描述: CentOS(Community ENTerprise Operating System)是一种开源的Linux发行版,它源自于 Red Hat Enterprise Linux(RHEL)的源代码构建的,并且完全免费,这使得它成为企业和服务器环境中非常受欢迎的选择。
CentOS & Rocky Linux 前身今世
在搭建 Rocky Linux 发行版到本地环境中前,我觉得有必要了解一下 CentOS & Rocky Linux 前身今世,下面来简单了解一下:
-
2004 年,CentOS项目的创始人 Gregory Kurtzer 与 Rocky McGaugh 及其他成员,基于开源的 RHEL 创建了 CentOS, 并且将 Linux 引入了社区。
-
2014 年,Redhat 宣布赞助 CentOS,其中负责CentOS的核心团队入职RedHat专门负责其开发,并在RedHat在理事会中占了三席,但是其社区属性得到保留,交易结果是一部分包括将Centos商标和IP转移到RedHat以安全保存。
-
2019 年,CentOS 8 在9月发布,紧随 RHEL 8之后,Centos stream的发布和发布是对下一个次要更新中即将发布内容预览版本,可以说是RHEL的beta频道,同年 巨头 IBM 花费重资收购了 Redhat ,并承诺 RedHat 忠于开源的根基不会改变。
-
2020 年,IBM 在12月8号宣布将惯例支持到2029年CentOS8提前两年结束支持,其唯一升级途径是CentOS Stream即RHEL的Beta发布,并不建议在生产环境中使用,预示着CentOS可能面临死亡。
-
2020 年,CentOS项目的创始人 Gregory Kurtzer 在12月发起了 Rocky Linux 项目计划(8小时内250人啸聚网络),旨在继续提供一个与 RHEL(Red Hat Enterprise Linux)高度兼容的企业级操作系统,Github 项目地址 https://github.com/rocky-linux/rocky
-
2021 年,6月21日,Rocky Linux 的第一个正式版本,Rocky Linux 8.3 (Green Obsidian) 发布,其紧随 RHEL 8.3 的发布。
-
2023 年,6 月,Red Hat 限制其源代码分发的决定给 Rocky Linux 团队带来了一些不便,但由于快速开发和出色的团队,Rocky Linux 用户不会受到干扰,有这方面担心的朋友可以直接替换为 Fedora Linux ,地址:fedoraproject.org。
-
2023 年,11 月 Rocky Linux 9.3 发布,上游来自于 RHEL 9.3 Release,官网社区地址 rockylinux.org
快速部署
Step 1.访问 Rocky 官网下载地址 https://rockylinux.org/download ,作为用户可自行根据安装环境及需求(平台架构、ISOs镜像类型),选择各种安装映像来安装 Rocky Linux发行版。
例如,选择 https://download.rockylinux.org/pub/rocky/9/isos/x86_64/Rocky-9.3-x86_64-minimal.iso 进行下载,温馨提示 Rocky ISO 遵循以下命名约定Rocky-<MAJOR#>.<MINOR#>-<ARCH>-<VARIANT>.iso:
-
Architecture: 平台架构
-
X86_X64:适用于带64位的32位扩展版的平台架构(常见于个人主机、服务器等)
-
ARM64 (aarch64) :适用于嵌入式、微端(树莓派,机械臂,机械中控)
-
ppc64le:专用于IBM Power服务器
-
s390x:专用于 IBM Systemz系列大型机硬件平台,是银行或者大型企业或者科研单位用的(大部分用户接触不到)
-
ISOs:镜像类型
-
Boot:用于网络安装,用于从另一个源(如二进制文件的HTTP存储库)安装操作系统,也可用于进入救援模式。
-
Minimal:用于最小化安装,也可用于进入救援模式,服务器安装首选,作者推荐使用此方式,便于后续从基础进行学习配置(作者选择的ISO)。
-
DVD:包含BaseOS和AppStream存储库的完整安装,允许您在没有其他存储库的情况下完成安装,但是镜像较大,不过也可以选择最小化安装。
weiyigeek.top-Download Rocky Liunx图
Step 2.打开前面安装的 VMware 虚拟机软件,Ctrl+N创建一个新的虚拟机,此处作者只贴关键部分配置,确实这个太简单了就不占用文章的大篇幅进行详细说明,有兴趣的朋友,可以看看【全栈工程师修炼指南】工作号关VMware使用的历史文章。
weiyigeek.top-创建Rocky虚拟机图
然后,进行磁盘相应的选择配置,此处由于存放虚拟机文件的磁盘是SATA的,所以虚拟磁盘类型选择SATA,然后创建新的虚拟磁盘即可。针对于Linux 最小磁盘大小通常为 20 GB,不过通常作者会将其分为 100G,后面安装时选择LVM分区,当某个分区不够用时,可直接增加磁盘容量, 并且在测试学习时可以将立即分配所有磁盘空间【取消勾选】,以加快安装进度,当然若你计算机中有大量容量,且有的是时间则无所谓了。
weiyigeek.top-虚拟磁盘配置图
温馨提示:在开始正确安装之前,应将系统的统一可扩展固件接口(UEFI)或基本输入/输出系统(BIOS)预配置legacy(传统引导模式)为从正确的介质引导,若要更换引导方式为UEFI,请在启动虚拟机前点击【编辑虚拟机设置】-> 【选项】-> 【UEFI】,如下图所示:
weiyigeek.top-更换引导方式图
Step 3.创建好虚拟机后,打开电源后选择【Install Rocky Linux 9.3】(白行选中),然后 LOCALIZATION、SOFTWARE、SYSTEM、USER SETTINGS 等配置,此处使用 LVM 逻辑卷分区,学习时默认即可,若是在线上服务器中通常是取消swap分区(在某些场景中又需要开启swap分区,例如,为了提高 redis 数据库性能),并且将 /、home、var、boot 进行单独分区。
weiyigeek.top-虚拟磁盘分区设置图
选择,最小化安装,即节约空间,又防止安装了不需要的软件,只不过某些使用到的软件需要自行手动安装,然后分别配置网络,以及ROOT用户密码和创建普通用户。
weiyigeek.top-系统及用户设置图
全部配置完成后如下图左1显示,点击【开始安装】,之后等待进度条100%显示完成时,点击【重启系统】即可。
weiyigeek.top-开始安装图
Step 4.重启之后如下图所示,输入账号密码(root 或者 rocky)即可登录 Rocky Linux 系统,之后执行查询Rocky Linux版本以及内核参数。
代码语言:javascript
复制
$ cat /etc/system-release
Rocky Linux release 9.3 (Blue Onyx)
$ cat /etc/redhat-release
Rocky Linux release 9.3 (Blue Onyx)
$ uname -a
Linux localhost.localdomain 5.14.0-362.8.1.el9_3.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Nov 8 17:36:32 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
$ uname -rms
Linux 4.20.13-1.el7.elrepo.x86_64 x86_64
weiyigeek.top-登录 Rocky-Linux 操作系统图
至此,Rokcy Linux 安装部署完毕,请继续进行快速配置系统。
附上,视频 Rocky Linux 9 安装教程:
官方安装文档:https://docs.rockylinux.org/guides/installation/
快速配置
1.格式化(自定义)网卡名称
从 CentOS7 起,由于systemd 和 udev 引入了一种新的网络设备命名方式,即一致网络设备命名(CONSISTENT NETWORK DEVICE NAMING), 它可以根据固件、拓扑、位置信息来设置固定名字,带来的好处是命名自动化,且名称有一定规律性,当在硬件坏了替换时也不会影响设备的命名及正常使用,但是也带来了一些不便,即设备名称比传统名称长一点并阅读性较差,例如,最新的名称是 enp5s0。
Rocky 由于基于 RHEL 进行开发的,所以某些配置基本也适用于 CentOS7 / CentOS8,例如,针对服务器网卡名称进行自定义,当前 Rocky 默认的网卡名称通常为 enp5s0(物理机)或 ens33(虚拟机) ,而非传统的 eth0 ,如果想更改为传统名称 eth0,则需要在GRUB启用引导时添加 net.ifnames=0 参数。
代码语言:javascript
复制
# 1.以 Rocky 为例修改 grub2 启动参数
vi /etc/default/grub
.......
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap net.ifnames=0"
# 温馨提示: CentOS 7 / 8 启动参数配置稍有不同,且 Rocky 不同于 CentOS 无 rhgb quiet
# - CentOS 8
sed -i 's/rhgb/net.ifnames=0 rhgb/' /etc/default/grub
# - CentOS 7
sed -i 's/rhgb/net.ifnames=0 biosdevname=0 rhgb/' /etc/default/grub
# rhgb 参数:表示 redhat graphics boot,即看到图片来代替启动过程中显示的文本信息,这些信息在启动后用 dmesg 也可以看到。
# quiet 参数:表示在启动过程中只有重要信息显示,类似硬件自检的消息不会显示。
# 2.重建 grub.cfg 文件
# legacy(传统引导模式) boot mode:
grub2-mkconfig -o /boot/grub2/grub.cfg
# UEFI boot mode:
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
# 3.网卡配置文件中重命名网卡名称
cd /etc/sysconfig/network-scripts/
mv ifcfg-ens33 ifcfg-eth0 # 关键点
vi ifcfg-eth0
....
NAME=eth0 # 关键点
DEVICE=eth0 # 关键点
# HWADDR 如果存在此字段,请注释HWADDR,
# 4.重启系统
reboot
2.主机名称修改
使用命令或者配置文件的方式,快速设置系统主机名称。
代码语言:javascript
复制
# 临时
hostname rockyserver
# 永久(命令、配置文件)
hostnamectl --static hostname rockyserver
$ vim /etc/hostname
rockyserver
$ tee -a /etc/hosts <<'EOF'
# 新增一条硬解析记录
127.0.0.1 rockyserver
EOF
3.主机网络配置
在 Rocky 9、8 或者 CentOS 8 中我们可以使用两种方式进行配置网络,一种是编辑网卡配置文件,另外一种是nmcli命令行工具,不管你选择哪一个方式都是可以的。
Rocky 9 默认以 NetworkManager 进行管理网络,并且不再将网络配置文件以ifcfg格式存储在 /etc/sysconfig/network-scripts/ 目录中(这是值得注意的、有差异的点),而是以密钥文件格式(INI分隔)将新的网络配置文件存储在 /etc/NetworkManager/system_connections/ 目录中。
方式1.网卡配置文件
代码语言:javascript
复制
$ vim /etc/NetworkManager/system-connections/ens160.nmconnection
[connection]
id=ens160
uuid=723049bd-5194-47b5-b9ee-03e1db4a50b3
type=ethernet
interface-name=ens160
timestamp=1710214772
[ethernet]
[ipv4]
address1=192.168.228.150/24,192.168.228.2
address2=192.168.228.151/32
dns=192.168.10.254;
dns-search=weiyigeek.top;
method=manual
[ipv6]
addr-gen-mode=default
method=auto
[proxy]
# 重新加载网络配置
nmcli c reload
# 查看IP地址&测试网络是否正常
ip addr
ping www.baidu.com
温馨提示:若配置了静态路由后,使用 nmcli c reload 命令无法重载或配置无法生效,则需要重启 NetworkManager 网络服务。
代码语言:javascript
复制
systemctl restart NetworkManager.service
nmcli networking off && nmcli networking on
温馨提示:由于 VMware Workstation中 NAT 模式中默认网关为 192.168.228.2 所以上述配置文件中设置为228.2而非228.1。
weiyigeek.top-VMware虚拟机软件中NAT模式图
方式2.nmcli命令配置网络
代码语言:javascript
复制
# 查看网卡信息 &
nmcli connection
nmcli connection show --active
# 创建一个网卡连接
IFACE=$(nmcli dev|grep ethernet|awk '{print $1}')
nmcli con delete $IFACE
nmcli con add con-name "$IFACE" ifname "$IFACE" type ethernet autoconnect yes
# 给 ens160 添加一个 IP 和子网掩码(NETMASK)& IP 获取方式设置成手动(BOOTPROTO=static/none)
nmcli connection modify ens160 ipv4.addresses 192.168.228.111/24 ipv4.method manual
# 给 ens160 添加两个 IP 地址和掩码
nmcli connection modify ens160 ipv4.addresses "192.168.228.111/24, 192.168.228.112/24"
# 添加一个 ipv4
nmcli connection modify ens160 +ipv4.addresses 192.168.228.112/24
# 删除一个 ipv4
nmcli connection modify ens160 -ipv4.addresses 192.168.228.112/24
# 同时设置DNS与网管
nmcli connection modify ens160 ipv4.dns 223.6.6.6 ipv4.gateway 192.168.228.2
# 域名 dns-search,对应 ifcfg 中的 DOMAIN
nmcli connection modify ens160 ipv4.dns-search weiyigeek.top
# 使用 nmcli 重新回载网络配置
nmcli c reload
# 如果之前没有 ens160 的 connection,则上一步 reload 后就已经自动生效了,否则执行
nmcli c up ens160
weiyigeek.top-使用nmcli命令配置网卡图
方式3.使用 network.service 服务,进行手工配置 ifcfg。
虽然,我们可以执行yum install network-scripts命令来安装传统的 network.service,但是非常不建议使用此种方式进行网络配置。
代码语言:javascript
复制
yum install network-scripts # 安装network-scripts
systemctl restart network.service # 重启网络服务
扩展知识: 快速获取主机网络配置信息,以及常规网卡命令。
代码语言:javascript
复制
IFNAME=$(ip add|grep global | awk '{print $NF}' | head -n 1) # ens160
IFNAME=$(nmcli dev|grep ethernet|awk '{print $1}') # ens160
IP=$(ip add|grep global | awk -F'[/ ]+' '{ print $3 }' | head -n 1) # 192.168.228.140
IPS=$(hostname -I)
# nmcli 网卡信息及配置常用命令
nmcli networking # 查看 nmcli 状态
nmcli networking [on|off] # 启动/禁用 nmcli
nmcli networking [up|down] ens160 # 启用网卡 ens160
nmcli device connectivity ens160 # 激活网卡 ens160
nmcli device show ens160 # 查看网卡 ens160
nmcli radioall off # 关闭无线
nmcli connection show ens160 # 显示具体的网络接口信息
nmcli connection delete ens160 # 删除一个网卡连接
nmcli con add con-name ens160 ifname ens160 type ethernet autoconnect yes # 创建一个网卡连接
4.启用或关闭SELINUX
描述:SELinux是安全增强型Linux(Security-Enhanced Linux)的缩写,是一个为Linux操作系统提供的安全子系统。它提供了访问控制安全策略,通过对进程和文件访问进行标记和限制,可以帮助系统管理员更好地保护系统免受恶意攻击和恶意软件的侵害。
SELinux 通过强制访问控制(MAC)机制来实现更细粒度的权限控制,使得即使在普通的Discretionary Access Control(DAC)权限不足时,也能够对系统资源进行更精细的管控。这种安全机制对于需要高度安全保护的系统非常有用,但同时也需要管理员有一定的技术能力来正确配置和管理SELinux。
代码语言:javascript
复制
# 两种方式查看 SELINUX 状态
$ getenforce
Enforcing
$ sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 33
# 两种方式配置 SELINUX 状态
# 使配置立即生效(临时)
$ setenforce 0
# 使用 sed 进行替换以及注释 SELINUXTYPE=targeted
$ sed -i '/^SELINUX=.*/c SELINUX=disabled' /etc/selinux/config
$ sed -i 's/^SELINUXTYPE=targeted/#&/' /etc/selinux/config
温馨提示:在 RHEL 8版本之前,设置 SELINUX=disabled 也会在引导期间完全禁用SELINUX,如果您需要一个完全禁用SELinux而不是在未加载策略的情况下运行SELinux的系统,则需要将SELinux=0传递到内核命令行。
代码语言:javascript
复制
# 禁用内核加载
grubby --update-kernel ALL --args selinux=0
# 启用内核加载
grubby --update-kernel ALL --remove-args selinux
温馨提示:若安装了图形化界面,也可通过SELinux的图形管理工具进行管理。
代码语言:javascript
复制
# 安装SELinux的图形管理工具,命令是:
yum install policycoreutils-gui -y
# 安装完成后,执行一个命令启动gui管理工具,命令是:
system-config-selinux
温馨提示:若维护者能力足够并且需要保证服务器的安全性时,不建议将Selinux进行关闭,不过在某些场景下必须关闭Selinux否则会存在问题,例如 K8S 集群的安装。
代码语言:javascript
复制
# 查看安全上下文以及自定义samba服务安全性本文
$ semanage fcontext -l
$ cat /etc/selinux/targeted/contexts/files/file_contexts.local
# /srv/samba(/.*)? system_u:object_r:public_content_t:s0 # 指定写入这个档案对象默认账号
$ restorecon -Rv /srv/samba* # 尝试恢复默认值
$ ll -Zd /srv/samba
# drwxr -xr-x root root system_u:object_r:public_content_t /srv/samba/ # 有默认值以后用restorecon命令来修改比较简单!
# 查看安全端口以及自定义ssh服务端口(若启用防护墙后续还需设置防火墙通行则性)
$ semanage port -l
$ semanage port -l | grep "ssh"
# SELinux 端口类型 协议 端口号
# ssh_port_t tcp 22
$ semanage port -a -t ssh_port_t -p tcp 62222
$ semanage port -l | grep "ssh"
# ssh_port_t tcp 62222, 22
官方文档:https://docs.rockylinux.org/guides/
**5.启用或关闭、配置防火墙
描述: 早在 RedHat Enterprise Linux 8 时,针对于网络安全方面的改动是使用 nftables 框架替代 iptables 框架作为默认的网络包过滤工具,而 Rocky 8/9 也是延续了此点。
代码语言:javascript
复制
# 查看防火墙状态
firewall-cmd --state
# running
# 禁用 firewall 防火墙
systemctl stop firewalld.service #停止 firewall
systemctl disable firewalld.service #禁止 firewall 开机启动
# 启用 firewall 防火墙,含自启
systemctl enable firewalld.service --now # 自启用 firewall 开机启动
查看配置防火墙规则
代码语言:javascript
复制
firewall-cmd --list-all
firewall-cmd --list-services # 默认开放:ssh dhcpv6-client
firewall-cmd --zone=public --list-services # 指定区域进行查看服务规则
firewall-cmd --list-ports
firewall-cmd --zone=public --list-ports # 指定区域进行查看端口规则
# 添加三个服务规则,其中 --permanent 表示永久生效
firewall-cmd --add-service=snmp --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload
firewall-cmd --get-services # 查看可用的服务
cat /etc/firewalld/zones/public.xml # 查看配置保存文件
# 添加一个 TCP 端口 (删除将 add 关键字修改为 remove)
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --add-port=80/tcp --permanent # 与上面是等价的,默认 zone 为 pulic
firewall-cmd --reload # 重新加载配置生效
# 防火墙区域 Zone
firewall-cmd --get-default-zone #查看默认的 zone 的命令
# public
firewall-cmd --get-zones # Rocky 9 有 10 个 zone,注意 nm-shared 区域
# block dmz drop external home internal nm-shared public trusted work
firewall-cmd --get-zones # CentOS 8 有 10 个 zone
# block dmz drop external home internal libvirt public trusted work
# 简单示例: 此处了解即可,作者后续会将常用命令在实践运维中用到的命令给总结出来。
# 限定源地址访问
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept' --permanent
firewall-cmd --reload
# 限制主机存活探测
firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop' # 全部禁 ping
firewall-cmd --permanent --add-rich-rule='rule family="ipv4"source address="192.168.1.0/24"protocol value="icmp"accept' #指定 192.168.1.0/24 允许 icmp
6.常规软件安装与更新
描述: EPEL是 Extra Packages for Enterprise Linux 的缩写,是一个为RHEL(Red Hat Enterprise Linux)及其衍生版本(如CentOS)提供额外软件包的项目,该项目旨在提供一些不包含在RHEL官方软件仓库中的高质量、稳定的软件包,以丰富RHEL系统的功能和应用选择。
代码语言:javascript
复制
# 使用 dnf 命令
dnf -y install epel-release
# 使用 rpm 命令
rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-9
# 若为 Rocky Linux 8 可使用 EL8
rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
# 国内 Rocky Linux 镜像源配置(加快拉取速度),以阿里云为例。
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
-i.bak /etc/yum.repos.d/rocky*.repo
# 国内 EPEL 镜像源配置(加快拉取速度),以阿里云为例。
sed -e 's/metalink=/#metalink=/g'
-e 's/#baseurl=/baseurl=/g'
-e 's/https://download.fedoraproject.org/pub/https://mirrors.aliyun.com/g'
-i.bak /etc/yum.repos.d/epel*.repo
# 设置完毕后,清理并重新生成软件包信息缓存
yum clean all
yum autoremove
rm -rf /var/cache/yum
yum makecache
常规软件安装与系统内核更新:
代码语言:javascript
复制
# 查看可安装的组件
yum grouplist
# 开发工具快速安装
dnf groupinstall "Development Tools"
# 常规软件安装
# Rocky Linux 9 最小安装,默认自带 vim wget zip unzip tar 命令,若没有请自行安装。
dnf -y install vim wget zip unzip unrar tar dos2unix jq bash-completion
# ifconfig、netstat、route 等命令集
dnf -y install net-tools
# host、dig 和 nslookup
dnf -y install bind-utils
# 更好的 top 工具,Rocky 9 没有安装
dnf -y install htop
# 文件传输:sz 和 rz,Rocky 9 没有安装
dnf -y install lrzsz
# 瑞士军刀 ncat 可用于网络测试
dnf -y install nc
# lsof 列出了有关进程信息
dnf -y install lsof
# tree 以树形结构显示文件及目录
dnf -y install tree
# pstree 以树形结构显示进程及子进程
dnf -y install psmisc
# ncdu 磁盘使用情况,Rocky 9 没有安装,新增工具,模板尚未加入,下个版本更新
dnf -y install ncdu
# dstat 监控 CPU、磁盘和网络使用率,下个版本加入
dnf -y install dstat
# 查看日志神器 Log file Navigator,Rocky 9 没有安装(按需求选择),不过该软件现在已经包含在 EPEL 中,项目 github.com/tstack/lnav
dnf -y install lnav
# 更新软件及系统内核
dnf update -y
温馨提示:通常来说针对线上环境升级内核是一个有风险的操作,若确需更新调整,请在操作前进行容灾备份,防止更新后影响业务,除此之外在未限制内核更新时,每次执行dnf update命令,若有更新将会自动更新, 下载的内核过多会占用系统空间,若是GPU服务其则需要重新根据内核版本重新编译安装显卡驱动,所以在进行内核更新前,一定要慎重。
至此,有两种方式可排除使用yum、dnf命令时,禁止更新kernel相关的软件包。
代码语言:javascript
复制
# 1.编辑修改 /etc/yum.conf 文件,在 [main] 的最后添加 exclude=kernel*
$ tee -a /etc/yum.conf <<'EOF'
exclude=kernel*
EOF
$ cat /etc/yum.conf
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False
exclude=kernel*
# 2.在 dnf、yum 命令后指定 --exclude 参数进行排除
yum --exclude=kernel* update
# 补充:设置以最新的kernel进行引导系统
$ rpm -qa | grep "kernel-5"
kernel-5.14.0-362.8.1.el9_3.x86_64
kernel-5.14.0-362.18.1.el9_3.0.1.x86_64
$ grub2-set-default 0
$ grub2-editenv list
$ reboot
weiyigeek.top-设置以最新的kernel进行引导系统图
7.配置时间同步
描述:在 CentOS8 的加固中作者已经 ntpd 替换为 chrony 服务,其主要区别是 ntpd 更适合要求精准时间同步的环境,而 chronyd 则更适合需要快速适应时钟变化的环境,并且 Rocky 9 自带 Chrony 服务。
温馨提示: 若想学习实践如何在企业中进行时间服务器的搭建部署请参考此文《Ops实践 | 国产化KylinOS系统中快速部署企业内部高性能DNS服务器、时间同步服务器 (精选)》
代码语言:javascript
复制
# 验证是否安装 chrony 软件包
if [[ $(rpm -qa | grep -c "chrony") -eq 0 ]];then
dnf install -y chrony
fi
# 备份文件
cp /etc/chrony.conf{,.bak}
# chrony 同步配置,其中 192.168.2.254 为内部实践服务器
VAR_NTP_SERVER=( "192.168.10.254" "ntp.aliyun.com" "ntp.tencent.com" )
grep -E -q "^server" /etc/chrony.conf | sed -i 's/^server/# server/g' /etc/chrony.conf
grep -E -q "^pool" /etc/chrony.conf | sed -i 's/^pool/# pool/g' /etc/chrony.conf
for ntp in ${VAR_NTP_SERVER[@]};do
if [[ ${ntp} =~ "ntp" ]];then
echo "pool ${ntp} iburst maxsources 4" >> /etc/chrony.conf;
else
echo "pool ${ntp} iburst maxsources 1" >> /etc/chrony.conf;
fi
done
# 自启用
systemctl enable chronyd.service && systemctl restart chronyd.service
# 硬件时间默认为UTC:
timedatectl set-local-rtc 0
# 启用NTP时间同步:
timedatectl set-ntp yes
# 校准时间服务器:
chronyc tracking
weiyigeek.top-设置Rocky时间同步图
8.安装安装GNOME图形界面
描述:在 Rocky 最小安装后若想要从字符界面,换为图形界面可按照如下命令进行安装图形化界面:
代码语言:javascript
复制
# 安装 GNOME 图形界面 (Rocky 8、9 与 CentOS 7 名称不一样)
yum groupinstall "Server with GUI"
# 安装 图形界面管理工具
yum groupinstall "Graphical Administration Tools"
# 启动图形界面
startx
9.安装SNMP、VM-tools服务
代码语言:javascript
复制
# 安装 SNMP 服务
dnf -y install net-snmp net-snmp-devel net-snmp-libs net-snmp-utils
# 安装 vm-tools 服务 (图像界面安装,可自适应屏幕,字符界面貌似没啥用)
# http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2073803
yum -y install open-vm-tools
vmtoolsd -v && systemctl start vmtoolsd
# VMware Tools daemon, version 12.2.5.43614 (build-21855600)
10.安装命令自动补全
代码语言:javascript
复制
# 此配置命令自动补全忽略大小写仅针对 Bash 有效。
echo 'set completion-ignore-case on' >> ~/.inputrc
# 安装自动补齐 bash-completion 软件 Rocky 9 自带
dnf install bash-completion
# 创建 vi 软链接到vim
ln -s /usr/bin/vim /usr/local/bin/vi
温馨提示:若想Shell终端更加的炫彩可以使用 zsh ,支持更多的模板以及插件功能扩展,通常在个人开发电脑上配置,针对线上业务服务器通常不建议。
ZSH 的功能极其强大,只是配置过于复杂,起初只有极客才在用,后经大佬开发创建了一个名为oh-my-zsh的开源项目(通用性强:Ubuntu Win10 均可用);自此,只需要简单的安装配置,小白程序员们都可以用上高档大气上档次,狂拽炫酷吊炸天的oh my zsh,可参考下述流程。官方网站:https://ohmyz.sh/ 项目地址:https://github.com/ohmyzsh/ohmyzsh
代码语言:javascript
复制
# 安装 zsh 与 git
dnf -y install zsh git
# 切换 shell 为 zsh
chsh -s /bin/zsh
# 安装 oh-my-zsh
# 项目 https://github.com/ohmyzsh/ohmyzsh
# curl sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
sh -c "$(curl -fsSL https://install.ohmyz.sh/)" # 国内
sed -i '/^ZSH_THEME=.*/c ZSH_THEME="random"' ~/.zshrc
echo 'alias ll="ls -lahF --color=auto --time-style=long-iso"' >> ~/.zshrc
# 安装自动补齐
git clone https://github.com/sangrealest/zsh-autosuggestions.git ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions
sed -i '/^plugins=.*/c plugins=(git zsh-autosuggestions)' ~/.zshrc
# 配置生效
source ~/.zshrc
weiyigeek.top-zsh-ohmyzsh安装配置图
11.激活启用cockpit Web管理终端
描述: 不论是在 RHEL8、CentOS8 还是现在的 Rocky 8、9 默认安装后都集成了 cockpit 工具,并且在每次登录到服务器时都会提示其激活命令,Cockpit(飞机驾驶舱)主要用于在 web 浏览器中查看服务器并使用鼠标执行系统任务,其很容易管理存储、配置网络和检查日志等操作,并且还可以从 Cockpit Web 界面创建和管理虚拟机, 使用户可以创建和管理基于 libvirt 的虚拟机。
代码语言:javascript
复制
# 安装 cockpit (Rocky 8、9、CentOS8 已默认集成)
yum -y install cockpit
# 启用 cockpit
systemctl enable --now cockpit.socket
其使用非常简单,使用浏览器访问 https://主机IP:9090 然后输入主机用户密码(默认 root 用户被禁用)进行登录到 Cockpit 管理界面上,由于此处测试我们放开 root 权限,直接在 /etc/cockpit/disallowed-users 中注释掉 root 那一行。
代码语言:javascript
复制
# 取消禁用
vim /etc/cockpit/disallowed-users
# List of users which are not allowed to login to Cockpit
# root
# 重启
systemctl restart cockpit.socket
weiyigeek.top-Cockpit管理后台登录图
登录到后台,可以看到左边菜单栏查看操作功能,以及相应工具集,其中使用最多的莫过于终端工具了,利用可视化的运维极大的方便了、提高我们运维人的工作效率,若感兴趣也赶为你的服务器快装上吧!
weiyigeek.top-cockpit管理界面图图
12.制作镜像模板清理
描述: 在虚拟机环境中我们可将Rocky做一个纯净模板虚拟机,此时为了减少虚拟机大小,我们需要将系统中的相关日志清理掉,已达到节约空间的效果。
代码语言:javascript
复制
# 清理软件源缓存
dnf autoremove
dnf clean all
# 清理临时文件夹
rm -rf /tmp/* # 清空临时文件夹
# 完整的清空历史记录
rm -f /var/log/audit/audit*
echo > /var/log/audit/audit.log
rm -f /var/log/secure*
echo > /var/log/secure
rm -f /var/log/btmp*
echo > /var/log/btmp
rm -f /var/log/wtmp*
echo > /var/log/wtmp
echo > /var/log/lastlog
echo > ~/.bash_history
echo > ~/.zsh_history
history -c
至此,Rocky Linux 9 初始化安装配置完成,若有等保安全加固需要,也可持续关注作者,作者即将发布 Rocky Linux 9
(责任编辑:IT)
0x01 Linux 服务器系统描述: 在 2020 年 12 月所宣布的,CentOS 计划已将重点从 CentOS Linux 转移到 CentOS Stream,这是一个介于Fedora和RHEL之间的发行版,旨在作为RHEL的上游(即测试、预发布版本)。并且 CentOS Stream 8 也将于 2024 年结束迭代更新补丁, 鉴于被 Redhat 收购的 CentOS 即将停止更新维护了,然而在企业中还有大量的 CentOS 的服务器操作系统,不得不考虑其替代产品,此时 原 CentOS 创始人之一的 Gregory Kurtzer 为纪念其创始成员 Rocky McGaugh,创建了 Rocky Linux 与 RHEL 百分之百兼容,目的是用于替代 CentOS Stream 发行版本。 以下是 CentOS 官网针对各种版本的预期生命周期结束 (EOL) 日期的说明,所以迁移已经非常紧急了。
其实原本作者是想使用市场占用率高,且有代表性的 CentOS 作为给大家Linux运维学习参考的,但是又想到 CentOS 停止维护了,而其创始人之一又推出了百分百兼容 RHEL 的发行版 Rocky Linux,遂作者在后续演示将使用 Rocky Linux 环境作为 Linux 运维学习的基础系统,实际上操作与 CentOS 大同小异,所以也请小伙伴们无需担心;不过若还是想以CentOS8为学习环境的朋友,可参考作者此文《运维实践 | 运维打工人必备 CentOS-Linux/Stream-8 服务器系统基础安装与配置实践》进行安装,当然你也可以选择其他发行版本进行学习. Rocky LinuxRocky Linux 是什么? 描述: Rocky Linux 是一个社区企业操作系统,其设计为的是与美国顶级企业 Linux 发行版实现 100% Bug 级兼容,而原因是后者的下游合作伙伴转移了发展方向 (sysin),你可以将其看做为CentOS的一个分支。 现在CentOS已经改变了方向;自2021年6月以来,Rocky Linux已经发布了稳定的、可供生产的版本,有关 Rocky Linux 的最新信息,请可访问其官网 rockylinux.org
代码语言:javascript
复制
"Thinking back to early CentOS days... My cofounder was Rocky McGaugh. He is no longer with us, so as a H/T to him, who never got to see the success that CentOS came to be, I introduce to you...Rocky Linux" — Gregory Kurtzer, Founder 那 CentOS 是什么? 描述: CentOS(Community ENTerprise Operating System)是一种开源的Linux发行版,它源自于 Red Hat Enterprise Linux(RHEL)的源代码构建的,并且完全免费,这使得它成为企业和服务器环境中非常受欢迎的选择。 CentOS & Rocky Linux 前身今世 在搭建 Rocky Linux 发行版到本地环境中前,我觉得有必要了解一下 CentOS & Rocky Linux 前身今世,下面来简单了解一下:
快速部署Step 1.访问 Rocky 官网下载地址 https://rockylinux.org/download ,作为用户可自行根据安装环境及需求(平台架构、ISOs镜像类型),选择各种安装映像来安装 Rocky Linux发行版。 例如,选择 https://download.rockylinux.org/pub/rocky/9/isos/x86_64/Rocky-9.3-x86_64-minimal.iso 进行下载,温馨提示 Rocky ISO 遵循以下命名约定Rocky-<MAJOR#>.<MINOR#>-<ARCH>-<VARIANT>.iso:
weiyigeek.top-Download Rocky Liunx图 Step 2.打开前面安装的 VMware 虚拟机软件,Ctrl+N创建一个新的虚拟机,此处作者只贴关键部分配置,确实这个太简单了就不占用文章的大篇幅进行详细说明,有兴趣的朋友,可以看看【全栈工程师修炼指南】工作号关VMware使用的历史文章。 weiyigeek.top-创建Rocky虚拟机图 然后,进行磁盘相应的选择配置,此处由于存放虚拟机文件的磁盘是SATA的,所以虚拟磁盘类型选择SATA,然后创建新的虚拟磁盘即可。针对于Linux 最小磁盘大小通常为 20 GB,不过通常作者会将其分为 100G,后面安装时选择LVM分区,当某个分区不够用时,可直接增加磁盘容量, 并且在测试学习时可以将立即分配所有磁盘空间【取消勾选】,以加快安装进度,当然若你计算机中有大量容量,且有的是时间则无所谓了。 weiyigeek.top-虚拟磁盘配置图 温馨提示:在开始正确安装之前,应将系统的统一可扩展固件接口(UEFI)或基本输入/输出系统(BIOS)预配置legacy(传统引导模式)为从正确的介质引导,若要更换引导方式为UEFI,请在启动虚拟机前点击【编辑虚拟机设置】-> 【选项】-> 【UEFI】,如下图所示: weiyigeek.top-更换引导方式图 Step 3.创建好虚拟机后,打开电源后选择【Install Rocky Linux 9.3】(白行选中),然后 LOCALIZATION、SOFTWARE、SYSTEM、USER SETTINGS 等配置,此处使用 LVM 逻辑卷分区,学习时默认即可,若是在线上服务器中通常是取消swap分区(在某些场景中又需要开启swap分区,例如,为了提高 redis 数据库性能),并且将 /、home、var、boot 进行单独分区。 weiyigeek.top-虚拟磁盘分区设置图 选择,最小化安装,即节约空间,又防止安装了不需要的软件,只不过某些使用到的软件需要自行手动安装,然后分别配置网络,以及ROOT用户密码和创建普通用户。 weiyigeek.top-系统及用户设置图 全部配置完成后如下图左1显示,点击【开始安装】,之后等待进度条100%显示完成时,点击【重启系统】即可。 weiyigeek.top-开始安装图 Step 4.重启之后如下图所示,输入账号密码(root 或者 rocky)即可登录 Rocky Linux 系统,之后执行查询Rocky Linux版本以及内核参数。
代码语言:javascript
复制
$ cat /etc/system-release Rocky Linux release 9.3 (Blue Onyx) $ cat /etc/redhat-release Rocky Linux release 9.3 (Blue Onyx) $ uname -a Linux localhost.localdomain 5.14.0-362.8.1.el9_3.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Nov 8 17:36:32 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux $ uname -rms Linux 4.20.13-1.el7.elrepo.x86_64 x86_64 weiyigeek.top-登录 Rocky-Linux 操作系统图 至此,Rokcy Linux 安装部署完毕,请继续进行快速配置系统。 附上,视频 Rocky Linux 9 安装教程: 官方安装文档:https://docs.rockylinux.org/guides/installation/ 快速配置1.格式化(自定义)网卡名称 从 CentOS7 起,由于systemd 和 udev 引入了一种新的网络设备命名方式,即一致网络设备命名(CONSISTENT NETWORK DEVICE NAMING), 它可以根据固件、拓扑、位置信息来设置固定名字,带来的好处是命名自动化,且名称有一定规律性,当在硬件坏了替换时也不会影响设备的命名及正常使用,但是也带来了一些不便,即设备名称比传统名称长一点并阅读性较差,例如,最新的名称是 enp5s0。 Rocky 由于基于 RHEL 进行开发的,所以某些配置基本也适用于 CentOS7 / CentOS8,例如,针对服务器网卡名称进行自定义,当前 Rocky 默认的网卡名称通常为 enp5s0(物理机)或 ens33(虚拟机) ,而非传统的 eth0 ,如果想更改为传统名称 eth0,则需要在GRUB启用引导时添加 net.ifnames=0 参数。
代码语言:javascript
复制
# 1.以 Rocky 为例修改 grub2 启动参数 vi /etc/default/grub ....... GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap net.ifnames=0" # 温馨提示: CentOS 7 / 8 启动参数配置稍有不同,且 Rocky 不同于 CentOS 无 rhgb quiet # - CentOS 8 sed -i 's/rhgb/net.ifnames=0 rhgb/' /etc/default/grub # - CentOS 7 sed -i 's/rhgb/net.ifnames=0 biosdevname=0 rhgb/' /etc/default/grub # rhgb 参数:表示 redhat graphics boot,即看到图片来代替启动过程中显示的文本信息,这些信息在启动后用 dmesg 也可以看到。 # quiet 参数:表示在启动过程中只有重要信息显示,类似硬件自检的消息不会显示。 # 2.重建 grub.cfg 文件 # legacy(传统引导模式) boot mode: grub2-mkconfig -o /boot/grub2/grub.cfg # UEFI boot mode: grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg # 3.网卡配置文件中重命名网卡名称 cd /etc/sysconfig/network-scripts/ mv ifcfg-ens33 ifcfg-eth0 # 关键点 vi ifcfg-eth0 .... NAME=eth0 # 关键点 DEVICE=eth0 # 关键点 # HWADDR 如果存在此字段,请注释HWADDR, # 4.重启系统 reboot 2.主机名称修改 使用命令或者配置文件的方式,快速设置系统主机名称。
代码语言:javascript
复制
# 临时 hostname rockyserver # 永久(命令、配置文件) hostnamectl --static hostname rockyserver $ vim /etc/hostname rockyserver $ tee -a /etc/hosts <<'EOF' # 新增一条硬解析记录 127.0.0.1 rockyserver EOF 3.主机网络配置 在 Rocky 9、8 或者 CentOS 8 中我们可以使用两种方式进行配置网络,一种是编辑网卡配置文件,另外一种是nmcli命令行工具,不管你选择哪一个方式都是可以的。 Rocky 9 默认以 NetworkManager 进行管理网络,并且不再将网络配置文件以ifcfg格式存储在 /etc/sysconfig/network-scripts/ 目录中(这是值得注意的、有差异的点),而是以密钥文件格式(INI分隔)将新的网络配置文件存储在 /etc/NetworkManager/system_connections/ 目录中。 方式1.网卡配置文件
代码语言:javascript
复制
$ vim /etc/NetworkManager/system-connections/ens160.nmconnection [connection] id=ens160 uuid=723049bd-5194-47b5-b9ee-03e1db4a50b3 type=ethernet interface-name=ens160 timestamp=1710214772 [ethernet] [ipv4] address1=192.168.228.150/24,192.168.228.2 address2=192.168.228.151/32 dns=192.168.10.254; dns-search=weiyigeek.top; method=manual [ipv6] addr-gen-mode=default method=auto [proxy] # 重新加载网络配置 nmcli c reload # 查看IP地址&测试网络是否正常 ip addr ping www.baidu.com 温馨提示:若配置了静态路由后,使用 nmcli c reload 命令无法重载或配置无法生效,则需要重启 NetworkManager 网络服务。
代码语言:javascript
复制
systemctl restart NetworkManager.service nmcli networking off && nmcli networking on 温馨提示:由于 VMware Workstation中 NAT 模式中默认网关为 192.168.228.2 所以上述配置文件中设置为228.2而非228.1。 weiyigeek.top-VMware虚拟机软件中NAT模式图 方式2.nmcli命令配置网络
代码语言:javascript
复制
# 查看网卡信息 & nmcli connection nmcli connection show --active # 创建一个网卡连接 IFACE=$(nmcli dev|grep ethernet|awk '{print $1}') nmcli con delete $IFACE nmcli con add con-name "$IFACE" ifname "$IFACE" type ethernet autoconnect yes # 给 ens160 添加一个 IP 和子网掩码(NETMASK)& IP 获取方式设置成手动(BOOTPROTO=static/none) nmcli connection modify ens160 ipv4.addresses 192.168.228.111/24 ipv4.method manual # 给 ens160 添加两个 IP 地址和掩码 nmcli connection modify ens160 ipv4.addresses "192.168.228.111/24, 192.168.228.112/24" # 添加一个 ipv4 nmcli connection modify ens160 +ipv4.addresses 192.168.228.112/24 # 删除一个 ipv4 nmcli connection modify ens160 -ipv4.addresses 192.168.228.112/24 # 同时设置DNS与网管 nmcli connection modify ens160 ipv4.dns 223.6.6.6 ipv4.gateway 192.168.228.2 # 域名 dns-search,对应 ifcfg 中的 DOMAIN nmcli connection modify ens160 ipv4.dns-search weiyigeek.top # 使用 nmcli 重新回载网络配置 nmcli c reload # 如果之前没有 ens160 的 connection,则上一步 reload 后就已经自动生效了,否则执行 nmcli c up ens160 weiyigeek.top-使用nmcli命令配置网卡图 方式3.使用 network.service 服务,进行手工配置 ifcfg。 虽然,我们可以执行yum install network-scripts命令来安装传统的 network.service,但是非常不建议使用此种方式进行网络配置。
代码语言:javascript
复制
yum install network-scripts # 安装network-scripts systemctl restart network.service # 重启网络服务 扩展知识: 快速获取主机网络配置信息,以及常规网卡命令。
代码语言:javascript
复制
IFNAME=$(ip add|grep global | awk '{print $NF}' | head -n 1) # ens160 IFNAME=$(nmcli dev|grep ethernet|awk '{print $1}') # ens160 IP=$(ip add|grep global | awk -F'[/ ]+' '{ print $3 }' | head -n 1) # 192.168.228.140 IPS=$(hostname -I) # nmcli 网卡信息及配置常用命令 nmcli networking # 查看 nmcli 状态 nmcli networking [on|off] # 启动/禁用 nmcli nmcli networking [up|down] ens160 # 启用网卡 ens160 nmcli device connectivity ens160 # 激活网卡 ens160 nmcli device show ens160 # 查看网卡 ens160 nmcli radioall off # 关闭无线 nmcli connection show ens160 # 显示具体的网络接口信息 nmcli connection delete ens160 # 删除一个网卡连接 nmcli con add con-name ens160 ifname ens160 type ethernet autoconnect yes # 创建一个网卡连接 4.启用或关闭SELINUX 描述:SELinux是安全增强型Linux(Security-Enhanced Linux)的缩写,是一个为Linux操作系统提供的安全子系统。它提供了访问控制安全策略,通过对进程和文件访问进行标记和限制,可以帮助系统管理员更好地保护系统免受恶意攻击和恶意软件的侵害。 SELinux 通过强制访问控制(MAC)机制来实现更细粒度的权限控制,使得即使在普通的Discretionary Access Control(DAC)权限不足时,也能够对系统资源进行更精细的管控。这种安全机制对于需要高度安全保护的系统非常有用,但同时也需要管理员有一定的技术能力来正确配置和管理SELinux。
代码语言:javascript
复制
# 两种方式查看 SELINUX 状态 $ getenforce Enforcing $ sestatus SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: enforcing Mode from config file: enforcing Policy MLS status: enabled Policy deny_unknown status: allowed Memory protection checking: actual (secure) Max kernel policy version: 33 # 两种方式配置 SELINUX 状态 # 使配置立即生效(临时) $ setenforce 0 # 使用 sed 进行替换以及注释 SELINUXTYPE=targeted $ sed -i '/^SELINUX=.*/c SELINUX=disabled' /etc/selinux/config $ sed -i 's/^SELINUXTYPE=targeted/#&/' /etc/selinux/config 温馨提示:在 RHEL 8版本之前,设置 SELINUX=disabled 也会在引导期间完全禁用SELINUX,如果您需要一个完全禁用SELinux而不是在未加载策略的情况下运行SELinux的系统,则需要将SELinux=0传递到内核命令行。
代码语言:javascript
复制
# 禁用内核加载 grubby --update-kernel ALL --args selinux=0 # 启用内核加载 grubby --update-kernel ALL --remove-args selinux 温馨提示:若安装了图形化界面,也可通过SELinux的图形管理工具进行管理。
代码语言:javascript
复制
# 安装SELinux的图形管理工具,命令是: yum install policycoreutils-gui -y # 安装完成后,执行一个命令启动gui管理工具,命令是: system-config-selinux 温馨提示:若维护者能力足够并且需要保证服务器的安全性时,不建议将Selinux进行关闭,不过在某些场景下必须关闭Selinux否则会存在问题,例如 K8S 集群的安装。
代码语言:javascript
复制
# 查看安全上下文以及自定义samba服务安全性本文 $ semanage fcontext -l $ cat /etc/selinux/targeted/contexts/files/file_contexts.local # /srv/samba(/.*)? system_u:object_r:public_content_t:s0 # 指定写入这个档案对象默认账号 $ restorecon -Rv /srv/samba* # 尝试恢复默认值 $ ll -Zd /srv/samba # drwxr -xr-x root root system_u:object_r:public_content_t /srv/samba/ # 有默认值以后用restorecon命令来修改比较简单! # 查看安全端口以及自定义ssh服务端口(若启用防护墙后续还需设置防火墙通行则性) $ semanage port -l $ semanage port -l | grep "ssh" # SELinux 端口类型 协议 端口号 # ssh_port_t tcp 22 $ semanage port -a -t ssh_port_t -p tcp 62222 $ semanage port -l | grep "ssh" # ssh_port_t tcp 62222, 22 官方文档:https://docs.rockylinux.org/guides/ **5.启用或关闭、配置防火墙 描述: 早在 RedHat Enterprise Linux 8 时,针对于网络安全方面的改动是使用 nftables 框架替代 iptables 框架作为默认的网络包过滤工具,而 Rocky 8/9 也是延续了此点。
代码语言:javascript
复制
# 查看防火墙状态 firewall-cmd --state # running # 禁用 firewall 防火墙 systemctl stop firewalld.service #停止 firewall systemctl disable firewalld.service #禁止 firewall 开机启动 # 启用 firewall 防火墙,含自启 systemctl enable firewalld.service --now # 自启用 firewall 开机启动 查看配置防火墙规则
代码语言:javascript
复制
firewall-cmd --list-all firewall-cmd --list-services # 默认开放:ssh dhcpv6-client firewall-cmd --zone=public --list-services # 指定区域进行查看服务规则 firewall-cmd --list-ports firewall-cmd --zone=public --list-ports # 指定区域进行查看端口规则 # 添加三个服务规则,其中 --permanent 表示永久生效 firewall-cmd --add-service=snmp --permanent firewall-cmd --add-service=http --permanent firewall-cmd --add-service=https --permanent firewall-cmd --reload firewall-cmd --get-services # 查看可用的服务 cat /etc/firewalld/zones/public.xml # 查看配置保存文件 # 添加一个 TCP 端口 (删除将 add 关键字修改为 remove) firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --add-port=80/tcp --permanent # 与上面是等价的,默认 zone 为 pulic firewall-cmd --reload # 重新加载配置生效 # 防火墙区域 Zone firewall-cmd --get-default-zone #查看默认的 zone 的命令 # public firewall-cmd --get-zones # Rocky 9 有 10 个 zone,注意 nm-shared 区域 # block dmz drop external home internal nm-shared public trusted work firewall-cmd --get-zones # CentOS 8 有 10 个 zone # block dmz drop external home internal libvirt public trusted work # 简单示例: 此处了解即可,作者后续会将常用命令在实践运维中用到的命令给总结出来。 # 限定源地址访问 firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept' --permanent firewall-cmd --reload # 限制主机存活探测 firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop' # 全部禁 ping firewall-cmd --permanent --add-rich-rule='rule family="ipv4"source address="192.168.1.0/24"protocol value="icmp"accept' #指定 192.168.1.0/24 允许 icmp 6.常规软件安装与更新 描述: EPEL是 Extra Packages for Enterprise Linux 的缩写,是一个为RHEL(Red Hat Enterprise Linux)及其衍生版本(如CentOS)提供额外软件包的项目,该项目旨在提供一些不包含在RHEL官方软件仓库中的高质量、稳定的软件包,以丰富RHEL系统的功能和应用选择。
代码语言:javascript
复制
# 使用 dnf 命令 dnf -y install epel-release # 使用 rpm 命令 rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-9 # 若为 Rocky Linux 8 可使用 EL8 rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 # 国内 Rocky Linux 镜像源配置(加快拉取速度),以阿里云为例。 sed -e 's|^mirrorlist=|#mirrorlist=|g' \ -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \ -i.bak /etc/yum.repos.d/rocky*.repo # 国内 EPEL 镜像源配置(加快拉取速度),以阿里云为例。 sed -e 's/metalink=/#metalink=/g' -e 's/#baseurl=/baseurl=/g' -e 's/https://download.fedoraproject.org/pub/https://mirrors.aliyun.com/g' -i.bak /etc/yum.repos.d/epel*.repo # 设置完毕后,清理并重新生成软件包信息缓存 yum clean all yum autoremove rm -rf /var/cache/yum yum makecache 常规软件安装与系统内核更新:
代码语言:javascript
复制
# 查看可安装的组件 yum grouplist # 开发工具快速安装 dnf groupinstall "Development Tools" # 常规软件安装 # Rocky Linux 9 最小安装,默认自带 vim wget zip unzip tar 命令,若没有请自行安装。 dnf -y install vim wget zip unzip unrar tar dos2unix jq bash-completion # ifconfig、netstat、route 等命令集 dnf -y install net-tools # host、dig 和 nslookup dnf -y install bind-utils # 更好的 top 工具,Rocky 9 没有安装 dnf -y install htop # 文件传输:sz 和 rz,Rocky 9 没有安装 dnf -y install lrzsz # 瑞士军刀 ncat 可用于网络测试 dnf -y install nc # lsof 列出了有关进程信息 dnf -y install lsof # tree 以树形结构显示文件及目录 dnf -y install tree # pstree 以树形结构显示进程及子进程 dnf -y install psmisc # ncdu 磁盘使用情况,Rocky 9 没有安装,新增工具,模板尚未加入,下个版本更新 dnf -y install ncdu # dstat 监控 CPU、磁盘和网络使用率,下个版本加入 dnf -y install dstat # 查看日志神器 Log file Navigator,Rocky 9 没有安装(按需求选择),不过该软件现在已经包含在 EPEL 中,项目 github.com/tstack/lnav dnf -y install lnav # 更新软件及系统内核 dnf update -y 温馨提示:通常来说针对线上环境升级内核是一个有风险的操作,若确需更新调整,请在操作前进行容灾备份,防止更新后影响业务,除此之外在未限制内核更新时,每次执行dnf update命令,若有更新将会自动更新, 下载的内核过多会占用系统空间,若是GPU服务其则需要重新根据内核版本重新编译安装显卡驱动,所以在进行内核更新前,一定要慎重。 至此,有两种方式可排除使用yum、dnf命令时,禁止更新kernel相关的软件包。
代码语言:javascript
复制
# 1.编辑修改 /etc/yum.conf 文件,在 [main] 的最后添加 exclude=kernel* $ tee -a /etc/yum.conf <<'EOF' exclude=kernel* EOF $ cat /etc/yum.conf [main] gpgcheck=1 installonly_limit=3 clean_requirements_on_remove=True best=True skip_if_unavailable=False exclude=kernel* # 2.在 dnf、yum 命令后指定 --exclude 参数进行排除 yum --exclude=kernel* update # 补充:设置以最新的kernel进行引导系统 $ rpm -qa | grep "kernel-5" kernel-5.14.0-362.8.1.el9_3.x86_64 kernel-5.14.0-362.18.1.el9_3.0.1.x86_64 $ grub2-set-default 0 $ grub2-editenv list $ reboot weiyigeek.top-设置以最新的kernel进行引导系统图 7.配置时间同步 描述:在 CentOS8 的加固中作者已经 ntpd 替换为 chrony 服务,其主要区别是 ntpd 更适合要求精准时间同步的环境,而 chronyd 则更适合需要快速适应时钟变化的环境,并且 Rocky 9 自带 Chrony 服务。 温馨提示: 若想学习实践如何在企业中进行时间服务器的搭建部署请参考此文《Ops实践 | 国产化KylinOS系统中快速部署企业内部高性能DNS服务器、时间同步服务器 (精选)》
代码语言:javascript
复制
# 验证是否安装 chrony 软件包 if [[ $(rpm -qa | grep -c "chrony") -eq 0 ]];then dnf install -y chrony fi # 备份文件 cp /etc/chrony.conf{,.bak} # chrony 同步配置,其中 192.168.2.254 为内部实践服务器 VAR_NTP_SERVER=( "192.168.10.254" "ntp.aliyun.com" "ntp.tencent.com" ) grep -E -q "^server" /etc/chrony.conf | sed -i 's/^server/# server/g' /etc/chrony.conf grep -E -q "^pool" /etc/chrony.conf | sed -i 's/^pool/# pool/g' /etc/chrony.conf for ntp in ${VAR_NTP_SERVER[@]};do if [[ ${ntp} =~ "ntp" ]];then echo "pool ${ntp} iburst maxsources 4" >> /etc/chrony.conf; else echo "pool ${ntp} iburst maxsources 1" >> /etc/chrony.conf; fi done # 自启用 systemctl enable chronyd.service && systemctl restart chronyd.service # 硬件时间默认为UTC: timedatectl set-local-rtc 0 # 启用NTP时间同步: timedatectl set-ntp yes # 校准时间服务器: chronyc tracking weiyigeek.top-设置Rocky时间同步图 8.安装安装GNOME图形界面 描述:在 Rocky 最小安装后若想要从字符界面,换为图形界面可按照如下命令进行安装图形化界面:
代码语言:javascript
复制
# 安装 GNOME 图形界面 (Rocky 8、9 与 CentOS 7 名称不一样) yum groupinstall "Server with GUI" # 安装 图形界面管理工具 yum groupinstall "Graphical Administration Tools" # 启动图形界面 startx 9.安装SNMP、VM-tools服务
代码语言:javascript
复制
# 安装 SNMP 服务 dnf -y install net-snmp net-snmp-devel net-snmp-libs net-snmp-utils # 安装 vm-tools 服务 (图像界面安装,可自适应屏幕,字符界面貌似没啥用) # http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2073803 yum -y install open-vm-tools vmtoolsd -v && systemctl start vmtoolsd # VMware Tools daemon, version 12.2.5.43614 (build-21855600) 10.安装命令自动补全
代码语言:javascript
复制
# 此配置命令自动补全忽略大小写仅针对 Bash 有效。 echo 'set completion-ignore-case on' >> ~/.inputrc # 安装自动补齐 bash-completion 软件 Rocky 9 自带 dnf install bash-completion # 创建 vi 软链接到vim ln -s /usr/bin/vim /usr/local/bin/vi 温馨提示:若想Shell终端更加的炫彩可以使用 zsh ,支持更多的模板以及插件功能扩展,通常在个人开发电脑上配置,针对线上业务服务器通常不建议。 ZSH 的功能极其强大,只是配置过于复杂,起初只有极客才在用,后经大佬开发创建了一个名为oh-my-zsh的开源项目(通用性强:Ubuntu Win10 均可用);自此,只需要简单的安装配置,小白程序员们都可以用上高档大气上档次,狂拽炫酷吊炸天的oh my zsh,可参考下述流程。官方网站:https://ohmyz.sh/ 项目地址:https://github.com/ohmyzsh/ohmyzsh
代码语言:javascript
复制
# 安装 zsh 与 git dnf -y install zsh git # 切换 shell 为 zsh chsh -s /bin/zsh # 安装 oh-my-zsh # 项目 https://github.com/ohmyzsh/ohmyzsh # curl sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" sh -c "$(curl -fsSL https://install.ohmyz.sh/)" # 国内 sed -i '/^ZSH_THEME=.*/c ZSH_THEME="random"' ~/.zshrc echo 'alias ll="ls -lahF --color=auto --time-style=long-iso"' >> ~/.zshrc # 安装自动补齐 git clone https://github.com/sangrealest/zsh-autosuggestions.git ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions sed -i '/^plugins=.*/c plugins=(git zsh-autosuggestions)' ~/.zshrc # 配置生效 source ~/.zshrc weiyigeek.top-zsh-ohmyzsh安装配置图 11.激活启用cockpit Web管理终端 描述: 不论是在 RHEL8、CentOS8 还是现在的 Rocky 8、9 默认安装后都集成了 cockpit 工具,并且在每次登录到服务器时都会提示其激活命令,Cockpit(飞机驾驶舱)主要用于在 web 浏览器中查看服务器并使用鼠标执行系统任务,其很容易管理存储、配置网络和检查日志等操作,并且还可以从 Cockpit Web 界面创建和管理虚拟机, 使用户可以创建和管理基于 libvirt 的虚拟机。
代码语言:javascript
复制
# 安装 cockpit (Rocky 8、9、CentOS8 已默认集成) yum -y install cockpit # 启用 cockpit systemctl enable --now cockpit.socket 其使用非常简单,使用浏览器访问 https://主机IP:9090 然后输入主机用户密码(默认 root 用户被禁用)进行登录到 Cockpit 管理界面上,由于此处测试我们放开 root 权限,直接在 /etc/cockpit/disallowed-users 中注释掉 root 那一行。
代码语言:javascript
复制
# 取消禁用 vim /etc/cockpit/disallowed-users # List of users which are not allowed to login to Cockpit # root # 重启 systemctl restart cockpit.socket weiyigeek.top-Cockpit管理后台登录图 登录到后台,可以看到左边菜单栏查看操作功能,以及相应工具集,其中使用最多的莫过于终端工具了,利用可视化的运维极大的方便了、提高我们运维人的工作效率,若感兴趣也赶为你的服务器快装上吧! weiyigeek.top-cockpit管理界面图图 12.制作镜像模板清理 描述: 在虚拟机环境中我们可将Rocky做一个纯净模板虚拟机,此时为了减少虚拟机大小,我们需要将系统中的相关日志清理掉,已达到节约空间的效果。
代码语言:javascript
复制
# 清理软件源缓存 dnf autoremove dnf clean all # 清理临时文件夹 rm -rf /tmp/* # 清空临时文件夹 # 完整的清空历史记录 rm -f /var/log/audit/audit* echo > /var/log/audit/audit.log rm -f /var/log/secure* echo > /var/log/secure rm -f /var/log/btmp* echo > /var/log/btmp rm -f /var/log/wtmp* echo > /var/log/wtmp echo > /var/log/lastlog echo > ~/.bash_history echo > ~/.zsh_history history -c 至此,Rocky Linux 9 初始化安装配置完成,若有等保安全加固需要,也可持续关注作者,作者即将发布 Rocky Linux 9 (责任编辑:IT) |