在 Linux 系统中,软件包是将预编译程序、配置文件、依赖关系以及元数据整合在一起的集合体,便于实现统一化的安装、升级、卸载和系统化管理。
CentOS Stream 9 主要采用 RPM 包格式(以 .rpm 结尾),并通过高级工具 DNF 进行依赖解析和自动化安装。该工具已取代早期的 YUM,成为默认推荐方式。
RPM 包命名遵循特定规范:
name-version-release.architecture.rpm
示例:httpd-2.4.53-1.el9.x86_64.rpm
- name: httpd
- version: 2.4.53
- release: 1.el9
- arch: x86_64
| 安装方式 | 说明 | 常用工具 |
|---|---|---|
| 本地 RPM 包安装 | 手动下载 .rpm 文件并进行本地安装 | |
| 在线仓库安装 | 从官方或第三方软件源自动下载,并由系统自动解决依赖问题 | / |
| 源码编译安装 | 获取源代码后自行编译安装,灵活性高但需手动处理依赖 | |
?? 生产环境中强烈建议使用
方式进行安装,避免因手动干预导致依赖缺失或版本冲突!dnf
功能说明:作为新一代高级包管理工具,DNF 具备自动依赖解析能力,支持模块化软件流(module streams),且整体性能优于旧版 YUM。
? 常用命令一览:
| 命令 | 用途说明 |
|---|---|
|
安装指定软件包 |
|
卸载已安装的软件包 |
|
更新系统中所有可升级的软件包 |
|
根据关键词搜索可用软件包 |
|
查看某软件包的详细信息 |
|
列出当前系统中所有已安装的软件包 |
|
显示所有可安装的软件包列表 |
|
清理本地缓存中的元数据与下载包 |
|
列出当前启用的软件仓库 |
|
查看支持模块化的软件(如 php、nginx 等) |
|
启用某一特定版本的模块流 |
? 实战案例:常规软件包操作(安装、查询、卸载)
# 安装 Web 服务 httpd sudo dnf install -y httpd # 搜索包含 "ftp" 关键词的软件包 dnf search ftp # 查看 httpd 的详细信息 dnf info httpad # 列出已安装的与 httpd 相关的包 dnf list installed | grep httpd # 卸载 httpd 及其相关组件 sudo dnf remove -y httpd
? 实战案例:通过模块机制安装指定版本 PHP
# 查看 PHP 模块的所有可用版本 dnf module list php # 启用 PHP 8.0 版本模块 sudo dnf module enable php:8.0 -y # 安装 PHP 核心组件 sudo dnf install -y php php-cli php-fpm # 验证安装后的 PHP 版本 php -v
? 实战案例:清理缓存并重建元数据缓存
sudo dnf clean all # 删除所有下载的 rpm 包及临时元数据 sudo dnf makecache # 重新下载仓库元数据并生成本地缓存
? 实战案例:查看当前启用的软件源列表
dnf repolist # 输出示例:appstream, baseos, epel, extras 等
功能说明:RPM 是底层包管理工具,直接对 .rpm 文件进行操作,但不具备自动解决依赖的能力。
? 常见命令对照表:
| 命令 | 功能描述 |
|---|---|
|
安装一个本地 RPM 软件包 |
|
卸载已安装的软件包 |
|
检查某个软件包是否已安装 |
|
列出系统中所有已安装的 RPM 包 |
|
显示指定软件包的详细属性信息 |
|
列出该软件包所安装的所有文件路径 |
|
反向查询某个文件归属于哪个 RPM 包 |
? 案例演示:安装本地 RPM 包(需自行处理依赖)
# 下载示例 RPM 包 wget https://example.com/packages/example.rpm # 执行安装(-i 表示安装,-v 显示过程,-h 显示进度条) sudo rpm -ivh example.rpm # 若出现依赖错误提示,则必须手动安装所需依赖包 # ? 注意:不推荐在生产环境使用此方法
? 案例演示:查询 httpd 软件包的安装信息
rpm -qi httpd # 输出内容包括:Name, Version, Release, Install Date, Size, License 等字段 rpm -ql httpd | head -5 # 显示前五个由 httpd 安装的文件路径,例如: # /etc/httpd # /usr/sbin/httpd # /var/www/html
? 案例演示:确定某个文件属于哪个软件包
rpm -qf /usr/bin/ls # 输出结果示例:coreutils-8.32-31.el9.x86_64
在 CentOS Stream 9 中,
实际上是 yum
的符号链接。因此建议用户直接调用 DNF 命令以获得最新功能支持。dnf
可通过以下命令验证其指向关系:
ls -l $(which yum) # 输出示例: # /usr/bin/yum -> /etc/alternatives/yum -> /usr/bin/dnf-3
传统命令
已逐渐被淘汰,官方推荐使用更现代的替代工具 ifconfig
。ip
值得注意的是,CentOS Stream 9 默认不再预装
(其中包含 ifconfig 命令),建议管理员掌握新的网络管理方式以确保运维效率。net-tools
安装 ifconfig 工具(如未预装):
sudo dnf install -y net-tools
尽管 ifconfig 仍可使用,但推荐使用更现代的 ip 命令进行网络配置。
ip
| 功能 | 命令 |
|---|---|
| 查看 IP 地址 |
或
|
| 查看路由信息 |
或
|
| 启用指定网卡 | |
| 禁用指定网卡 | |
| 临时设置 IP 地址 | |
ip a
# 或等价写法
ip addr show
# 示例输出:
# 2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500...
# inet 192.168.1.10/24 brd 192.168.1.255 scope global dynamic ens192
sudo ip link set ens192 down # 禁用网卡
sudo ip link set ens192 up # 启用网卡
sudo ip addr add 192.168.1.100/24 dev ens192
sudo ip route add default via 192.168.1.1
注意:若需永久生效,请编辑网络配置文件:
/etc/NetworkManager/system-connections/
或使用图形化/交互式工具:
nmcli
ping
功能:检测与目标主机之间的网络是否通畅。
语法格式:
ping [选项] 目标IP或域名
常用参数说明:
| 选项 | 说明 |
|---|---|
|
发送指定数量的数据包后自动停止 |
|
设定发送间隔时间(单位:秒,默认为1秒) |
|
设置响应超时等待时间 |
|
静默模式,仅显示最终统计结果 |
ping -c 4 google.com
# 输出示例:4 packets transmitted, 4 received, 0% packet loss
ping -c 1 -W 3 8.8.8.8
if ping -c 1 -W 2 8.8.8.8 > /dev/null 2>&1; then
echo "? 网络正常"
else
echo "? 网络故障"
fi
lsof
lsof:用于列出当前系统中被进程打开的文件和网络连接。
sudo lsof -i :22
# 输出示例:sshd 1234 root 3u IPv4 0x... TCP *:ssh (LISTEN)
sudo lsof -i TCP
netstat
传统工具 netstat 已逐渐被弃用。如需使用,可通过以下命令安装:
sudo dnf install -y net-tools
netstat -tuln
# 参数含义:-t(TCP), -u(UDP), -l(监听中), -n(以数字形式显示地址和端口)
ss
ss(Socket Statistics) 是推荐替代 netstat 的高效工具。
| 命令 | 说明 |
|---|---|
|
查看正在监听的 TCP 和 UDP 端口 |
|
显示关联的进程名和 PID |
|
查看已建立的连接状态 |
sudo ss -tulnp
# 输出示例:
# tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd
# tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4567/httpd
sudo ss -t state established '( dport = :80 or sport = :80 )'
案例目标:
安装 vsftpd(Very Secure FTP Daemon),支持匿名访问与本地用户登录,完成防火墙规则配置,实现安全可靠的文件传输服务。
ip
#!/bin/bash
# 文件名:install_vsftpd.sh
# 功能:自动化安装并配置 vsftpd FTP 服务
echo "???? 开始安装和配置 vsftpd..."
echo "=================================="
# === 1. 安装 vsftpd 软件包 ===
echo "???? 正在安装 vsftpd..."
sudo dnf install -y vsftpd
sudo systemctl enable vsftpd --now
echo "? vsftpd 安装并启动完成"
# === 2. 备份原始配置文件 ===# === 3. 配置 vsftpd === echo "?? 正在配置 vsftpd..." # 备份原始配置文件 echo "???? 备份原始配置文件..." sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak # 生成新的 vsftpd 主配置文件(覆盖方式) cat << 'EOF' | sudo tee /etc/vsftpd/vsftpd.conf > /dev/null # 基础运行参数 listen=YES # 启用独立监听模式 listen_ipv6=NO # 关闭 IPv6 支持(可根据实际需求开启) anonymous_enable=YES # 开启匿名用户访问权限 local_enable=YES # 允许系统本地账户登录 write_enable=YES # 启用文件写入功能(上传、删除等) local_umask=022 # 设置本地用户创建文件的默认掩码 dirmessage_enable=YES # 启用目录消息提示功能 xferlog_enable=YES # 开启传输日志记录 connect_from_port_20=YES # 使用 FTP 数据连接端口 20 xferlog_std_format=YES # 采用标准格式记录日志内容 # 匿名用户权限控制 anon_upload_enable=YES # 允许匿名用户上传文件(需配合目录权限) anon_mkdir_write_enable=YES # 允许匿名用户创建新目录 anon_other_write_enable=YES # 允许匿名执行其他写操作(如重命名、删除) # 安全与访问限制 chroot_local_user=YES # 将本地用户锁定在其主目录内 allow_writeable_chroot=YES # 允许被 chroot 的根目录具备可写权限(适用于 vsftpd 3.0 及以上版本) pam_service_name=vsftpd # 指定 PAM 认证所使用的服务名称 userlist_enable=YES # 启用用户列表机制 tcp_wrappers=YES # 支持 tcp_wrappers 访问控制 # 日志输出设置 xferlog_file=/var/log/vsftpd.log # 指定传输日志路径 dual_log_enable=YES # 同时启用 syslog 记录 EOF echo "? 配置文件已更新" # === 4. 创建匿名上传目录并设置权限 === echo "???? 创建匿名上传目录..." sudo mkdir -p /var/ftp/upload sudo chmod 777 /var/ftp/upload sudo chown ftp:ftp /var/ftp/upload echo "? 匿名上传目录 /var/ftp/upload 已创建"# === 5. 创建测试用户 === echo "???? 创建测试用户 ftpuser..." echo "设置密码为 'password123'" sudo useradd -m ftpuser echo "password123" | sudo passwd --stdin ftpuser 2>/dev/null || \ echo "ftpuser:password123" | sudo chpasswd # === 6. 防火墙配置 === echo "???? 配置防火墙允许 FTP..." sudo firewall-cmd --permanent --add-service=ftp sudo firewall-cmd --reload echo "? 防火墙配置完成" # === 7. 重启服务 === echo "???? 重启 vsftpd 服务..." sudo systemctl restart vsftpd # === 8. 检查服务状态 === echo "???? 验证服务状态..." sudo systemctl status vsftpd --no-pager | grep "active (running)" if [ $? -eq 0 ]; then echo "? vsftpd 服务运行正常" else echo "? vsftpd 服务启动失败,请检查日志:journalctl -u vsftpd" exit 1 fi # === 9. 本地连接测试 === echo "???? 本地测试连接..." if nc -zv localhost 21 2>/dev/null; then echo "? FTP 端口 21 监听正常" else echo "? FTP 端口 21 未监听" fi echo echo "???? vsftpd 安装配置完成!"name-version-release.architecture.rpm 示例:httpd-2.4.53-1.el9.x86_64.rpm - name: httpd - version: 2.4.53 - release: 1.el9 - arch: x86_64
五、综合案例:Samba服务器的安装和配置 ???? 案例概述 目标: 部署 Samba 服务,设置共享路径,实现 Windows 与 Linux 客户端通过 SMB 协议访问资源,支持无需密码及认证登录两种模式。禁用匿名访问(生产环境安全建议):anonymous_enable=NO启用 SSL/TLS 加密通信配置说明:ssl_enable=YES防范暴力破解攻击,限制用户操作权限,提升系统安全性。 ???? 使用方法: chmod +x install_samba.sh sudo ./install_samba.sh ???? 安全建议(适用于生产环境): - 关闭匿名访问功能,避免数据泄露风险 - 启用 SSL/TLS 加密传输,保障通信安全 - 配置访问控制策略,防止未授权访问 - 限制账户权限范围,遵循最小权限原则 #!/bin/bash # 文件名:install_samba.sh # 功能描述:自动化安装并配置 Samba 服务 echo "???? 开始安装和配置 Samba..." echo "==================================" # === 1. 安装 Samba 软件包 === echo "???? 正在安装 Samba..." sudo dnf install -y samba samba-client samba-common sudo systemctl enable smb nmb --now echo "? Samba 已成功安装并启动" # === 2. 备份原始配置文件 === echo "???? 正在备份原有配置..." sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak echo "? 配置文件已备份至 .bak 文件" # === 3. 创建共享目录结构 === echo "???? 建立共享目录..." sudo mkdir -p /srv/samba/public sudo mkdir -p /srv/samba/secure sudo chmod 777 /srv/samba/public sudo chmod 755 /srv/samba/secure echo "? 共享目录创建完毕,权限已设定" # === 4. 添加 Samba 认证用户 === echo "???? 创建用户 alice..." sudo useradd -m alice echo "password123" | sudo passwd --stdin alice 2>/dev/null || \ echo "alice:password123" | sudo chpasswd # 设置该用户的 Samba 密码(自动输入两次确认) (echo "password123"; echo "password123") | sudo smbpasswd -a alice echo "? 用户 alice 的 Samba 账户已建立" # === 5. 写入新的 smb.conf 配置 === echo "?? 正在更新 Samba 主配置文件..." cat << 'EOF' | sudo tee /etc/samba/smb.conf > /dev/null [global] workgroup = WORKGROUP server string = Samba Server %v netbios name = centos-samba security = user map to guest = bad user dns proxy = no log file = /var/log/samba/%m.log max log size = 1000 guest account = nobody # 匿名可访问共享区(允许读写) [Public] path = /srv/samba/public browsable = yes writable = yes guest ok = yes read only = no create mask = 0777 directory mask = 0777 # 受保护共享区域(需身份验证) [Secure] path = /srv/samba/secure browsable = yes writable = yes guest ok = no valid users = alice create mask = 0644 directory mask = 0755 EOF echo "? Samba 配置文件已写入并保存" ???? 访问方式: - 匿名访问:ftp://your-server-ip/ (用户名:anonymous,密码任意) - 本地用户访问:ftp://your-server-ip/ (用户名:ftpuser,密码:password123) - 匿名上传路径:/var/ftp/upload ???? 注意事项:生产环境中请务必强化安全措施(例如关闭匿名登录、启用 SSL/TLS 加密)fail2ban
???? 案例概述
目标:
配置 firewalld 防火墙,达成以下目的:
- 允许 SSH、HTTP、HTTPS 服务通行
- 开放自定义端口(例如 8080)
- 对特定 IP 地址实施访问控制
- 使用富规则(Rich Rules)进行精细化管理
- 所有配置永久生效,重启后仍有效
#!/bin/bash
# 文件名:configure_firewalld.sh
# 功能:配置 CentOS Stream 9 firewalld 防火墙
echo "???? 开始配置 firewalld 防火墙..."
echo "=================================="
# === 1. 检查 firewalld 状态 ===
echo "???? 检查 firewalld 状态..."
if ! sudo systemctl is-active firewalld > /dev/null; then
echo "?? firewalld 未运行,正在启动..."
sudo systemctl start firewalld
sudo systemctl enable firewalld
fi
# === 2. 查看默认区域 ===
DEFAULT_ZONE=$(sudo firewall-cmd --get-default-zone)
echo "???? 默认区域:$DEFAULT_ZONE"
# === 3. 添加常用服务 ===
echo "? 允许 SSH、HTTP、HTTPS..."
sudo firewall-cmd --permanent --add-service=ssh
设置防火墙以允许 Samba 服务通过:
sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload
echo "? 防火墙配置完成"
若系统启用了 SELinux,需调整相关安全上下文和布尔值,确保共享目录可正常访问:
echo "???? 配置 SELinux 上下文..."
sudo setsebool -P samba_export_all_rw on 2>/dev/null && echo "? SELinux bool 设置完成"
sudo semanage fcontext -a -t samba_share_t "/srv/samba(/.*)?" 2>/dev/null && \
sudo restorecon -R /srv/samba && echo "? SELinux 上下文设置完成"
重新启动 Samba 相关服务以应用所有更改:
echo "???? 重启 Samba 服务..."
sudo systemctl restart smb nmb
检查 Samba 主服务是否处于运行状态:
echo "???? 验证服务状态..."
sudo systemctl status smb --no-pager | grep "active (running)"
if [ $? -eq 0 ]; then
echo "? Samba 服务运行正常"
else
echo "? Samba 服务启动失败,请检查日志:journalctl -u smb"
exit 1
fi
使用本地客户端测试共享列表是否可以成功获取:
echo "???? 本地测试 Samba 共享..."
smbclient -L localhost -U%
if [ $? -eq 0 ]; then
echo "? 本地共享列表获取成功"
else
echo "? 本地连接失败"
fi
输出完成提示信息及访问方式说明:
echo
echo "???? Samba 安装配置完成!"
echo "???? 访问方式:"
echo " - Windows: \\\\your-server-ip\\Public (匿名访问)"
echo " - Windows: \\\\your-server-ip\\Secure (用户:alice,密码:password123)"
echo " - Linux: smbclient //your-server-ip/Public -U%"
echo "???? 注意:生产环境请使用强密码,限制访问 IP"
echo "=================================="
???? 使用方法:
chmod +x install_samba.sh
sudo ./install_samba.sh
???? 说明:
smbclient -L localhost -U%
:匿名列出共享
valid users = alice
:仅允许 alice 访问 Secure 共享
SELinux 配置确保共享可访问
# === 4. 开放自定义端口 === echo "? 开放 TCP 8080 端口..." sudo firewall-cmd --permanent --add-port=8080/tcp # === 5. 限制特定 IP 访问(示例:仅允许 192.168.1.0/24 访问 3306)=== echo "? 限制 MySQL 端口 3306 仅允许内网访问..." sudo firewall-cmd --permanent --remove-service=mysql 2>/dev/null sudo firewall-cmd --permanent --add-rich-rule=' rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept ' # === 6. 拒绝特定 IP === echo "? 拒绝 IP 10.0.0.100 访问所有服务..." sudo firewall-cmd --permanent --add-rich-rule=' rule family="ipv4" source address="10.0.0.100" reject ' # === 7. 配置端口转发(示例:8080 → 80)=== echo "? 配置端口转发:外部访问 8080 转发到本地 80..." sudo firewall-cmd --permanent --add-rich-rule=' rule family="ipv4" forward-port port="8080" protocol="tcp" to-port="80" ' # === 8. 重新加载防火墙 === echo "???? 重新加载防火墙配置..." sudo firewall-cmd --reload # === 9. 验证配置 === echo "???? 验证当前配置..." echo "→ 已启用服务:" sudo firewall-cmd --list-services echo "→ 已开放端口:" sudo firewall-cmd --list-ports echo "→ 富规则:" sudo firewall-cmd --list-rich-rules # === 10. 保存运行时配置(冗余,--permanent 已保存)=== echo "???? 保存运行时配置到永久配置(冗余操作)..." sudo firewall-cmd --runtime-to-permanent echo echo "???? firewalld 配置完成!" echo "???? 常用命令:" echo " - 查看状态:sudo firewall-cmd --state" echo " - 查看区域:sudo firewall-cmd --get-active-zones" echo " - 查看所有配置:sudo firewall-cmd --list-all" echo " - 删除规则:sudo firewall-cmd --permanent --remove-rich-rule='rule...'" echo "???? 注意:修改后务必执行 --reload 使配置生效" echo "==================================" ???? 使用方法: chmod +x configure_firewalld.sh sudo ./configure_firewalld.sh ? 常用 firewalld 命令速查: # 查看所有配置 sudo firewall-cmd --list-all # 查看开放端口 sudo firewall-cmd --list-ports # 临时开放端口(重启失效) sudo firewall-cmd --add-port=8081/tcp # 永久开放 sudo firewall-cmd --permanent --add-port=8081/tcp sudo firewall-cmd --reload # 删除规则 sudo firewall-cmd --permanent --remove-port=8081/tcp sudo firewall-cmd --reload ? 学习建议与最佳实践 优先使用 DNF :避免手动安装 RPM 包,依赖问题由系统自动处理更安全。 配置前备份 :在对配置文件进行任何更改之前,应先做好备份工作()。 防火墙最小权限 :遵循最小权限原则,只开放必要的服务和端口,提升系统安全性。.bak
测试连接:可使用 、nc 和 telnet 等工具来验证端口的连通性,确保服务正常对外提供访问。curl
日志监控:通过 查看相关服务的日志信息,及时发现并排查异常行为或配置错误。journalctl -u servicename
SELinux 配置建议:不要直接禁用 SELinux,应学会合理配置安全上下文和调整布尔值,以在保障系统安全的前提下支持服务运行。
setenforce 0
防火墙策略:仅开放服务所必需的端口,其余所有连接请求一律拒绝,遵循最小权限原则提升系统安全性。
服务管理:确保关键服务已设置为开机自启,保障系统重启后服务能自动恢复运行。
systemctl enable servicename
| 功能 | 命令示例 |
|---|---|
| 安装软件包 | |
| 卸载软件包 | |
| 更新系统 | |
| 查看 IP 地址 | |
| 测试网络连通性 | |
| 查看监听中的端口 | |
| 安装 vsftpd 服务 | |
| 安装 Samba 服务 | |
| 开放防火墙指定端口 | |
| 重载防火墙配置 | |
| 查看当前防火墙规则 | |
本内容全面涵盖 CentOS Stream 9 中软件包管理与网络服务配置的核心知识点、语法细节、实用操作案例以及综合项目实践。所有命令均配有详细注释,适用于教学演示、自主学习或生产环境参考使用。
扫码加好友,拉您进群



收藏
