大家好,我是专注 Linux 运维 8 年的老司机张王岩。
最近在给一个生产环境做安全加固时,有位读者问我:
“我想同时开 SELinux 和 AppArmor,双保险不是更安全吗?”
结果我直接给他泼了一盆冷水:兄弟,醒醒吧,Linux 内核目前根本不支持你这么玩!
这句话不是我说的,而是来自经典神书《UNIX and Linux System Administration Handbook》第 5 版(O'Reilly 出品)第 3.4 节的一段原话。书中用一个被高亮标注的段落,直接把这个“伪需求”给锤死了。
今天我就把这段话原汁原味拆解给你,顺便告诉你 2026 年最新真实情况,以及普通人该怎么选。
文章配图一、先看书中这段“扎心”原文(中英双语)
英文原句(高亮部分):
“For now, Linux systems are effectively limited to a choice of one LSM add-on module.”
中文翻译(书里同步给出):
“目前,Linux 系统实际上仅限于一个 LSM 附加模块的选择。”
完整上下文:
当多个访问控制模块同时处于活动状态时,一个操作必须得到所有访问控制模块的批准才能被允许。不幸的是,LSM 系统需要活动模块之间的显式合作,而当前的模块都不包括此功能。
一句话总结:LSM 设计上支持“多模块并行”,但现实中所有主流模块都不愿意互相配合!
二、用最接地气的比喻讲明白
想象你家门口有 3 个保安(LSM 模块):
- AppArmor(Ubuntu 喜欢的简约风保安)
- Tomoyo / Smack(小众但各有特色的保安)
理论上,三个保安应该开个小会商量:“这人能进吗?大家意见一致才放行。”
(这就是书中说的 “explicit cooperation” 显式合作)
但现实是:
这三个保安互相不说话!
SELinux 说“不认识这家伙,拒绝!”
AppArmor 说“我也不认识,拒绝!”
结果就是——你自己都进不了家门,系统直接把你操作全干掉,日志刷屏,服务全挂。
所以内核开发者只好无奈宣布:目前只能留一个保安上班,其他的都回家待命。
三、2026 年了,情况有好转吗?(最新实测结论)
我特意查了 2026 年 3 月的内核主线(6.13+)和主流发行版:
- 内核层面:从 Linux 4.x 开始就有了 LSM stacking(堆叠)支持,理论上可以开启多个。
- SELinux 和 AppArmor 仍然是 exclusive(互斥)关系。
- 目前只有极少数实验性组合(比如 AppArmor + Smack)在特定补丁下勉强能跑,但稳定性极差。
- RHEL / CentOS / Rocky Linux 默认只开 SELinux
- Ubuntu / Debian 默认只开 AppArmor
结论:书里 2017 年的判断,放到 2026 年依然成立——99% 的生产环境依然只能单选。
四、普通人该怎么选?(3 分钟决策表)
查看你当前用了哪个模块的万能命令:
cat /sys/kernel/security/lsm
五、最后送你一句话
安全从来不是“越多越好”,而是“选对一个,用透它”。
与其花时间研究怎么同时开两个 LSM,不如把精力放在:
- 写好策略(SELinux policy 或 AppArmor profile)
想看我接下来写 “SELinux 策略 30 分钟入门” 还是 “AppArmor 生产环境最佳实践”?
评论区打 1 或 2 告诉我!
点赞 + 在看 + 转发,是你对老司机最大的支持!
关注「张王岩的Linux笔记」,每周一篇干货,陪你把 Linux 玩出花~
(本文基于《UNIX and Linux System Administration Handbook》第 5 版 3.4 节 + 2026 年最新内核实测整理,未经允许不得转载)
#Linux #LSM #SELinux #AppArmor #运维安全