SSH服务
SSH连接和免密登录配置
检测服务状态:systemctl status sshd.service
开启服务:systemctl start sshd.service

检查到sshd服务开启并且确认22端口打开:

连接远程服务器:

配置SSH免密访问:

之后就能免密登录了:

远程文件同步
SCP命令:远程文件拷贝命令
复制本机的data文件夹,以root用户的身份传送到192.168.222.135的/root目录中


IP地址后面必须跟上绝对路径
常用参数:
-p:保留原文件的修改时间,访问时间和访问权限
-r:递归复制整个目录
rsync命令:
安装:yum install rsync -y
rsync = remote sync,增量同步工具,核心优势:
- 增量传输:只传文件差异部分,不完整重传,速度远快 scp;
- 支持本地同步、远程 SSH 同步、守护进程 (rsync://) 同步;
- 保留权限、属主、时间、软链接、设备文件等完整属性;
- 压缩传输、删除冗余文件、过滤文件、断点续传;
- 备份场景标配,服务器定时备份首选。
常用参数:
-a归档:递归、保留权限 / 属主 / 时间 / 软链接-v打印同步详情-z传输过程压缩(外网必备,提速)-P=--progress --partial:显示进度 + 断点续传
关键细节:源目录末尾 / 的巨大区别
示例 1:源不带 /:rsync -av /root/data /root/backup
把整个 data 文件夹本身复制到 backup,结果: /root/backup/data/xxx

示例 2:源带 / :rsync -av /root/data/ /root/backup
只复制 data 内部所有文件,不创建 data 文件夹,结果: /root/backup/xxx

系统日志
journalctl命令
journalctl 是 systemd 日志管理工具,用于查看和管理系统日志。以下是最常用的几个命令示例:
1. 查看最近的日志
显示最近 20 条系统日志:
journalctl -n 20
-n 参数指定显示的行数,默认显示最近 10 条;省略数字则显示全部可用的最近日志。
2. 按服务筛选日志
查看指定服务(如 sshd)的日志:
journalctl -u sshd
-u(--unit)参数可精确筛选某个 systemd 服务单元的日志,替换 sshd 为 nginx、docker 等其他服务名即可查看对应服务的日志。
3. 实时追踪日志
实时滚动输出最新日志(类似 tail -f):
journalctl -f
该命令会持续监听并输出新产生的日志,按 Ctrl+C 退出;非常适合调试时观察服务实时输出。
4. 按时间范围过滤
查看今天的日志:
journalctl --since today
查看指定时间段的日志:
journalctl --since "2025-01-01 10:00:00" --until "2025-01-01 12:00:00"
5. 按优先级筛选
只查看错误级别及以上的日志:
journalctl -p err
日志优先级从低到高依次为:debug、info、notice、warning、err、crit、alert、emerg。使用 -p 参数可以快速定位严重问题。
systemd-journald 日志持久化
默认情况下,systemd-journald 将日志存储在内存中的 /run/log/journal 目录,系统重启后日志会丢失。要实现日志持久化,需要创建磁盘存储目录并设置正确的权限,然后重启服务。
1. 创建持久化存储目录
执行以下命令创建日志持久化目录:
mkdir /var/log/journal
2. 设置目录权限
将目录的所有者设为 root,所属组设为 systemd-journal,并设置 setgid 位(2755),确保新创建的文件继承正确的组权限:
chown root.systemd-journal /var/log/journal/
chmod 2755 /var/log/journal
3. 重启服务使配置生效
完成目录创建和权限设置后,重启 systemd-journald 服务:
systemctl restart systemd-journald
重启后,日志文件将持久化保存在 /var/log/journal 目录下,即使系统重启也不会丢失。
4. 验证持久化是否生效
重启系统后,执行以下命令查看日志文件是否存在:
ls -l /var/log/journal/
如果目录下有以机器 ID 命名的子目录,且内部包含 system.journal 等文件,说明持久化配置成功。此时使用 journalctl 查看的日志将包含重启前的历史记录。

rsyslog服务
rsyslog 是 Linux 系统上最主流的日志收集与转发服务,负责接收系统内各类程序、内核、服务的日志消息,并根据规则写入本地文件或转发到远程日志服务器。相比传统的 syslogd,rsyslog 支持更丰富的过滤条件、模块化扩展、TCP/TLS 传输以及高吞吐量处理。
1. 检查 rsyslog 服务状态
确认 rsyslog 是否正常运行:
systemctl status rsyslog
如果未运行,启动并设置开机自启:
systemctl start rsyslog
systemctl enable rsyslog
2. 主配置文件
rsyslog 的主配置文件位于 /etc/rsyslog.conf,配置规则通常遵循以下格式:
facility.priority action
常见配置示例:
*.info;mail.none;authpriv.none;cron.none /var/log/messages—— 将所有 info 及以上级别的日志(排除 mail、authpriv、cron)写入/var/log/messagesauthpriv.* /var/log/secure—— 认证安全日志写入/var/log/securemail.* -/var/log/maillog—— 邮件日志写入/var/log/maillog(减号表示异步写入)cron.* /var/log/cron—— 计划任务日志写入/var/log/cron
3. 远程日志收集(客户端配置)
将本机日志实时发送到远程日志服务器(如 192.168.222.137):
vim /etc/rsyslog.conf
在文件末尾添加:
*.* @@192.168.222.137:514
其中 @ 表示 UDP 协议(@@ 表示 TCP 协议),514 为默认端口。配置完成后重启 rsyslog。

4. 远程日志收集(服务端配置)
在日志服务器上启用 UDP 监听,编辑 /etc/rsyslog.conf:
vim /etc/rsyslog.conf
在文件中取消注释以下内容:
$ModLoad imudp
$UDPServerRun 514
如果需要 TCP 支持,同时添加:
$ModLoad imtcp
$InputTCPServerRun 514

保存后重启 rsyslog,并确保防火墙放行 514 端口:
firewall-cmd --add-port=514/udp --permanent
firewall-cmd --reload
5. rsyslog 与 systemd-journald 的关系
在现代 Linux 系统中,systemd-journald 负责从内核和 systemd 单元收集结构化日志,而 rsyslog 则作为传统日志处理引擎,将 journald 的日志按规则写入文本文件或转发到远程。两者可以共存:journald 提供快速检索和结构化查询,rsyslog 提供灵活的持久化存储和转发能力。默认情况下,rsyslog 会从 journald 读取日志并写入 /var/log/ 下的传统日志文件。
6. 查看 rsyslog 写入的常见日志文件
/var/log/messages—— 通用系统日志/var/log/secure—— 认证与安全日志/var/log/maillog—— 邮件服务器日志/var/log/cron—— 计划任务日志/var/log/boot.log—— 系统启动日志
使用 tail -f /var/log/messages 可以实时查看最新的系统日志输出。


系统延时任务
at命令
at 命令用于在指定时间执行一次性任务,适合需要临时在某个时间点执行某个命令的场景。使用 at 前需确保 at 服务已安装并启动。
1. 安装 at
yum install at -y
2. 启动 at 服务
systemctl start atd
systemctl enable atd
3. 基本用法
在指定时间执行命令:at 10:30
输入命令后按 Ctrl+D 提交任务。支持多种时间格式:
at now + 5 minutes—— 5 分钟后执行at 14:00—— 今天下午 2 点执行at 23:59 2026-7-21—— 指定日期时间执行at teatime—— 下午 4 点执行(teatime 是内置别名)

4. 管理 at 任务
查看待执行的任务列表:atq
删除指定任务(任务编号通过 atq 获取):atrm
查看某个任务的详细内容:at -c
5. 访问控制
通过 /etc/at.allow 和 /etc/at.deny 文件控制哪些用户可以使用 at 命令。默认只有 root 可以使用,若 at.allow 存在则只有该文件中的用户可用;若 at.allow 不存在但 at.deny 存在,则不在 at.deny 中的用户均可使用。
cron管理定期任务
cron 是 Linux 系统中最常用的定期任务调度服务,用于按分钟、小时、天、月、周等周期重复执行命令或脚本。cron 由 crond 守护进程管理,配置文件采用标准化的时间格式。
1. 检查 crond 服务状态
systemctl status crond
如果未运行,启动并设置开机自启:
systemctl start crond
systemctl enable crond
2. crontab 时间格式
cron 任务的时间格式由 5 个字段组成,依次表示:
分 时 日 月 周 命令
各字段取值范围:
- 分:0–59
- 时:0–23
- 日:1–31
- 月:1–12
- 周:0–7(0 和 7 都表示周日)
常用特殊符号:
*表示任意值,如* * * * *表示每分钟执行,表示多个值,如0,30 * * * *表示每小时的第 0 和 30 分钟执行-表示范围,如9-17 * * * *表示 9 点到 17 点之间每小时执行/表示步长,如*/5 * * * *表示每 5 分钟执行
3. 常用示例
每天凌晨 2 点执行备份脚本:
0 2 * * * /root/backup.sh
每 10 分钟检查一次服务状态:
*/10 * * * * systemctl status sshd >> /var/log/ssh-check.log
每周一凌晨 3 点清理日志:
0 3 * * 1 find /var/log -name "*.log" -mtime +7 -exec rm {} \;
每月 1 号上午 9 点生成报表:
0 9 1 * * /usr/local/bin/generate_report.sh
4. 管理 crontab 任务
编辑当前用户的 crontab:
crontab -e
查看当前用户的 crontab 任务:
crontab -l
删除当前用户的所有 crontab 任务:
crontab -r
以指定用户身份管理 crontab(需要 root 权限):
crontab -u username -e
5. 系统级 cron 目录
除了 crontab -e 编辑的用户级任务,系统还提供了几个预定义的 cron 目录,将脚本放入对应目录即可按周期自动执行:
/etc/cron.hourly/—— 每小时执行一次/etc/cron.daily/—— 每天执行一次/etc/cron.weekly/—— 每周执行一次/etc/cron.monthly/—— 每月执行一次
系统级 cron 配置文件位于 /etc/crontab,其格式比用户级多一个用户名字段:
分 时 日 月 周 用户 命令
例如:
0 4 * * * root /usr/sbin/logrotate
6. 日志与调试
cron 的执行日志默认记录在 /var/log/cron 文件中,可通过以下命令查看最近执行的任务:
tail -f /var/log/cron
如果任务未按预期执行,检查以下几点:
- crond 服务是否正常运行
- 脚本是否有可执行权限(
chmod +x script.sh) - 脚本中使用绝对路径,因为 cron 的环境变量有限
- 检查
/var/log/cron中的错误信息
7. 访问控制
与 at 类似,cron 也通过 /etc/cron.allow 和 /etc/cron.deny 控制用户权限。如果 cron.allow 存在,只有该文件中的用户可以使用 crontab;否则检查 cron.deny,不在其中的用户均可使用。
NFS服务配置
NFS(Network File System)是 Linux 系统上最常用的网络文件共享协议,允许客户端通过网络挂载远程服务器上的目录,像访问本地文件一样操作远程文件。NFS 基于 RPC(Remote Procedure Call)实现,适合局域网内的文件共享场景。
1. 安装 NFS 服务端
在作为 NFS 服务器的机器上安装 nfs-utils:
yum install nfs-utils -y
2. 启动 NFS 服务
启动并设置开机自启:
systemctl start nfs-server
systemctl enable nfs-server
确认服务状态:
systemctl status nfs-server
3. 配置共享目录
NFS 的共享配置通过 /etc/exports 文件管理。编辑该文件:
vim /etc/exports
添加共享规则,格式为:共享目录 客户端(选项)
示例:将 /root/data 目录共享给整个 192.168.222.0/24 网段:
/root/data 192.168.222.0/24(rw,sync,no_root_squash)

常用选项说明:
rw—— 读写权限,ro为只读sync—— 同步写入,数据写入磁盘后才返回确认async—— 异步写入,性能更好但可能丢失数据no_root_squash—— 客户端 root 用户保持 root 权限(默认会映射为 nfsnobody)no_all_squash—— 保留用户身份映射subtree_check—— 检查子目录权限(默认启用)
4. 应用配置
修改 /etc/exports 后,执行以下命令使配置生效:
exportfs -r
查看当前所有共享目录:
exportfs -v
5. 配置防火墙
NFS 依赖多个 RPC 端口,需要放行相关服务。如果使用 firewalld:
firewall-cmd --add-service=nfs --permanent
firewall-cmd --add-service=rpc-bind --permanent
firewall-cmd --add-service=mountd --permanent
firewall-cmd --reload
6. 客户端挂载 NFS 共享
在客户端机器上安装 nfs-utils:
yum install nfs-utils -y
查看 NFS 服务器(192.168.222.135)上的共享目录:
showmount -e 192.168.222.135

创建本地挂载点并挂载:
mkdir /mnt/nfs
mount -t nfs 192.168.222.135:/root/data /mnt/nfs
验证挂载是否成功:
df -h | grep nfs

7. 设置开机自动挂载
编辑 /etc/fstab 文件,添加以下条目:
192.168.222.135:/data /mnt/nfs nfs defaults 0 0
之后系统重启时会自动挂载 NFS 共享目录。
8. 卸载 NFS 挂载
使用 umount 命令卸载:
umount /mnt/nfs
如果提示 target is busy,可使用 fuser -km /mnt/nfs 强制终止占用进程后再卸载。
autofs配置
autofs 是一种按需自动挂载文件系统的机制,当用户访问某个挂载点时,autofs 会自动触发挂载操作;当挂载点在一段时间内未被使用时,autofs 会自动卸载。相比在 /etc/fstab 中静态挂载,autofs 可以节省系统资源,特别适合管理大量 NFS 共享或可移动设备。
1. 安装 autofs
在需要配置 autofs 的机器上安装 autofs 软件包:
yum install autofs -y
2. 启动 autofs 服务
启动并设置开机自启:
systemctl start autofs
systemctl enable autofs
确认服务状态:
systemctl status autofs
3. 主配置文件结构
autofs 的核心配置文件位于 /etc/auto.master,它定义了挂载点与映射文件之间的对应关系。映射文件则具体描述每个挂载点的来源和选项。
主配置文件格式:
挂载点 映射文件 [选项]
例如:
/mnt /etc/auto.nfs --timeout=60
这表示 /mnt 目录下的子目录由 /etc/auto.nfs 映射文件管理,空闲 60 秒后自动卸载。
4. 配置 NFS 自动挂载示例
假设需要自动挂载 NFS 服务器 192.168.222.135 上的 /root/data 目录到本机的 /mnt/nfs 目录。
第一步,编辑主配置文件 /etc/auto.master:
vim /etc/auto.master
在文件末尾添加:
/mnt /etc/auto.nfs --timeout=60

第二步,创建映射文件 /etc/auto.nfs:
vim /etc/auto.nfs
添加以下内容:
nfs -rw,sync,no_root_squash 192.168.222.135:/root/data

映射文件格式说明:
挂载点子目录 挂载选项 远程路径
其中 nfs 是 /mnt 下的子目录名,访问 /mnt/nfs 时 autofs 会自动挂载。
第三步,重启 autofs 服务使配置生效:
systemctl restart autofs
第四步,测试自动挂载:
ls /mnt/nfs
执行该命令时,autofs 会自动触发挂载操作,列出远程目录的内容。使用 df -h | grep nfs 可以确认挂载已生效。

5. 直接映射(Direct Map)
除了前面介绍的间接映射(通过 /mnt 下的子目录自动挂载),autofs 还支持直接映射(Direct Map)。直接映射允许将远程目录直接挂载到任意指定的绝对路径上,而不需要先定义一个父级挂载点目录。直接映射使用 /- 作为主配置文件中的挂载点标识。
下面通过一个完整的实战步骤,演示如何将 NFS 服务器 192.168.222.135 上的 /root/data 目录直接映射到本机的 /data 路径。
步骤 1:编辑主配置文件 /etc/auto.master
使用 vim 打开主配置文件:
vim /etc/auto.master
在文件末尾添加以下一行。注意挂载点位置必须写 /-,这是直接映射的固定语法:

/- /etc/auto.direct
这行配置的含义是:所有由 /etc/auto.direct 映射文件定义的挂载点,都按照直接映射方式处理,即映射文件中的键就是最终的绝对挂载路径。
步骤 2:创建直接映射文件 /etc/auto.direct
创建并编辑映射文件:
vim /etc/auto.direct
添加以下内容:
/data -rw,sync 192.168.222.135:/root/data

直接映射文件的格式与间接映射略有不同:
绝对挂载路径 挂载选项 远程路径
各字段说明:
/data—— 客户端上的绝对挂载路径,访问此目录时触发自动挂载-rw,sync—— 挂载选项,表示读写权限、同步写入192.168.222.135:/root/data—— NFS 服务器上的共享目录路径
步骤 3:重启 autofs 服务使配置生效
systemctl restart autofs
重启后,autofs 会重新读取 /etc/auto.master 和所有引用的映射文件。
步骤 4:测试直接映射是否生效
直接访问映射的目标路径:
ls /data
执行该命令时,autofs 会自动触发挂载操作,列出远程 /root/data 目录的内容。使用以下命令确认挂载已生效:
df -h | grep data
如果看到类似 192.168.222.135:/root/data 挂载在 /data 上的输出,说明直接映射配置成功。

步骤 5:验证空闲自动卸载
等待 --timeout 指定的时间(默认 300 秒,即 5 分钟)后,再次执行 df -h | grep data,如果挂载点已消失,说明 autofs 的空闲自动卸载功能正常工作。再次访问 ls /data 时,autofs 会重新触发挂载。
直接映射与间接映射的核心区别
- 间接映射:在
/etc/auto.master中指定一个父目录(如/mnt),映射文件中的键是子目录名(如nfs),最终挂载路径为/mnt/nfs - 直接映射:在
/etc/auto.master中使用/-作为挂载点,映射文件中的键是完整的绝对路径(如/data),挂载点位置完全由映射文件决定 - 适用场景:当需要将远程目录挂载到分散的、非统一父目录下的多个路径时,直接映射更加灵活
6. 多挂载点配置
一个映射文件可以管理多个挂载点,每行一个:
vim /etc/auto.nfs
data -rw,sync 192.168.222.135:/root/data
backup -rw,sync 192.168.222.136:/backup
logs -ro 192.168.222.137:/var/log
这样访问 /mnt/data、/mnt/backup、/mnt/logs 时都会自动触发对应的 NFS 挂载。
7. 常用选项说明
--timeout=N—— 空闲 N 秒后自动卸载,默认 300 秒--ghost—— 即使未挂载也显示挂载点目录(幽灵模式)-fstype=类型—— 指定文件系统类型,如-fstype=nfsrw/ro—— 读写/只读权限sync/async—— 同步/异步写入hard/soft—— 硬挂载(持续重试)/ 软挂载(超时返回错误)intr—— 允许中断挂起的 NFS 请求
8. 查看 autofs 状态与调试
查看当前 autofs 管理的挂载情况:
automount -m
查看 autofs 日志(日志记录在 /var/log/messages 中):
tail -f /var/log/messages | grep automount
如果自动挂载未生效,检查以下几点:
- autofs 服务是否正常运行(
systemctl status autofs) /etc/auto.master和映射文件的语法是否正确- NFS 服务器端共享是否已配置并可用(
showmount -e 服务器IP) - 防火墙是否放行了 NFS 相关端口
- 检查
/var/log/messages中的 automount 错误信息
ISCSI服务配置
iSCSI(Internet Small Computer System Interface)是一种基于 IP 网络的存储协议,允许客户端(Initiator)通过网络访问远程存储设备(Target)上的块存储,就像访问本地硬盘一样。iSCSI 将 SCSI 命令封装在 TCP/IP 数据包中传输,适合构建低成本、跨网络的存储区域网络(SAN)。
1. 安装 iSCSI 服务端(Target)
在作为 iSCSI 存储服务器的机器上安装 targetcli 工具:
yum install targetcli -y
targetcli 是一个交互式管理工具,用于配置 iSCSI Target 的后端存储、LUN 和 ACL 等。
2. 启动 iSCSI Target 服务
启动并设置开机自启:
systemctl start target
systemctl enable target
确认服务状态:
systemctl status target
3. 使用 targetcli 配置 iSCSI Target
进入 targetcli 交互界面:targetcli
在 targetcli 中依次执行以下命令创建后端存储、LUN 和 Target:
# 1. 创建后端块存储,绑定分区/dev/sdb1
/backstores/block create demo /dev/sdb1
2. 创建iSCSI目标,自定义IQN名称
/iscsi create iqn.2019-10.com.example:storage1
3. 将后端磁盘映射为LUN
/iscsi/iqn.2019-10.com.example:storage1/tpg1/luns create /backstores/block/demo
4. 创建ACL白名单,限制指定客户端IQN访问
/iscsi/iqn.2019-10.com.example:storage1/tpg1/acls create iqn.2019-10.com.example:demokey
5. 删除自动生成的0.0.0.0全局监听,绑定本机固定IP
/iscsi/iqn.2019-10.com.example:storage1/tpg1/portals delete 0.0.0.0 3260
/iscsi/iqn.2019-10.com.example:storage1/tpg1/portals create 192.168.222.135
配置完成后,使用 exit 退出 targetcli,配置会自动保存到 /etc/target/saveconfig.json。
4. 配置防火墙
iSCSI Target 默认使用 3260 端口,需要放行:
firewall-cmd --add-port=3260/tcp --permanent
firewall-cmd --reload
5. 安装 iSCSI 客户端(Initiator)
在需要连接 iSCSI 存储的客户端机器上安装 iscsi-initiator-utils:
yum install iscsi-initiator-utils -y
6. 配置 Initiator 名称
编辑 Initiator 名称配置文件,将其设置为与 Target ACL 中一致的名称:
vim /etc/iscsi/initiatorname.iscsi
将文件内容修改为:
InitiatorName=iqn.2019-10.com.example:demokey

7. 发现 iSCSI Target
使用 iscsiadm 命令发现 Target 服务器(192.168.222.135)上的可用存储:
iscsiadm -m discovery -t sendtargets -p 192.168.222.135:3260
成功后会显示 Target 的 IQN 和 IP 地址信息。

8. 登录 iSCSI Target
使用发现到的 Target IQN 进行登录:
iscsiadm -m node -T iqn.2019-10.com.example:storage1 -p 192.168.222.135:3260 --login
登录成功后,客户端会多出一块新的磁盘设备(如 /dev/sdc),可通过 lsblk 或 fdisk -l 查看。

9. 分区与格式化 iSCSI 磁盘
对 iSCSI 磁盘进行分区和格式化,然后挂载使用:
fdisk /dev/sdc
mkfs.ext4 /dev/sdc1
mkdir /mnt/iscsi
mount /dev/sdc1 /mnt/iscsi
验证挂载是否成功:
df -h | grep iscsi
10. 设置开机自动挂载
编辑 /etc/fstab 文件,添加以下条目(注意使用 _netdev 选项,确保网络就绪后再挂载):
/dev/sdc1 /mnt/iscsi ext4 defaults,_netdev 0 0
同时设置 iSCSI 节点开机自动登录:
iscsiadm -m node -T iqn.2019-10.com.example:storage1 -p 192.168.222.135:3260 --op update -n node.startup -v automatic
11. 登出 iSCSI Target
如果需要断开 iSCSI 连接,先卸载挂载点,然后登出:
umount /mnt/iscsi
iscsiadm -m node -T iqn.2019-10.com.example:storage1 -p 192.168.222.135:3260 --logout
12. 查看 iSCSI 会话状态
查看当前所有活跃的 iSCSI 会话:
iscsiadm -m session
查看更详细的会话信息:
iscsiadm -m session -P 3
13. 常用排错命令
systemctl status target—— 检查 Target 服务状态systemctl status iscsid—— 检查 Initiator 守护进程状态journalctl -u target—— 查看 Target 日志journalctl -u iscsid—— 查看 Initiator 日志targetcli ls—— 查看 Target 当前所有配置ping 192.168.222.135—— 确认网络连通性
系统引导
误删/boot/grub2/grub.cfg文件修复步骤:


误删boot文件夹修复步骤:
准备 CentOS7-x86_64-DVD.iso 完整镜像
关机虚拟机,在 VMware 设置光驱挂载该 ISO,勾选「已连接、启动时连接」
右键虚拟机 → 电源 → 打开电源时进入固件
BIOS 切换到Boot选项卡,把CD-ROM Drive用+移到最顶部

按 F10 保存并重启,从光盘启动
光盘启动界面选择 Troubleshooting(故障排除)

选择 Rescue a CentOS system(救援系统)

等待加载后输入 1 选择 Continue(读写挂载原系统),回车确认

切换到原系统真实环境(chroot)
# 切换到虚拟机原有系统环境,所有命令操作真实磁盘
chroot /mnt/sysimage

此时终端前缀变为 sh-4.2#,代表进入成功。
救援 shell 先手动配网卡
# 查看网卡名称
ip a
# 启用网卡
ifup ens33
# 配置静态IP(按你VMware网段修改)
ip addr add 192.168.222.137/24 dev ens33
ip route add default via 192.168.222.2
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
# 测试外网
ping baidu.com

说明网络联通
chroot 后直接网络重装内核
chroot /mnt/sysimage
# 清理原有源缓存,走外网下载
yum clean all
yum reinstall kernel-3.10.0-1160.el7.x86_64 -y
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg
验证修复结果
ls /boot
# 正常输出包含 vmlinuz、grub2、标准initramfs镜像,修复成功

退出救援模式重启
# 退出chroot环境
exit
# 再次退出到救援主界面
exit
虚拟机重启,回到 BIOS 界面,把启动顺序改回Hard Drive硬盘第一启动,取消光驱 ISO 挂载,正常开机测试
System Manager
System Manager 在 Linux 系统中通常指 systemd——当今主流 Linux 发行版的初始化系统和服务管理器。systemd 负责系统启动后的第一个进程(PID 1),管理所有系统服务的启动、停止、状态监控和依赖关系。掌握 systemd 的使用是 Linux 运维的核心技能之一。
1. systemctl 基础命令
systemctl 是 systemd 的主要管理工具,用于控制服务单元(unit)的生命周期:
systemctl start <服务名>—— 启动指定服务systemctl stop <服务名>—— 停止指定服务systemctl restart <服务名>—— 重启指定服务systemctl reload <服务名>—— 重新加载配置文件(不中断服务)systemctl status <服务名>—— 查看服务运行状态和最近日志systemctl enable <服务名>—— 设置服务开机自启systemctl disable <服务名>—— 取消服务开机自启systemctl is-active <服务名>—— 检查服务是否正在运行systemctl is-enabled <服务名>—— 检查服务是否已启用开机自启
2. 查看服务状态详解
使用 systemctl status 可以获取服务的详细信息,输出包含以下关键字段:
- Loaded —— 服务单元文件是否已加载,以及是否设置为开机自启(enabled/disabled)
- Active —— 服务当前运行状态,常见值有 active (running)、active (exited)、inactive (dead)、failed
- Main PID —— 服务主进程的进程号
- Tasks —— 服务当前的任务/线程数
- Memory —— 服务占用的内存量
- CGroup —— 控制组信息,显示服务所属的 cgroup 层级
示例:
systemctl status sshd
3. 服务单元(Unit)管理
systemd 中的每个服务、套接字、挂载点等都被称为一个 Unit。常见的 Unit 类型包括:
.service—— 系统服务(最常用).socket—— 套接字单元,用于 socket 激活的服务.timer—— 定时器单元,可替代 cron 实现定时任务.mount—— 挂载点单元.path—— 路径单元,监控文件或目录变化触发服务.target—— 目标单元,用于将多个单元分组(类似运行级别)
查看所有已加载的 Unit:
systemctl list-units
查看所有 Unit 文件(包括未加载的):
systemctl list-unit-files
按类型筛选,例如只查看服务单元:
systemctl list-units --type=service --all
4. 服务单元文件位置与结构
systemd 的服务单元文件通常存放在以下目录:
/usr/lib/systemd/system/—— 软件包安装的默认单元文件/etc/systemd/system/—— 管理员自定义或覆盖的单元文件(优先级更高)/run/systemd/system/—— 运行时生成的单元文件
一个典型的 .service 文件结构如下:
[Unit]
Description=My Custom Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/myapp
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
User=myapp
Group=myapp
[Install]
WantedBy=multi-user.target
关键字段说明:
- [Unit] 段:Description 描述服务用途;After 指定启动顺序依赖
- [Service] 段:Type 指定启动类型(simple/forking/oneshot/dbus/notify);ExecStart 指定启动命令;Restart 指定重启策略(no/on-success/on-failure/always);RestartSec 指定重启间隔秒数
- [Install] 段:WantedBy 指定该服务属于哪个 target,用于控制开机自启
5. 系统目标(Target)管理
Target 是 systemd 中用于将多个单元组合在一起的概念,类似于传统 SysVinit 的运行级别(runlevel)。常见的 Target 包括:
poweroff.target—— 关机(对应 runlevel 0)rescue.target—— 单用户救援模式(对应 runlevel 1)multi-user.target—— 多用户非图形模式(对应 runlevel 3)graphical.target—— 多用户图形模式(对应 runlevel 5)reboot.target—— 重启(对应 runlevel 6)
查看当前默认的 Target:
systemctl get-default
设置默认启动到多用户模式(无图形界面):
systemctl set-default multi-user.target
立即切换到救援模式:
systemctl rescue
6. 日志查看(journalctl)
systemd 集成了日志管理功能,通过 journalctl 可以查看所有服务的日志:
journalctl -u <服务名>—— 查看指定服务的日志journalctl -n 50—— 查看最近 50 条日志journalctl -f—— 实时追踪最新日志journalctl --since today—— 查看今天的日志journalctl -p err—— 只查看错误级别及以上的日志
7. 系统资源控制(CGroup)
systemd 通过控制组(CGroup)对服务使用的系统资源进行限制和管理。可以为每个服务设置 CPU、内存、磁盘 I/O 等资源上限:
编辑服务单元文件,在 [Service] 段添加资源限制参数:
[Service]
MemoryMax=512M
CPUQuota=50%
IOWeight=100
常用资源控制参数:
MemoryMax=—— 服务最大可用内存MemoryHigh=—— 内存使用软限制,超过后系统会尝试回收CPUQuota=—— CPU 使用配额百分比,如 50% 表示最多使用半个 CPU 核心TasksMax=—— 服务最大任务/线程数IOWeight=—— I/O 调度权重(100-1000)
修改后执行 systemctl daemon-reload 并重启服务使配置生效。
8. 常用排错命令
systemctl list-units --failed—— 列出所有启动
失败的服务systemctl reset-failed <服务名>—— 清除服务的失败状态journalctl -xe—— 查看最近的系统日志和错误提示(-x 提供额外解释)systemd-analyze—— 分析系统启动耗时systemd-analyze blame—— 按启动耗时排序,找出最慢的服务systemd-analyze critical-chain—— 显示启动关键链路的耗时
iptables
iptables 是 Linux 系统上最经典的包过滤防火墙工具,基于内核的 Netfilter 框架实现。它通过定义规则链(Chain)和规则(Rule)来控制进出系统的网络数据包,支持包过滤、网络地址转换(NAT)和数据包修改等功能。虽然新一代的 nftables 已逐渐成为主流,但 iptables 在现有生产环境中仍然广泛使用。
1. iptables 基本概念
iptables 使用表(Table)、链(Chain)和规则(Rule)三层结构来组织防火墙策略:
- 表(Table):按功能分类,主要包括 filter(过滤)、nat(地址转换)、mangle(修改数据包)、raw(原始包处理)
- 链(Chain):数据包在表中经过的检查点,如 INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING
- 规则(Rule):定义匹配条件和动作(ACCEPT、DROP、REJECT、LOG 等)
最常用的 filter 表包含三条内置链:
- INPUT —— 处理进入本机的数据包
- OUTPUT —— 处理本机发出的数据包
- FORWARD —— 处理经过本机转发的数据包
2. 查看当前规则
查看 filter 表的所有规则:
iptables -L -n -v

参数说明:
-L—— 列出规则-n—— 不解析 IP 地址和端口号(显示更快)-v—— 显示详细信息(包计数、字节数等)
查看指定表的规则,例如 nat 表:
iptables -t nat -L -n -v
查看规则编号(方便后续插入和删除):
iptables -L --line-numbers
3. 设置默认策略
默认策略决定了当数据包不匹配任何规则时的处理方式。建议将 INPUT 链默认策略设为 DROP,仅放行需要的流量:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
4. 常用规则示例
放行 SSH 服务(22 端口):
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
放行 HTTP 和 HTTPS 服务:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
放行已建立的连接和相关连接(保证已建立的会话不受影响):
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
放行回环接口(lo)的流量(很多系统服务依赖本地回环通信):
iptables -A INPUT -i lo -j ACCEPT
允许来自指定 IP 段的访问:
iptables -A INPUT -s 192.168.222.0/24 -j ACCEPT
拒绝来自某个 IP 的访问并返回拒绝消息:
iptables -A INPUT -s 10.0.0.100 -j REJECT
限制 ICMP(ping)请求频率,防止 ping 洪水攻击:
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT
5. 规则管理操作
在指定位置插入规则(插入到第 2 条规则之前):
iptables -I INPUT 2 -p tcp --dport 8080 -j ACCEPT
删除指定规则(按编号删除,编号通过 --line-numbers 查看):
iptables -D INPUT 3
删除指定规则(按规则内容匹配删除):
iptables -D INPUT -p tcp --dport 8080 -j ACCEPT
替换指定规则(替换第 3 条规则):
iptables -R INPUT 3 -p tcp --dport 3306 -j ACCEPT
清空所有规则(谨慎使用,可能导致远程连接断开):
iptables -F
6. 网络地址转换(NAT)
iptables 的 nat 表支持源地址转换(SNAT)和目标地址转换(DNAT),常用于共享上网和端口转发。
SNAT —— 将内网 IP 转换为公网 IP,实现共享上网:
iptables -t nat -A POSTROUTING -s 192.168.222.0/24 -o eth0 -j SNAT --to-source 公网IP
如果公网 IP 是动态获取的,可以使用 MASQUERADE 替代 SNAT:
iptables -t nat -A POSTROUTING -s 192.168.222.0/24 -o eth0 -j MASQUERADE
DNAT —— 将公网端口转发到内网服务器:
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.222.100:80
启用 IP 转发(NAT 功能需要内核支持转发):
echo 1 > /proc/sys/net/ipv4/ip_forward
永久启用 IP 转发,编辑 /etc/sysctl.conf:
net.ipv4.ip_forward = 1
执行 sysctl -p 使配置生效。
7. 规则持久化
iptables 规则默认保存在内存中,重启后会丢失。需要将规则保存到文件,并在系统启动时自动加载。
保存当前规则到文件:
iptables-save > /etc/sysconfig/iptables
从文件恢复规则:
iptables-restore < /etc/sysconfig/iptables
设置开机自动加载规则(安装 iptables-services 服务):
yum install iptables-services -y
systemctl enable iptables
systemctl start iptables
启用 iptables-services 后,系统启动时会自动从 /etc/sysconfig/iptables 加载规则。
8. iptables 与 firewalld 的关系
在 CentOS/RHEL 7 及以上版本中,firewalld 是默认的防火墙管理工具,它底层仍然使用 iptables(或 nftables)作为后端。firewalld 提供了更友好的区域(zone)和服务(service)管理方式,适合日常使用。如果习惯直接操作 iptables,可以停止 firewalld 并启用 iptables-services:
systemctl stop firewalld
systemctl disable firewalld
yum install iptables-services -y
systemctl enable iptables
systemctl start iptables
9. 常用排错命令
iptables -L -n -v --line-numbers—— 查看规则及编号iptables -t nat -L -n -v—— 查看 NAT 规则iptables -S—— 以命令格式输出所有规则(可直接复制执行)iptables -Z—— 重置所有链的包计数器和字节计数器iptables -F && iptables -X—— 清空所有规则并删除自定义链systemctl status iptables—— 检查 iptables 服务状态journalctl -u iptables—— 查看 iptables 服务日志
Apache服务配置
安装httpd:yum install httpd httpd-manual -y
开启服务:systemctl enable --now httpd
默认发布目录:cd /var/www/html
创建默认首页文件:echo hello > /var/www/html/index.html
重启 Apache 生效:systemctl restart httpd

apache主机访问控制:
编辑主配置文件:vim /etc/httpd/conf/httpd.conf

规则逻辑:
Order deny,allow:先执行全部拒绝,再执行放行规则deny from all:默认拒绝所有 IPallow from 192.168.222.135:仅放行你当前客户端 IP(192.168.222.135) 效果:只有 135 这台机器能访问/admin,其他 IP 访问会返回 403 Forbidden
检查配置语法(必做,防止重启服务失败):httpd -t
重载 httpd 服务使配置生效: systemctl reload httpd
mkdir -p /var/www/html/admin
# 新建测试页面
echo "admin page test" > /var/www/html/admin/index.html
# 修复权限防止403
chown apache:apache /var/www/html/admin -R
chmod 755 /var/www/html/admin -R


用户认证
创建密码文件与认证用户:

修改 httpd 主配置开启目录认证

1. 检查配置是否存在语法错误(必做)
httpd -t
输出 Syntax OK 代表配置无误。
2. 重启 / 重载 httpd 生效
# 平滑重载(推荐,不中断现有访问)
systemctl reload httpd
# 或完全重启服务
# systemctl restart httpd
浏览器打开:

apache虚拟主机
编辑默认虚拟主机文件
vim /etc/httpd/conf.d/default.conf
写入配置(标准 80 端口):
<VirtualHost _default_:80>
DocumentRoot "/var/www/html"
# 给默认站点目录开放访问权限
<Directory "/var/www/html">
Require all granted
</Directory>
</VirtualHost>
新建虚拟主机配置文件
vim /etc/httpd/conf.d/vhost.conf
写入完整配置(大小写不敏感,规范建议首字母大写):
# 匹配所有网卡80端口,域名www.linux.org
<VirtualHost *:80>
# 站点绑定域名
ServerName www.linux.org
# 网站根目录
DocumentRoot "/www/www.linux.org"
# 独立访问日志
CustomLog "logs/www.linux.org.log" combined
</VirtualHost>
授权网站目录允许外部访问
<Directory "/www/www.linux.org">
Require all granted
</Directory>
创建网站目录与测试首页
# 新建站点目录
mkdir -p /www/www.linux.org
# 生成测试页面
echo "This is www.linux.org site" > /www/www.linux.org/index.html
# 修复目录权限,防止403禁止访问
chown -R apache:apache /www/www.linux.org
chmod -R 755 /www/www.linux.org
Linux 本机无法识别 www.linux.org,需要修改 hosts 绑定 IP(目标机 IP:192.168.222.137)
vim /etc/hosts
# 在文件末尾添加一行
192.168.222.137 www.linux.org

SELinux
1. SELinux 的三种工作模式
SELinux 有以下三种运行模式:
- Enforcing(强制模式):默认模式,SELinux 策略生效,违反策略的操作会被拒绝并记录日志
- Permissive(宽容模式):SELinux 策略不强制拦截,但违反策略的操作会被记录到日志中,常用于调试和策略开发
- Disabled(禁用模式):完全关闭 SELinux,既不拦截也不记录
2. 查看 SELinux 状态
使用 getenforce 命令快速查看当前模式:
getenforce
输出 Enforcing、Permissive 或 Disabled。
3. 临时切换 SELinux 模式
使用 setenforce 命令可以在 Enforcing 和 Permissive 之间临时切换,无需重启:
切换到宽容模式:
setenforce 0
切换到强制模式:
setenforce 1
注意:setenforce 只能在 Enforcing 和 Permissive 之间切换,无法从 Disabled 切换到其他模式(需要修改配置文件后重启)。临时切换在系统重启后会恢复到配置文件中的设定值。
4. 永久修改 SELinux 模式
SELinux 的永久配置保存在 /etc/selinux/config 文件中:
vim /etc/selinux/config
修改 SELINUX 参数的值:

将 SELINUX=enforcing 修改为 permissive 或 disabled 后,需要重启系统才能生效。如果是从 Disabled 切换回 Enforcing,系统重启时会对所有文件重新标记安全上下文,这个过程可能需要几分钟。
SELINUXTYPE 通常保持为 targeted,这是针对关键系统服务进行保护的目标策略,也是生产环境中的推荐配置。
5. 安全上下文(Security Context)
SELinux 为系统中的每个对象(文件、目录、进程、端口等)分配一个安全上下文标签。安全上下文由四个字段组成,格式为:
用户:角色:类型:级别
查看文件和目录的安全上下文:
ls -Z
例如查看 /var/www/html 的安全上下文:
ls -Zd /var/www/html
输出示例:
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
其中 httpd_sys_content_t 是类型字段,这是 SELinux targeted 策略中最关键的组成部分。只有具有匹配类型的进程才能访问对应类型的文件。
查看进程的安全上下文:
ps auxZ | grep httpd
常见类型字段含义:
httpd_sys_content_t—— Apache/Nginx 可读取的 Web 内容httpd_sys_rw_content_t—— Apache/Nginx 可读写的 Web 内容public_content_t—— 可被多个服务(如 NFS、FTP、HTTP)共享访问ssh_home_t—— SSH 用户家目录相关文件
6. 修改文件的安全上下文
临时修改文件的安全上下文(restorecon 或重启后可能恢复):
chcon -t httpd_sys_content_t /path/to/file
递归修改目录及其内容:
chcon -R -t httpd_sys_content_t /var/www/mysite/
永久修改(将规则写入策略,不会被 restorecon 覆盖):
semanage fcontext -a -t httpd_sys_content_t "/var/www/mysite(/.*)?"
restorecon -Rv /var/www/mysite/
建议优先使用 semanage + restorecon 组合,而不是 chcon,因为 chcon 的修改在文件系统 relabel 后会丢失。
7. SELinux 布尔值(Booleans)管理
SELinux 提供了大量布尔值开关,用于在不修改策略的情况下调整特定功能的访问权限。使用 getsebool 和 setsebool 进行管理。
查看所有布尔值:
getsebool -a
查看特定布尔值(如 httpd 相关):
getsebool -a | grep httpd
临时开启某个布尔值(重启后失效):
setsebool httpd_enable_homedirs on
永久开启(加 -P 参数):
setsebool -P httpd_enable_homedirs on
常见布尔值示例:
httpd_enable_homedirs—— 允许 Apache 访问用户家目录httpd_can_network_connect—— 允许 Apache 发起网络连接(如连接后端数据库)nfs_export_all_ro—— 允许 NFS 以只读方式导出所有文件nfs_export_all_rw—— 允许 NFS 以读写方式导出所有文件ftpd_full_access—— 允许 FTP 守护进程完全访问系统named_write_master_zones—— 允许 DNS 服务写入主区域文件virt_use_nfs—— 允许虚拟机访问 NFS 存储
8. SELinux 排错与日志分析
当服务无法正常工作时,如果怀疑是 SELinux 导致的问题,可以通过以下方式排查。
首先临时切换到 Permissive 模式验证是否真的是 SELinux 导致的:
setenforce 0
如果此时服务恢复正常,说明确实是 SELinux 策略拦截了操作。排查完毕后记得恢复:
setenforce 1
SELinux 的审计日志记录在 /var/log/audit/audit.log 中。可以使用 ausearch 筛选 SELinux 相关条目:
ausearch -m avc -ts recent
如果安装了 setroubleshoot 工具包,可以使用 sealert 分析审计日志并生成可读的排错建议:
yum install setroubleshoot -y
sealert -a /var/log/audit/audit.log
sealert 不仅会指出被拦截的操作,还会给出具体的修复命令(如添加布尔值或修改上下文),是 SELinux 排错的首选工具。
实时查看 SELinux 拒绝事件:
journalctl -f | grep -i selinux
9. SELinux 与常见服务的配合
SELinux 与 Apache 配合:
当 Apache 需要访问非默认目录时,必须设置正确的安全上下文:
semanage fcontext -a -t httpd_sys_content_t "/www(/.*)?"
restorecon -Rv /www
如果 Apache 需要连接后端服务(如数据库或反向代理),需开启网络连接布尔值:
setsebool -P httpd_can_network_connect on
SELinux 与 NFS 配合:
NFS 共享目录可能被 SELinux 限制访问,需要开启相关布尔值:
setsebool -P nfs_export_all_ro on
setsebool -P nfs_export_all_rw on
SELinux 与 SSH 配合:
如果修改了 SSH 默认端口(22),需要让 SELinux 识别新端口:
semanage port -a -t ssh_port_t -p tcp 2222
10. 常用排错命令总结
getenforce—— 查看当前 SELinux 模式sestatus—— 查看 SELinux 详细状态setenforce 0/1—— 临时切换 Permissive/Enforcing 模式ls -Z—— 查看文件/目录的安全上下文ps auxZ—— 查看进程的安全上下文chcon -t <type> 文件—— 临时修改安全上下文restorecon -Rv 目录—— 恢复默认安全上下文semanage fcontext -l—— 列出所有文件上下文映射规则semanage port -l—— 列出所有端口上下文映射规则getsebool -a—— 列出所有布尔值setsebool -P <布尔值> on/off—— 永久设置布尔值ausearch -m avc -ts recent—— 查看最近的 SELinux 拒绝事件sealert -a /var/log/audit/audit.log—— 分析审计日志并给出修复建议journalctl -f | grep -i selinux—— 实时监控 SELinux 相关日志
4万+



被折叠的 条评论
为什么被折叠?



