Linux 系统故障排查与安全基础指南
1. 系统性能问题排查
在 Linux 系统中,有时系统性能不佳可能是由于用户或应用程序的错误操作导致的。配置错误或损坏的应用程序可能会挂起或耗尽系统资源,而经验不足的用户可能会误启动多个程序实例,从而消耗大量系统资源。作为系统管理员,需要掌握查找和解决这些问题的方法。
1.1 基本工具使用
为了排查 Linux 系统的性能问题,可以使用一些基本工具来监控和管理系统上运行的进程,如
ps
、
top
、
kill
和
killall
等命令。
1.2 虚拟内存管理
Linux 系统中最复杂的故障排查领域之一是虚拟内存管理。计算机有永久存储数据的方式(硬盘)和临时存储数据的方式(随机存取存储器,即 RAM 和交换空间)。与磁盘存储相比,随机存取存储器具有以下特点:
| 属性 | 描述 |
| ---- | ---- |
| 离处理器更近 | 内存物理上靠近计算机主板上的 CPU,因此如果数据在 RAM 中,CPU 可以立即获取所需的数据。 |
| 速度更快 | 由于其靠近 CPU 以及访问方式(固态与机械硬盘相比),CPU 从 RAM 获取信息的速度比从硬盘获取信息的速度快得多。 |
| 容量较小 | 新计算机可能配备 10 TB 或更大的硬盘,但 RAM 可能只有 8 GB 或 16 GB。虽然将处理器可能需要的每个文件和数据都放入 RAM 可以使计算机运行得更快,但在大多数情况下,RAM 空间是不够的。 |
| 价格更贵 | 尽管现在 RAM 比一二十年前更实惠,但每 GB 的价格仍然比硬盘贵。 |
| 临时性 | RAM 保存着 CPU 当前正在使用的数据和元数据,以及 Linux 内核认为某个进程不久后可能需要的一些内容。当计算机关闭时,RAM 中的所有数据都会丢失。 |
1.3 交换空间的作用
如果内存需求超过了 RAM 的供应,内核可以将数据临时移动到一个称为交换空间的区域。当数据从 RAM 交换到交换区域(换出)时,会导致性能下降,因为写入磁盘的速度比写入 RAM 慢得多。当数据从交换区域返回 RAM(换入)时,也会导致性能下降。当 Linux 系统的 RAM 空间不足时,交换就像汽车失去了高速档,系统性能会显著下降,但所有进程仍然保持活动状态,不会丢失任何数据或完全失败。如果 RAM 和交换空间都已满,且没有数据可以丢弃或写入磁盘,系统可能会达到内存不足(OOM)的状态,此时内核的 OOM 杀手会启动,逐个杀死进程,以恢复内核正常运行所需的内存。
1.4 交换性设置
一般来说,交换被认为是不好的,应该尽量避免。但在某些情况下,更积极的交换实际上可以提高性能。例如,当你在文本编辑器中打开一个文档,然后将其最小化在桌面上几天,同时处理其他任务。如果将该文档的数据交换到磁盘,更多的 RAM 将可用于更活跃的应用程序,从而更好地利用这些空间。当你下次需要访问该文档的数据时,数据从磁盘交换回 RAM 会导致性能下降。系统交换的积极程度相关的设置称为交换性。
2. 内存问题检查
当登录到 Linux 桌面,并且运行了大量应用程序,系统开始变慢时,可以使用
top
和
ps
等命令来检查系统的内存消耗情况。
2.1 使用 top 命令检查内存
运行
top
命令后,按大写字母
M
可以按内存使用情况对进程进行排序。例如:
# top
top - 22:48:24 up 3:59, 2 users, load average: 1.51, 1.37, 1.15
Tasks: 281 total, 2 running, 279 sleeping, 0 stopped, 0 zombie
Cpu(s): 16.6%us, 3.0%sy, 0.0%ni, 80.3%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 3716196k total, 2684924k used, 1031272k free, 146172k buffers
Swap: 4194296k total, 0k used, 4194296k free, 784176k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6679 cnegus 20 0 1665m 937m 32m S 7.0 25.8 1:07.95 firefox
6794 cnegus 20 0 743m 181m 30m R 64.8 5.0 1:22.82 npviewer.bin
3327 cnegus 20 0 1145m 116m 66m S 0.0 3.2 0:39.25 soffice.bin
6939 cnegus 20 0 145m 71m 23m S 0.0 2.0 0:00.97 acroread
2440 root 20 0 183m 37m 26m S 1.3 1.0 1:04.81 Xorg
2795 cnegus 20 0 1056m 22m 14m S 0.0 0.6 0:01.55 nautilus
top
输出中与内存相关的有两行(
Mem
和
Swap
)和四列信息(
VIRT
、
RES
、
SHR
和
%MEM
)。在这个例子中,从
Mem
行可以看出 RAM 并未耗尽(3716196k 中仅使用了 268492k),从
Swap
行可以看出没有数据被交换到磁盘(使用了 0 k)。
1.2 判断系统是否内存不足
如果认为系统即将达到内存不足的状态,可以关注以下几点:
-
Mem
行显示的可用空间接近或为零。
-
Swap
行显示的已使用空间不为零且持续增长,同时系统性能会下降。
- 当
top
屏幕每隔几秒刷新时,如果有进程存在内存泄漏(持续请求和使用更多内存,但不释放任何内存),
VIRT
内存量会增加,更重要的是,该进程的
RES
内存会持续增加。
- 如果交换空间耗尽,内核会开始杀死进程以处理内存不足的情况。
1.3 使用 Cockpit 监控内存
如果安装并启用了 Cockpit,可以通过 Web 浏览器实时监控内存使用情况。打开 Cockpit,然后选择
System ➪ Memory & Swap
。
3. 内存问题处理
在短期内,可以采取以下几种方法来处理内存不足的情况:
3.1 杀死进程
如果内存问题是由一个错误的进程引起的,可以直接杀死该进程。假设以 root 用户或拥有该失控进程的用户身份登录,在
top
窗口中按
k
,然后输入要杀死的进程的 PID,并选择发送信号 15 或 9。
3.2 清除页面缓存
如果只是想立即清理一些内存,可以让系统丢弃不活跃的页面缓存。在一个终端窗口中运行
top
命令,在另一个终端窗口中以 root 用户身份输入以下命令:
# echo 3 > /proc/sys/vm/drop_caches
通过观察
top
屏幕上的
Mem
行,查看是否有更多的
RES
内存可用。
3.3 使用 Alt+SysRq 键杀死内存不足的进程
有时,内存耗尽会使系统变得无法使用,可能无法从 shell 或 GUI 获得响应。在这种情况下,可以使用
Alt+SysRq
键杀死内存不足的进程。要启用
Alt+SysRq
键,系统必须将
/proc/sys/kernel/sysrq
设置为 1。可以通过在
/etc/sysctl.conf
文件中添加
kernel.sysrq = 1
来实现。此外,必须从基于文本的界面(如按
Ctrl+Alt+F2
时看到的虚拟控制台)运行
Alt+SysRq
键。当
kernel.sysrq
设置为 1 时,可以在基于文本的界面中按
Alt+SysRq+f
来杀死系统中 OOM 分数最高的进程。屏幕上会显示系统上运行的所有进程的列表,并在末尾列出被杀死的进程的名称。可以重复这些按键操作,直到杀死足够的进程,使系统能够正常从 shell 访问。
4. 基本 Linux 安全
4.1 安全基础
确保 Ubuntu 系统的安全,最基本的层面包括物理安全、数据安全、用户账户保护和软件安全。随着时间的推移,需要监控系统以确保其始终安全。需要问自己以下几个问题:
- 谁可以物理访问系统?
- 是否进行了数据备份以应对灾难?
- 用户账户的安全保护程度如何?
- 软件是否来自安全的 Ubuntu 发行版,并且安全补丁是否是最新的?
- 是否一直在监控系统,以确保其未被破解或损坏?
4.2 实施物理安全
计算机服务器机房门上的锁是第一道防线。虽然这是一个非常简单的概念,但往往被忽视。对物理服务器的访问意味着可以访问其中包含的所有数据。如果怀有恶意的人能够物理访问 Linux 服务器,那么任何安全软件都无法完全保护系统。基本的服务器机房物理安全措施包括:
- 服务器机房门上的锁或安全警报。
- 访问控制,只允许授权人员访问,并记录谁在何时访问了机房,例如刷卡进入系统。
4.3 监控安全
在实施基本安全措施后,需要持续监控系统的安全状况。可以通过查看系统日志、监控网络流量等方式来发现潜在的安全问题。
4.4 审计和审查安全
定期对系统的安全设置进行审计和审查,确保所有安全措施都得到了正确实施,并且没有新的安全漏洞出现。
graph LR
A[系统性能问题] --> B[用户或应用程序错误]
A --> C[虚拟内存管理问题]
B --> D[使用基本工具排查]
C --> E[了解 RAM 和交换空间]
E --> F[判断内存不足情况]
F --> G[处理内存问题]
G --> H[杀死进程]
G --> I[清除页面缓存]
G --> J[使用 Alt+SysRq 键]
A --> K[基本安全措施]
K --> L[物理安全]
K --> M[数据安全]
K --> N[用户账户保护]
K --> O[软件安全]
L --> P[门锁或警报]
L --> Q[访问控制]
通过以上步骤和方法,可以有效地排查 Linux 系统的性能问题,并确保系统的基本安全。在实际操作中,需要根据具体情况灵活运用这些技巧,以保障系统的稳定运行。
5. 安全审计与审查操作流程
5.1 系统日志审查
系统日志包含了系统活动的详细记录,对发现潜在安全问题至关重要。以下是审查系统日志的步骤:
1.
定位日志文件
:在 Linux 系统中,常见的日志文件位于
/var/log
目录下,如
syslog
、
auth.log
等。
2.
查看日志内容
:使用
cat
、
more
或
less
命令查看日志文件内容,例如:
cat /var/log/syslog
-
筛选关键信息
:使用
grep命令筛选出与安全相关的信息,如登录失败记录:
grep "Failed password" /var/log/auth.log
5.2 网络流量监控
监控网络流量可以帮助发现异常的网络活动。可以使用
tcpdump
或
Wireshark
等工具进行网络流量监控。
-
使用 tcpdump
:
tcpdump
是一个命令行工具,可以捕获和分析网络数据包。以下是一个简单的示例,捕获所有通过 eth0 接口的网络数据包:
tcpdump -i eth0
- 使用 Wireshark :Wireshark 是一个图形化的网络分析工具,提供了更直观的界面和更强大的分析功能。安装并打开 Wireshark 后,选择要监控的网络接口,即可开始捕获和分析网络流量。
5.3 安全漏洞扫描
定期进行安全漏洞扫描可以帮助发现系统中存在的安全漏洞。可以使用
Nessus
或
OpenVAS
等工具进行安全漏洞扫描。
-
安装和配置 Nessus
:Nessus 是一个专业的漏洞扫描器,提供了丰富的漏洞库和扫描功能。安装并配置 Nessus 后,创建扫描任务,指定要扫描的目标系统,即可开始扫描。
-
使用 OpenVAS
:OpenVAS 是一个开源的漏洞扫描器,功能强大且免费。安装并配置 OpenVAS 后,创建扫描任务,指定要扫描的目标系统,即可开始扫描。
5.4 安全策略审查
定期审查系统的安全策略,确保所有安全措施都得到了正确实施。可以从以下几个方面进行审查:
-
用户账户权限
:检查用户账户的权限是否合理,是否存在过高或过低的权限。
-
防火墙规则
:检查防火墙规则是否正确配置,是否允许不必要的网络流量通过。
-
文件和目录权限
:检查文件和目录的权限是否合理,是否存在可被非法访问的文件和目录。
6. 安全应急处理流程
6.1 发现安全事件
通过系统日志审查、网络流量监控等方式发现潜在的安全事件。当发现异常的登录尝试、网络攻击等情况时,应立即采取措施。
6.2 评估安全事件影响
评估安全事件对系统的影响程度,确定事件的严重级别。可以从以下几个方面进行评估:
-
数据损失
:是否有重要数据被泄露或损坏。
-
系统可用性
:系统是否能够正常运行,是否受到了攻击的影响。
-
业务连续性
:安全事件是否影响了业务的正常开展。
6.3 隔离受影响系统
当发现安全事件后,应立即隔离受影响的系统,防止事件进一步扩散。可以通过断开网络连接、关闭相关服务等方式进行隔离。
6.4 收集证据
在处理安全事件的过程中,应收集相关的证据,以便后续的调查和分析。可以收集的证据包括系统日志、网络数据包、文件备份等。
6.5 恢复系统
在收集完证据后,应尽快恢复受影响的系统。可以通过以下几个步骤进行恢复:
-
修复安全漏洞
:根据安全事件的原因,修复系统中存在的安全漏洞。
-
恢复数据
:使用备份数据恢复受影响的系统。
-
重新配置系统
:重新配置系统的安全策略,确保系统的安全性。
6.6 总结经验教训
在处理完安全事件后,应总结经验教训,制定相应的防范措施,防止类似事件的再次发生。
graph LR
A[发现安全事件] --> B[评估影响]
B --> C[隔离系统]
C --> D[收集证据]
D --> E[修复漏洞]
E --> F[恢复数据]
F --> G[重新配置系统]
G --> H[总结经验教训]
7. 安全加固建议
7.1 用户账户管理
- 定期清理无用账户 :删除不再使用的用户账户,减少潜在的安全风险。
-
设置强密码策略
:要求用户使用强密码,并定期更换密码。可以通过修改
/etc/login.defs文件来设置密码复杂度要求。 - 限制用户权限 :根据用户的工作职责,合理分配用户权限,避免用户拥有过高的权限。
7.2 网络安全配置
-
配置防火墙
:使用
iptables或ufw等工具配置防火墙,只允许必要的网络流量通过。例如,使用ufw开启 SSH 服务:
ufw allow ssh
-
禁用不必要的服务
:关闭系统中不必要的服务,减少攻击面。可以使用
systemctl命令来管理服务的启动和停止,例如:
systemctl disable telnet
- 使用加密通信 :在网络通信中使用加密协议,如 SSH、SSL/TLS 等,保护数据的安全性。
7.3 软件更新管理
-
定期更新系统软件
:及时安装系统的安全补丁和更新,修复已知的安全漏洞。可以使用
apt或yum等包管理工具来更新软件,例如:
apt update
apt upgrade
- 使用安全的软件源 :确保从官方或可信的软件源下载和安装软件,避免下载和安装来自不可信来源的软件。
7.4 数据备份与恢复
-
定期备份重要数据
:定期对系统中的重要数据进行备份,以防止数据丢失。可以使用
rsync或tar等工具进行数据备份,例如:
rsync -avz /data /backup
- 测试数据恢复能力 :定期测试数据恢复的能力,确保在需要时能够顺利恢复数据。
8. 总结
在 Linux 系统的使用过程中,故障排查和安全保障是至关重要的工作。通过掌握系统性能问题排查的方法,如使用基本工具监控进程、了解虚拟内存管理机制、判断内存不足情况并采取相应的处理措施,可以确保系统的稳定运行。同时,实施基本的安全措施,包括物理安全、数据安全、用户账户保护和软件安全,以及持续的安全监控、审计和审查,可以有效防范各种安全威胁。
在实际操作中,要根据系统的具体情况和需求,灵活运用各种技巧和方法。建立完善的安全策略和应急处理流程,定期进行安全评估和漏洞修复,不断提升系统的安全性和可靠性。通过以上的努力,可以为 Linux 系统的稳定运行和数据安全提供坚实的保障。
| 安全方面 | 具体措施 |
|---|---|
| 用户账户管理 | 定期清理无用账户、设置强密码策略、限制用户权限 |
| 网络安全配置 | 配置防火墙、禁用不必要服务、使用加密通信 |
| 软件更新管理 | 定期更新系统软件、使用安全软件源 |
| 数据备份与恢复 | 定期备份重要数据、测试数据恢复能力 |
通过遵循这些建议和流程,能够更好地管理和保护 Linux 系统,使其在复杂的网络环境中保持稳定和安全。
超级会员免费看
2023

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



