Linux安全基础:安全模型、命名空间与控制组
各位同学,今天我们聊点硬核的。Linux安全机制,说白了就是一套「谁可以做什么」的规则。我在车载系统里摸爬滚打这么多年,发现很多问题都出在安全配置没搞明白上。你想想看,车机系统要是被攻破了,那可不是闹着玩的。
一、DAC:自主访问控制
DAC,全称Discretionary Access Control。翻译过来就是「自主访问控制」。什么意思呢?就是文件的主人说了算。
每个文件都有三组权限:owner、group、others。每组又有r、w、x三个位。这是Linux最基础的防护墙。我记得刚入行时,有个同事把系统关键文件的权限设成了777,结果被恶意脚本改了配置,整台车机都瘫了。嗯,从那以后我对权限设置就特别敏感。
核心要点:DAC的缺点是「太自主」了。root用户拥有至高无上的权限,一旦被提权,整个系统就裸奔了。
二、MAC:强制访问控制
MAC,Mandatory Access Control。强制访问控制。这玩意儿比DAC严格多了。系统管理员定好规则,谁都不能违反,包括root。
车载系统里,我强烈建议用SELinux或AppArmor。为什么?因为车机环境复杂,一个漏洞就可能让攻击者拿到root权限。有了MAC,就算他拿到root,也干不了越界的事。
我在项目中遇到过一件事:某款车机的中控屏应用被植入恶意代码,攻击者想通过它去修改刹车控制器的配置文件。幸好我们配了SELinux策略,直接拦截了这次跨域访问。你想想看,要是没有MAC,后果不堪设想。
我的建议:车载Linux一定要启用MAC。别嫌配置麻烦,这是最后一道防线。
三、Capabilities:细粒度权限控制
传统的Linux权限太粗糙了。要么是普通用户,啥特权没有;要么是root,啥都能干。这中间缺了点什么?缺的就是Capabilities。
Capabilities把root的超级权限拆成了一个个小单元。比如CAP_NET_RAW允许你使用原始套接字,CAP_SYS_TIME允许你修改系统时间。每个能力都是独立的。
我习惯这样用:给某个进程只分配它需要的能力,而不是直接给root权限。比如一个网络监控进程,只需要CAP_NET_ADMIN就够了,没必要给它全部权限。
# 给一个二进制文件添加特定能力
setcap cap_net_admin+ep /usr/bin/my_network_monitor
# 查看能力
getcap /usr/bin/my_network_monitor
注意:Capabilities不是万能的。有些操作需要多个能力组合,配置时要仔细阅读文档。我曾经因为漏配了一个能力,导致某个服务启动失败,排查了半天。
四、命名空间(Namespace):隔离的艺术
命名空间是Linux容器技术的基石。它让每个进程组都以为自己独占整个系统。说白了,就是「障眼法」。
常用的命名空间有这些:
| 命名空间类型 | 隔离内容 | 车载场景举例 |
|---|---|---|
| PID | 进程ID | 每个车载应用看到自己的进程树 |
| Network | 网络栈 | 娱乐系统和ADAS系统网络隔离 |
| Mount | 文件系统挂载点 | 每个容器有自己的文件系统视图 |
| User | 用户和组ID | 容器内root映射到宿主机普通用户 |
我记得在做一个多屏互动的车载项目时,需要让仪表盘和中控屏的应用完全隔离。用Network命名空间把它们分开,两个系统各走各的网络栈,互不干扰。效果非常好。
关键点:命名空间不是安全机制,但它为安全隔离提供了基础。配合Capabilities使用,效果更佳。
五、控制组(Cgroups):资源的管家
Cgroups,全称Control Groups。它管的是资源分配:CPU、内存、磁盘IO、网络带宽等等。
车载系统里,资源是有限的。你不能让一个娱乐应用把CPU吃满,导致导航卡顿。Cgroups就是干这个的。
我习惯这样配置:给ADAS系统分配最高的CPU权重,给娱乐系统分配中等,给后台更新服务分配最低。这样就算系统负载高,关键功能也不会受影响。
# 创建一个控制组
mkdir /sys/fs/cgroup/cpu/adas
echo 1000 > /sys/fs/cgroup/cpu/adas/cpu.shares
# 把ADAS进程加入控制组
echo 1234 > /sys/fs/cgroup/cpu/adas/cgroup.procs
避坑指南:我曾经遇到过一个问题:某个服务的内存泄漏导致OOM Killer把关键进程杀了。后来我用Cgroups限制了内存上限,并配置了合适的OOM优先级,问题就解决了。
六、综合运用:车载场景实战
好了,知识点讲完了。咱们看看怎么把这些东西组合起来用。
一个典型的车载安全架构应该是这样的:
- 基础隔离:用命名空间把不同安全等级的应用隔离开。比如娱乐系统和车辆控制系统必须分开。
- 权限控制:用DAC做基础权限管理,用MAC做强制访问控制,用Capabilities做细粒度权限。
- 资源保障:用Cgroups确保关键服务有足够的资源,防止非关键服务拖垮系统。
你想想看,这套组合拳打下来,攻击者想突破就难了。他得先过命名空间的隔离,再绕过MAC策略,还得突破Capabilities的限制。每一步都不容易。
最后提醒:安全配置不是一劳永逸的。系统更新、应用升级都可能引入新的安全风险。定期审查安全策略,及时调整,这才是长久之计。
好了,这一章就到这里。下一章我们聊聊可信启动,那是从硬件层面保证系统完整性的技术。敬请期待。
公众号:蓝海资料掘金营,微信deep3321