面试题合集

6922 字
35 分钟
面试题合集

1. Linux 面试题#

1. 如何实时查看所有的系统内存进程?如果想把内存占用前十的进程保存到文件里,应如何操作?#

Terminal window
ps aux --sort=-%mem | head -10 > mem_top10.log

ps aux 用于列出所有用户的全部进程,a 表示终端的所有进程,x 包含无终端的后台进程,—sort=-%mem 按内存使用率降序,减号表示从高到底。head -10 指的是前10行,最后用重定向保存到文件即可。

2. 如果有一个大文件需要快速提取出包含 error 的最后100行,如何操作?#

Terminal window
tail -n 10000 logs | grep "error" | tail -n 100`

先取10000行缩小范围,使用 -n 取出最后的10000行,避免程序加载整个大文件运行,可以大幅提升效率。

3. 如何新建用户配置 sudoers 达到无需 sudo 即可能重启 Nginx 的权限?#

Terminal window
myuser ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx

使用 visudo 编辑 sudoer,本质上是需要是将:sudo systemctl restart nginx 中,去掉 sudo 也可以执行,所以只需要使用 user = ALL=(ALL) NOPASSWD 后添加指令即可。

4. 如果进程处于僵尸状态,且kill -9 杀不掉,要如何操作?#

僵尸进程指的是没有被父进程回收的一些子进程,通常使用 kill -9 是杀不掉的。

Terminal window
ps aux | grep 找到父进程ID。杀掉父进程就可以了,如果是系统进程(例如 systemd 这种)只能重启系统回收。`

5. 如何监控磁盘整体使用率?#

Terminal window
watch -n 5 du -sh /var/log

使用 watch ,每隔五秒刷新一次,这里的话就是使用 du 检查 logs 下的磁盘占用。

6. 域名解析炸了如何排查#

/etc/resolv.conf 检查 DNS配置是否正确。

7*. 一些常用的包名#

httpd:Apache
MySQL:mariadb-server
Nginx:nginx
PHP:php
FTP:vsftpd

有一些名字它加了 d,d 全称就是 deamon 的缩写,意思是守护进程。在后台中持续运行。 守护进程:在后台长期运行,不需要用户直接交互的服务进程,例如 web服务,数据库这些就叫守护进程。

8. 如何实时查看 /logs/message 的最新内容?#

Terminal window
tail -f /var/log/message

9. 如何从本地上传文件至远程服务器?以及如何下载?#

Terminal window
# 上传
scp uploadfile root@192.168.1.1:/tmp
# 下载 增加 -r 参数
scp -r root@192.168.1.1:/var/downloadfile ~/download

10. 如何创建用户并设置密码#

Terminal window
# 创建用户
useradd newuser
# 设置密码(两种方式)
passwd newuser
echo "123456" | passwd --stdin newsuer

11. 如何快速强制删除用户,且包含 home 目录#

Terminal window
userdel -r user

12. 如何将文件的所有者改成 user 用户?所属组改成 user 组?#

Terminal window
chown user:user file

13. chmod是什么?#

用于修改所有者的权限,三个数字的权限符号分别表示:所有者、同组者、其他用户。 rwx 对应 421,对所有者加执行权限。

14. 如果要让 text.sh 脚本在任何目录下都能直接执行,不用写完整路径应如何做?#

直接放到 /usr/local/bin 目录下,或者是加到 PATH 变量里。

15. kill 的常见参数如何?#

Terminal window
kill -1 # 重新加载配置
kill -15 # 正常终止进程
kill -9 # 强制终止进程

16. 如何查看CPU的占用率?#

Terminal window
top # 打开CPU查看占用率

p # 按一下 P 继续拿降序排序

Terminal window
ps aux --sort=-%cpu

17. 如何后台运行一个脚本?如何关闭这种后台脚本?#

Terminal window
nohup run.sh
ps aux | grep run.sh
kill run.sh

18*. 如何查看当前系统放行的所有端口?netstat 的用法详解#

Terminal window
# 查看系统当前的放行端口
netstat -tulnp
Terminal window
# 查看 8080 端口的方法
netstat -tulnp | grep :8080

参数解析

Terminal window
-t # TCP
-u # UDP
-l # 只列出处于 LISTEN 监听状态 的端口
-n # 不解析域名、不解析端口别名,直接显示 IP + 数字端口
-p # 显示占用该端口的进程 PID 和程序名

19. 如何配置定时任务?#

crontab 配置定时脚本。 例如:如果需要写一个 shell,定时做日志备份。 技术栈:find + tar + crontab 那么就用 find 找到符合状态的日志,使用 tar 进行打包。而定时执行 Shell 的方法就是使用 crontab。

Terminal window
* * * * * command
└── 星期几(0-7,0和7都表示周日)
└──── 月份(1-12)
└────── 日(1-31)
└──────── 小时(0-23)
└────────── 分钟(0-59)

20. tail 是什么,它常用的使用场景有哪些?语法如何?#

tail 是一个非常实用的命令行工具,主要用于查看文件末尾的内容。在日常运维和开发中,它尤其适合处理日志文件。常用参数如下:

Terminal window
# 显示文件末尾指定的行数(默认是10行)。
tail -n 50 access.log
# 实时跟踪文件新增内容。通常在排查问题时保持这个命令运行,观察新日志。
tail -f /var/log/syslog
# 功能与 -f 类似,但如果文件被重命名或轮转(比如日志切割),-F 仍然能继续跟踪新的同名文件。
tail -F messages
# 如果同时查看多个文件,可以隐藏文件名头,让输出更干净。
tail -q file1.txt file2.txt
# 无论查看几个文件,都强制显示文件名头。
tail -v access.log error.log
# 显示文件末尾指定的字节数,通常用得较少。
tail -c 1000 data.log

21. iptables怎么设置只放行某个ip的访问?#

记住思路就好,首先要把所有的流量访问全部drop,其次建立一个优先级比它高的规则放行指定 tcp ip 的访问。

Terminal window
# 1. 清空现有规则(谨慎操作,建议在测试环境或通过带外管理执行)
iptables -F
# 2. 设置默认策略:拒绝所有入站流量
iptables -P INPUT DROP
# 3. 放行回环接口(127.0.0.1),避免本地服务出问题
iptables -A INPUT -i lo -j ACCEPT
# 4. 放行已建立连接的相关流量(重要!否则已建立的连接会被中断)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 5. 放行指定 IP 的访问(以 22 端口为例)
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT
# 6. (可选)放行 ICMP,允许 ping
iptables -A INPUT -p icmp -j ACCEPT

22. 如何查看文件的绝对路径?#

Terminal window
realpath filename
# 简单又直接

23. 如何查看文件的所有者?#

Terminal window
ls -l
# 当然,如果你需要查看指定文件的话,加一个 grep 就好了
ls -l | grep log.log

24. 如何查看系统运行了多久?#

Terminal window
uptime
# 简单直接
uptime 三个 load average 含义

三个数值依次代表:最近 1 分钟、5 分钟、15 分钟的系统平均负载

25. 监控 CPU 的 top 指令详解#

1. Linux 平均负载(load average)是什么?三个数值高低分别代表什么情况?#

load average 反映的是系统在特定时间段内的平均活跃进程数,包括正在运行和等待CPU的进程。对于多核系统,需要将数值除以核心数来理解。例如,4核系统负载为4.0,相当于每个核心跑满。通常会对比1分钟、5分钟和15分钟三个数值,来判断负载趋势。如果负载持续高于核心数,会用 top 或 ps 定位具体进程,判断是CPU瓶颈还是IO瓶颈,再针对性处理。

2. top 的使用规则#

按下快捷键 数字 1,就能展开看到每一颗 CPU 核心的单独使用率,再按一次 1 又会合并回总 CPU 视图。

3. 快捷键总结#

P:按 CPU 使用率排序 M:按内存使用率排序 K:输入 PID 杀死指定进程 Q:退出 top

4. %us、%sy、%id、%wa 分别代表什么含义?#

%us(用户空间 CPU 占用率):好比 厨师实际在做菜的时间。这是应用程序(Python、Nginx、MySQL)真正在执行计算指令的时间。数值高通常意味着你的应用逻辑本身很复杂,是计算密集型任务,CPU 正在卖力工作,这是硬件瓶颈的信号。

%sy(内核空间 CPU 占用率):好比 厨师在整理厨具、看菜单、调度任务的时间。这是操作系统内核在管理硬件资源、处理系统调用的时间。数值高可能意味着程序在进行大量的文件读写、网络通信或进程切换。如果这个值持续偏高,通常说明系统架构存在优化空间。

%id(空闲 CPU):好比 厨师在等菜、闲着发呆的时间。空闲时间越多越好,说明服务器有余力。

%wa(IO 等待 CPU 占用率):好比 厨师在等配菜员切菜的时间。CPU 已经发出了读写磁盘的指令,但迟迟等不到数据返回,此时 CPU 本身是空闲的,但处于等待状态。高 %wa 通常意味着磁盘速度太慢,或者内存不足导致频繁的硬盘交换。

记忆方法:us(正在占用)、system(内核调度)、id(空闲时段)、wating(IO等待)

5. 进程状态 R、S、D、Z、T 分别代表什么?#

Running:正在运行或等待CPU调度的进程。进程要么正在CPU上执行,要么在运行队列中等待。 Sleeping:可中断睡眠。进程在等待某个事件完成(如用户输入、网络请求、文件读取),可以被信号中断唤醒。这是大多数进程的常见状态。 D - Uninterruptible Sleep:不可中断睡眠。进程在等待硬件响应(如磁盘I/O),无法被信号中断。这种状态常见于磁盘读写操作,如果大量出现D状态进程,通常意味着I/O存在瓶颈。 Zombie:僵尸进程:进程已经终止,但父进程尚未调用wait()来获取其退出状态。僵尸进程不消耗资源,但会占用进程表条目。如果数量过多,需要检查父进程是否正常回收。 T - Stopped:停止或跟踪状态。进程被暂停(如收到SIGSTOP或SIGTSTP信号),或正在被调试器追踪(如gdb)。

26. 什么是软链接,什么是硬链接?区别如何?#

硬链接本质上是同一个文件的不同名字,删除原文件不影响链接,但不能跨分区也不能指向目录。软链接是一个独立的文件,指向目标路径,可以跨分区也可以指向目录,但原文件被删了就会失效。一般用软链接来做快捷方式或版本切换,硬链接通常用于备份或引用同一份数据。

软链接: 程序多版本切换(比如 python3、python 软链接切换版本) 目录路径简化、挂载路径迁移兼容 方便部署配置、日志路径统一管理

硬链接: 简单本地文件备份,删一个入口数据仍保留 防止误删重要文件,多入口保护

27. 简述软 RAID 和硬 RAID 的区别,各自优缺点?#

简单说,软RAID靠CPU和操作系统算,硬RAID靠专用的RAID卡算。

⚙️ 软RAID (Software RAID):是通过操作系统(如Windows、Linux)和CPU来管理磁盘阵列的。 优点: 成本低:无需购买独立的RAID卡,使用主板上的SATA接口即可。 灵活性高:与操作系统结合紧密,管理和配置相对简单。可以比较方便地将磁盘阵列迁移到另一台兼容的系统上。 无厂商绑定:不依赖特定品牌的硬件,减少了被特定厂商锁定的风险。

缺点: 消耗CPU资源:RAID的计算任务会占用服务器的CPU和内存,在高负载下可能影响其他业务性能。 依赖操作系统:如果操作系统崩溃或配置错误,RAID的管理和数据恢复会变得复杂。 系统盘限制:在一些操作系统中,软RAID可能无法保护系统启动盘。 适用场景:适合预算有限、CPU算力充裕的环境,如个人电脑、实验室、中小型企业(SMB)服务器,以及对灵活性要求较高的场景。

🖥️ 硬RAID (Hardware RAID):通过独立的RAID控制器(RAID卡)来管理磁盘,这个控制器拥有自己的处理器、内存和缓存。 优点: 性能好:RAID计算由专用处理器完成,不占用主机CPU资源,性能表现更稳定。高端RAID卡的缓存能进一步提升性能。 更可靠:独立于操作系统运行,兼容性更好。部分RAID卡带有电池或电容,能在断电时保护缓存中的数据。 支持热插拔:更换故障硬盘更方便。

缺点: 成本高:需要额外购买独立的RAID卡,增加了硬件成本。 配置复杂:设置和管理通常需要专业技能。 存在厂商锁定:如果RAID卡损坏,可能需要更换同型号的卡才能恢复数据。 适用场景:适合对性能和数据安全要求严苛的生产环境,如大型企业服务器、数据库服务器等。

✨ 总结 软RAID:是一个性价比高、灵活的软件方案。硬RAID:是一个性能强劲、可靠的硬件方案。

28. RAID0、RAID1、RAID5、RAID10 各自原理、磁盘数量要求、优缺点、适用场景?#

RAID 0(条带化):数据被分成块,交替写入多块磁盘,并行读写。 磁盘数量:至少 2 块(可更多)。 优点:读写性能最高,容量利用率 100%。 缺点:没有任何冗余,一块磁盘损坏,所有数据全部丢失。 场景:数据丢失无所谓、追求极致速度的场景(如视频编辑缓存、游戏盘)。

RAID 1(镜像):数据同时写入两块磁盘,互为镜像。写一次同时写两份,读可以从两块盘同时读。 磁盘数量:至少 2 块(通常只能 2 块)。 优点:数据冗余最高,一块盘坏不影响数据,读性能有所提升。 缺点:容量利用率只有 50%(2块盘只能用到1块的容量),写入性能稍有下降。 场景:对数据安全性要求极高、数据量不大的场景(如数据库日志盘、系统盘)。

RAID 5(条带化+奇偶校验):数据条带化分布,同时插入一份奇偶校验数据。校验数据分布在所有磁盘上,可以容忍一块磁盘损坏。 磁盘数量:至少 3 块(可更多)。 优点:兼顾性能、容量和安全,容量利用率 (n-1)/n,坏一块盘时数据仍可用。 缺点:写入性能较差(每次写需要计算校验数据并写入),重建恢复过程比较耗时。 场景:企业通用存储,适合大多数生产环境(文件服务器、应用服务器)。

RAID 10(RAID 1 + RAID 0):先做 RAID 1(镜像),再将多个 RAID 1 组合成 RAID 0(条带化)。它集合了 RAID 0 的速度和 RAID 1 的冗余。 磁盘数量:至少 4 块(且必须为偶数)。 优点:读性能极高,写性能优秀,容错能力好(每一组镜像中可坏一块)。 缺点:成本高,容量利用率只有 50%(4块盘实际可用容量为2块)。 场景:对性能和安全性要求都很高的核心数据库、高并发应用服务器。

29. LVM是什么?#

LVM 逻辑卷管理器(Logical Volume Manager),是 Linux 下对磁盘资源进行弹性管理的机制,在物理磁盘分区之上抽象一层逻辑层,不再受原有分区大小限制。以下为优点: 可以在线扩容卷空间,不用重装系统、不用迁移数据; 支持后期缩减逻辑卷(谨慎操作); 多块硬盘整合为一个大存储池,灵活分配空间; 业务数据增长时按需扩容,适配业务长期扩容需求。

30. 什么是缓冲区(buffer)和缓存(cache)?free 命令里怎么区分?#

Buffer 是磁盘写入时的暂存区,用于合并写操作;Cache 是文件的读缓存,用于加速重复读取。在 free 命令中,它们合在一起显示为 buff/cache,但 available 才是真正可用的内存,因为系统在需要时会自动释放一部分缓存。如果需要查看具体值,可以看 /proc/meminfo。

Buffer(缓冲区): 存储内容:存储的是元数据,主要是文件系统的数据块、目录信息等。 作用:减少磁盘的随机读写。例如,当你写入数据时,数据先进入Buffer,积累到一定量再一次性写入磁盘。 通俗理解:像是”快递单”上的信息,帮助系统快速找到和整理磁盘上的文件。

Cache(缓存): 存储内容:存储的是实际数据,是文件的正文内容。

作用:减少磁盘的重复读取。当你多次打开同一个文件时,缓存可以避免反复从硬盘读取。 通俗理解:像是用过的”实物快递”,最近使用过的文件内容被暂存起来,方便下次直接取用。

31. Linux 系统开机启动流程#

BIOS/UEFI 自检 -> 加载引导程序 -> 加载内核 -> 执行第一个init进程 -> 启动依赖服务 -> 显示登陆界面

32. sed 和 awk 有什么区别#

sed 主要用于文本内容的替换和编辑,适合批量修改配置文件;awk 主要用于字段提取和分析,适合处理结构化的日志或数据文件。比如,常用 sed -i 批量替换配置文件中的参数,用 awk 提取 Nginx 日志中的特定字段做统计。

33. 孤儿进程是什么?#

孤儿进程是指父进程已经退出,但子进程仍在运行的进程。系统会自动将其父进程设为init(PID 1),由init负责回收其资源,因此孤儿进程本身不会造成资源泄漏。与僵尸进程不同,孤儿进程是活的,不需要特殊处理

34. 如何调整优先级?#

使用 nice 指令调整指定 PID 的优先级。

35. 抓包的指令是什么#

tcpdump 来抓取来自任何网络包。

3. Git、Jenkins、K8s、Docker 面试题#

4. Python 面试题#

5. Django、Flask 面试题#

6. Windows AD面试题#

7. REST API 面试题#

8. TCP/IP 常见网络协议面试题#

1. 简述 TCP 和 UDP 的区别,各自适用场景?#

文件传输多用 TCP,视频直播、语音通话多用 UDP

TCP 面向连接 通信前三次握手建立连接,传输结束四次挥手断开; 可靠传输:有确认应答、重传机制、流量控制、拥塞控制,数据不丢包、不乱序。 缺点:开销大,速度稍慢。 适用场景: 文件传输、SSH 远程登录、网页 HTTP/HTTPS、数据库连接、FTP、邮件,要求数据完整准确不能出错的业务。

UDP 无连接 收发直接发包,不用建立连接,没有重传、校验纠错机制; 不可靠,可能丢包、乱序;优点:头部小、延迟极低、收发效率高。 适用场景: 直播、语音视频通话、游戏实时数据包、DNS 查询,能容忍少量丢包、优先低延迟的场景。

2. TCP 的三次握手与四次挥手的报文单词是什么?#

SYN:建立连接同步 ACK:确认收到报文 FIN:请求断开连接 RST:异常强制断连

3. TIME_WAIT 是做什么的?#

TIME_WAIT 是主动关闭方在发送最后一个 ACK 后进入的状态,持续 2MSL,默认通常是 60 秒。它的作用是确保最后的 ACK 能被对方收到,以及让网络中残留的旧数据包在超时后失效,避免干扰后续的新连接。

4. HTTP 和 HTTPS 的区别如何?它们是如何工作的?#

HTTP 是一种基于 TCP 的应用层协议,客户端发送请求,服务器返回响应。每个请求报文包含请求方法、路径和头部信息,响应报文包含状态码和头部信息。数据在传输前会经过 TCP 分片、IP 封装、链路层成帧,最终在网络中传输。HTTPS 在 HTTP 和 TCP 之间加入了 TLS/SSL 加密层。

一次完整的 HTTP 请求流程如下: 域名解析:客户端通过 DNS 将域名解析为服务器的 IP 地址。 建立 TCP 连接:客户端与服务器进行三次握手,建立 TCP 连接(默认端口 80 或 443)。 发送 HTTP 请求:客户端发送 HTTP 请求报文,包含: 请求行:方法(GET/POST)、路径、协议版本。 请求头:Host、User-Agent、Accept、Cookie 等。 请求体(可选):POST、PUT 等请求的数据内容。 服务器处理请求:服务器接收到请求后,解析报文,定位资源,执行业务逻辑(如查询数据库、调用后端服务)。

返回 HTTP 响应:服务器发送响应报文,包含: 状态行:协议版本、状态码(200、404、500 等)、状态描述。 响应头:Content-Type、Content-Length、Set-Cookie 等。 响应体(可选):请求的资源内容(如 HTML、JSON、图片)。 关闭或复用连接:如果是非持久连接(HTTP/1.0),服务器主动关闭 TCP 连接;如果是持久连接(HTTP/1.1 默认),连接保持打开,以便后续请求复用。

5. GET 请求与 POST 请求有什么不同?#

GET:设计用于查询、获取数据,理论上不应修改服务器数据,是安全、幂等请求(多次请求结果一致) POST:设计用于提交数据、新增 / 修改资源,提交表单、上传数据,非幂等,多次提交可能产生多条数据

6. Nginx 反向代理和正向代理的区别,反向代理有什么作用?#

1. 正向代理#

代理客户端,隐藏真实访问用户;服务端只看到代理 IP,无法获知原始客户端是谁。 典型场景:VPN、翻墙代理、局域网统一上网代理。 访问链路:客户端 → 正向代理服务器 → 目标网站

2. 反向代理#

代理后端服务器集群,隐藏后端真实业务节点;客户端只访问代理地址,感知不到后端多台机器。 典型场景:Nginx 反向代理、负载均衡、统一入口、SSL 终结。 访问链路:客户端 → 反向代理 (Nginx) → 后端应用服务器

9. 交换机配置常用指令、与常见面试题#

EX. 运维开发等相关问题#

1. 一般如何写批量 SSH 脚本的,作用如何?#

批量SSH脚本主要解决多台服务器重复操作效率低、人工巡检容易出错的问题。

使用Python+paramiko库实现,把所有服务器IP、账号存在配置文件里,脚本循环建立远程连接,批量执行磁盘巡检、日志查看、数据库备份等指令。

同时做了异常捕获和执行日志归档,检测到磁盘爆满、服务报错会输出告警。之前项目里几十台服务器,原本手动巡检要1个多小时,脚本执行只需要几分钟,后续还对接Jenkins配置定时任务,实现全自动日常巡检。

# Paramiko Eg.
import paramiko
def execute_ssh(host, user, key_path, command):
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=host, username=user, key_filename=key_path)
stdin, stdout, stderr = client.exec_command(command)
output = stdout.read().decode()
client.close()
return output

2. 一般来说,常用的运维 Python 库都有哪些?#

系统监控与资源管理:

psutil:堪称运维的”瑞士军刀”,跨平台,能轻松获取 CPU、内存、磁盘、网络等系统信息。相当于在 Python 里集成了 ps、top、netstat 等命令。

subprocess:Python 自带的标准库,用于执行系统命令并获取输出,是编写自动化脚本的基础。

shutil 和 os / pathlib:同样是标准库,shutil 用于高级文件操作(复制、移动、删除),os 和 pathlib 负责目录和路径管理。

🤖 远程连接与自动化

paramiko:SSH 连接的底层实现,可以让你在 Python 中直接建立 SSH 连接。所有远程操作的基础,比如批量登录服务器执行命令或传输文件。

fabric:在 paramiko 之上进行了更高层的封装,能让你用更简洁的代码执行远程命令和部署任务。

pexpect:用于自动化那些需要交互的命令行程序(如 ssh, ftp, telnet),可以模拟输入密码等交互过程。

📊 配置、日志与数据处理

logging:Python 自带的日志模块,用于记录脚本运行状态,是运维脚本的标配。

PyYAML:处理 YAML 格式的配置文件,在解析 Kubernetes、Ansible 等工具的配置时非常常用。

pandas:数据分析库,当需要从大量监控数据或日志中提取、清洗、分析信息并生成报表时,这个库非常高效。

re:正则表达式库,用于从非结构化的文本(如日志)中提取特定信息。

🌐 网络与 API 交互

requests:处理 HTTP 请求的标准库,用来调用各种 REST API。无论是调用云厂商 API 还是发送告警,都离不开它。

socket:进行底层网络操作,比如编写简单的端口扫描或状态检测脚本。

dnspython:一个 DNS 工具包,可用于实现 DNS 解析等功能。

IPy:辅助进行 IP 地址规划和管理。

🐳 容器与编排

docker (或 docker-py):官方 Docker SDK,用于在 Python 中管理容器、镜像等。

kubernetes:官方 Kubernetes 客户端,用于管理 Pod、Service 等 K8s 资源。

🚀 任务调度与并发

schedule:一个轻量级的定时任务调度库,可以在 Python 脚本内部实现类似 crontab 的功能。

threading / multiprocessing:Python 自带的多线程和多进程库,用于提升批量任务的处理效率。

🛠️ DevOps 专用与自动化框架

Ansible:一个完整的自动化工具,通过 SSH 执行任务。你甚至可以用 ansible-runner 在 Python 中直接调用它的 Playbook。

EX+:最近的一些运维可能会用到的知识#

1. CVE-2026-31431 “Copy Fail”漏洞防御#

禁用 authencesn、authenc、esp4 和 esp6 这几个内核模块,确实是针对 CVE-2026-31431(Copy Fail)漏洞的一种有效临时缓解方案。这些模块,尤其是 authencesn,与漏洞利用密切相关。

📝 漏洞修复操作步骤(临时缓解方案)

第一步:创建配置文件,禁用模块#

首先,需要创建一个配置文件,让系统在启动时就不再加载这些有漏洞的模块。 使用 root 权限创建一个新的配置文件,例如 /etc/modprobe.d/disable-cve-2026-31431.conf:

Terminal window
sudo vi /etc/modprobe.d/disable-cve-2026-31431.conf`

在文件中写入以下内容,以禁用 authencesn、authenc、esp4 和 esp6 这四个模块:

Terminal window
install authencesn /bin/falseinstall authenc /bin/falseinstall esp4 /bin/falseinstall esp6 /bin/false

命令解释:install 模块名 /bin/false 是告诉系统,当有程序试图加载这个模块时,执行 /bin/false 命令(该命令会立即返回失败),从而阻止模块加载。

第二步:卸载当前已加载的模块#

配置文件创建后,需要立即卸载当前已经加载到内核中的这些模块。

Terminal window
sudo rmmod authencesn authenc esp4 esp6 2>/dev/null || true

命令解释:rmmod 用于从运行中的内核卸载模块。2>/dev/null || true 的作用是忽略可能出现的”模块不存在”等错误信息,确保命令在任何情况下都能顺利执行。

第三步:验证修复是否生效#

最后,检查一下模块是否已被成功禁用和卸载。

Terminal window
lsmod | grep -E "authencesn|authenc|esp4|esp6"

如果命令没有任何输出,说明相关模块已经成功卸载,并且由于配置文件的设置,系统重启后也不会再加载它们。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
面试题合集
https://springtsuki.xucjno.com/posts/springtsuki/interview_linux/
作者
SpringTsuki
发布于
2026-07-04
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
SpringTsuki
你好,我是浅月。
公告
浅月的开发小窝!欢迎你来到这里!
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
17
分类
8
标签
16
总字数
19,430
运行时长
0
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.13.5
文章许可
CC BY-NC-SA 4.0

文章目录