本文内容参考:
apparmor 初识(一)_domybest_nsg的博客-CSDN博客,
AppArmor与SElinux_apparmor selinux_weixin_45216475的博客-CSDN博客,
apparmor_什么是AppArmor?如何确保Ubuntu安全?_culingluan4376的博客-CSDN博客,
学习LSM(Linux security module)之三:Apparmor的前世今生和基本使用_Yuri800的博客-CSDN博客
一、何为AppArmor
在研究SELinux的时候,发现还有个AppArmor,这也是第一次接触。见新名词、新事物不能交臂而失之,因此本系列文章就来认识、了解并深入研究AppArmor。
AppArmor的全称是Application Armor,Application自不必说,是应用的意思,那么Armor是什么意思?armor的英文原意是盔甲,作动词时意义是为……装盔甲。弄清楚了armor的意思之后,Application Armor的意思就豁然开朗了且一目了然吧:为应用程序装盔甲。你从字面上就能知道AppArmor一定和安全相关,不然都对不起这名字。
AppArmor是Linux内核的强制访问控制(MAC)的一个实现方案,与SELinux并列,也是使用了Linux安全模块(LSM)框架,因此它们可以互换。AppArmor默认集成在openSUSE和Ubuntu等发行版中(在openSUSE、Ubuntu等发行版上默认开启)。而SELinux则默认集成在Red Hat和CentOS上。
二、背景及产生原因
AppArmor最初由Immunix开发,随后由Novell维护。AppArmor的开发初衷是因为有人认为SELinux太过复杂,不适合普通用户管理。—— 这一点笔者举双手赞同,从开始研究SELinux到现在两周了,仍然没有弄清楚那些具体的策略怎样写(涉及主体、客体、域、许可……)。
那么具体比较一下AppArmor和SELinux,看看AppArmor与SELinux相比,到底有何异同:
- 相同点
AppArmor和SELinux都是Linux内核的安全模块,都使用了Linux安全模块(LSM)框架;
AppArmor和SELinux都属于强制访问控制(MAC)机制;
AppArmor和SELinux基本的概念和使用类似,如都包括complain和enforce模式;
AppArmor和SELinux都有图形化配置工具。
- 不同点
相比SELinux,AppArmor相对简单易用(例如规则文件无需编译),更加适合日常使用;
SELinux需要一个支持扩展属性的文件系统,而AppArmor对文件系统没有任何要求;
与SELinux必须只有明确的允许策略才能允许访问不同,AppArmor只有当程序的配置文件明确规定了受限,才会限制;
SELinux基于角色,Apparmor基于路径;
AppArmor具有学习模式。
三、AppArmor VS SELinux
实际上边已经比较了AppArmor和SELinux的异同。在此从宏观层面将两者进行更加全方位的比较:
- 易用性
对一个FTP程序做相同的限制,使用AppArmor的规则只是SELinux的1/4,而且从代码的替代性上来看,Apparmor的代码也更易理解和易读。
- 安全性
毋庸置疑,SELinux更安全。看下SELinux的出身,其是美国国家安全局「NSA」和SCC(Secure Computing Corporation)开发的Linux的一个扩展强制访问控制安全模块,可谓“根红苗正”。再从理论上也可以了解到SELinux与Apparmor最大的区别在于:Apparmor使用文件名(路径名)作为安全的标签,而SELinux使用文件的inode作为安全标签。这意味着,Apparmor机制可以通过修改文件名而被绕过。另外,在文件系统中,只有inode才具有唯一性。
最后做个小总结,无论是CentOS/Red Hat还是openSUSE/Ubuntu,它们都是优秀的产品。在AppArmor与SELinux的选择上,也都有各自的考量。如果从配置与上手的难易程序上来说,Apparmor更容易配置、入门和上手;如果从追求更高的安全性上来说,SELinux上更优一些。从日立软件的测试结果来看,也比较推荐使用SELinux而不是AppArmor。