Linux是一个安全的操作系统,甚至Linux内核也包含许多内置的安全系统,以确保桌面和服务器的安全。
目前有两个子系统是专门为Linux系统的安全而设计的,分别是Security-Enhanced Linux(SELinux)和AppArmor都提供了应用程序之间的隔离,从而限制了黑客可以用来访问系统的攻击平面。
尽管这两个系统具有相同的目标,但它们的工作方式不同。为此,本文简单介绍下SELinux和AppArmor之间的区别差异。
SELinux和AppArmor区别差异比较
了解某些Linux 发行版默认使用AppArmor或者SELinux很重要。例如,RHEL、Rocky Linux、AlmaLinux、CentOS Stream和Fedora都使用SELinux。
另外,Ubuntu、Debian、SUSE Linux Enterprise Server、openSUSE和大多Ubuntu/Debian衍生产品都使用AppArmor。管理员可在基于Ubuntu/Debian发行版上安装SELinux,但不建议在基于RHEL的发行版上安装AppArmor。SELinux不仅仅适用于基于RHEL的发行版。
SELinux比AppArmor更难使用。并且,随着这种复杂性而来的是对进程(即应用程序)如何隔离的更多控制。由于SELinux的高度复杂性,如果一些管理员不熟悉它的工作原理,他们一般会禁用它,从而使系统容易受到攻击。
AppArmor更容易学习和使用,因此很少(如果有的话)被禁用。考虑到这一点,AppArmor通常被认为是更安全的选择。但是,需要更多功能控制的管理员应该使用SELinux。
SELinux为具有安全策略的系统上的应用程序、进程和文件定义了访问控制。这些策略定义了用户可以访问或不能访问的内容。除非为进程、应用程序或目录定义了策略,否则SELinux将不允许访问它。该子系统内置于Linux系统内核中。
AppArmor使用配置文件来确定应用程序需要哪些文件和权限,每个系统还以不同方式使用某些功能。
访问控制
SELinux是使用基于文件标签的安全策略,而AppArmor使用基于路径的策略。AppArmor提供强制访问控制以补充传统的自主访问控制。
多语言/多语言服务
多级安全(MLS)是一种强制执行Bell-LaPadula强制访问模型的安全方案,该模型将用户和进程定义为主体。文件、设备和其它组件称为对象。主体和客体都被赋予一个安全级别,该安全级别定义了主体的许可或客体的分类。
与此同时,多类别安全性(MLS)使用附加到对象并授予主体的类别。MCS最初被添加到SELinux中是为了使其更加用户友好,并使用户能够在不增加系统管理员难度的情况下进行分类。
SELinux同时使用MLS和MCS,而AppArmor两者都不使用。
结构组成
SELinux由几个关键组件组成,主要包括:
- 主题——例如一个进程。
- 访问向量缓存——权限缓存。
- 安全服务器——SELinux核心。
- SELinux策略数据库——包含安全策略。
- 对象——例如文件、套接字、管道或网络接口。
- 内核模块——使SELinux成为可能的模块。
AppArmor使用一些关键组件,主要包括:
- 服务器分析器——扫描端口并确定哪些应用程序正在侦听,该组件还会检测应用程序是否没有配置文件以及服务器是否需要限制它。
- 配置文件生成器——分析应用程序以创建配置文件模板。
- 优化器——记录并收集事件。
策略规则和控制级别
Linux系统可以使用两个SELinux策略:
- Targeted:是对目标进程实施访问控制的默认策略,每个进程都在一个受限域中运行,以显着限制进程对文件的访问。
- MLS。
此外,SELinux还包括三种模式:
- Enforcing:是默认模式,并在整个系统中强制执行加载的安全策略。
- Permissive:是指系统记录所有活动但不拒绝活动。
- Disabled:是在系统上禁用SELinux。
AppArmor在配置文件中使用两种类型的规则:
- Paths:决定了应用程序或进程可以访问哪些文件。
- Capabilities:指定受限进程可以使用的特权。
另外,也有两种AppArmor模式:
- Enforce:意味着策略被强制执行。
- Complain:意味着仅记录违反政策的行为。
SELinux优缺点
SELinux的最大优势在于它的灵活性。SELinux 也被广泛认为是两者中更安全的,因为它与MLS兼容。
同时,SELinux比较难学。不仅命令行工具具有挑战性,而且调试错误消息通常也很困难。在SELinux机器上,即使是从非传统目录提供网站等简单任务也可能是一项挑战。正因为如此,SELinux会让新Linux管理员感到沮丧。
AppArmor优缺点
AppArmor最大优点是使用简单。这通常是管理员选择基于Ubuntu的发行版而不是基于RHEL的发行版的原因之一。虽然AppArmor可能无法提供SELinux的控制级别,但它提供了更多的易用性。
由于这种简单性,AppArmor几乎没有提供SELinux那样的灵活性。除此之外,SELinux提供了比AppArmor更多级别的控制。AppArmor的另一个缺点是它会增加操作系统的额外启动时间,而SELinux则不会。
可以通过下表格对比看看二者之间的主要特性区别:
特征 | SELinux | AppArmor |
访问控制 | 使用基于文件标签的安全策略。 | 使用基于路径的安全策略。 |
多语言/多语言服务 | 同时使用 MLS和MCS。 | 既不使用MLS也不使用MCS。 |
策略规则和控制级别 | 提供更多的政策灵活性。 | 提供较少的政策灵活性。 |
使用方便 | SELinux比AppArmor 更难学。 | 相对来说更容易学习和使用。 |
分布 | 适用于大多数发行版。 | 主要用于SUSE和Ubuntu/Debian发行版。 |
SELinux与AppArmor:各自应用场景
AppArmor最适合需要在几分钟内就可以解决问题的管理员,而SELinux问题可能需要数小时,有时甚至数天才能解决。
与此同时,SELinux机器更难破解,而小编曾经一个基于AppArmor的Ubuntu Server发行版,它很容易遭受到了rootkit的攻击。所以,为获得最高级别的安全性,请使用基于SELinux发行版。如果你想要一个包含阻止攻击者而非管理员的安全系统的发行版,请选择基于AppArmor发行版。