SELinux 入门详解
回到Kernel2.6时代,那时候引入了一个新的安全系统,用以提供访问控制安全策略的机制。这个系统就是SecurityEnhancedLinux(SELinux),它是由美国国家安全局(NSA)贡献的,它为Linux内核子系统引入了一个健壮的强制控制访问MandatoryAccessControl架构。
如果你在之前的Linux生涯中都禁用或忽略了SELinux,这篇文章就是专门为你写的:这是一篇对存在于你的Linux桌面或服务器之下的SELinux系统的介绍,它能够限制权限,甚至消除程序或守护进程的脆弱性而造成破坏的可能性。
在我开始之前,你应该已经了解的是SELinux主要是红帽RedHatLinux以及它的衍生发行版上的一个工具。类似地,Ubuntu和SUSE(以及它们的衍生发行版)使用的是AppArmor。SELinux和AppArmor有显著的不同。你可以在SUSE,openSUSE,Ubuntu等等发行版上安装SELinux,但这是项难以置信的挑战,除非你十分精通Linux。
说了这么多,让我来向你介绍SELinux。
DACvs.MAC
Linux上传统的访问控制标准是自主访问控制DiscretionaryAccessControl(DAC)。在这种形式下,一个软件或守护进程以UserID(UID)或SetownerUserID(SUID)的身份运行,并且拥有该用户的目标(文件、套接字、以及其它进程)权限。这使得恶意代码很容易运行在特定权限之下,从而取得访问关键的子系统的权限。
另一方面,强制访问控制MandatoryAccessControl(MAC)基于保密性和完整性强制信息的隔离以限制破坏。该限制单元独立于传统的Linux安全机制运作,并且没有超级用户的概念。
SELinux如何工作
考虑一下SELinux的相关概念:
- 主体Subjects
- 目标Objects
- 策略Policy
- 模式Mode
当一个主体Subject(如一个程序)尝试访问一个目标Object(如一个文件),SELinux安全服务器SELinuxSecurityServer(在内核中)从策略数据库PolicyDatabase中运行一个检查。基于当前的模式mode,如果SELinux安全服务器授予权限,该主体就能够访问该目标。如果SELinux安全服务器拒绝了权限,就会在/var/log/messages中记录一条拒绝信息。
听起来相对比较简单是不是?实际上过程要更加复杂,但为了简化介绍,只列出了重要的步骤。
模式
SELinux有三个模式(可以由用户设置)。这些模式将规定SELinux在主体请求时如何应对。这些模式是:
- Enforcing强制—SELinux策略强制执行,基于SELinux策略规则授予或拒绝主体对目标的访问
- Permissive宽容—SELinux策略不强制执行,不实际拒绝访问,但会有拒绝信息写入日志
- Disabled禁用—完全禁用SELinux
默认情况下,大部分系统的SELinux设置为Enforcing。你要如何知道你的系统当前是什么模式?你可以使用一条简单的命令来查看,这条命令就是getenforce。这个命令用起来难以置信的简单(因为它仅仅用来报告SELinux的模式)。要使用这个工具,打开一个终端窗口并执行getenforce命令。命令会返回Enforcing、Permissive,或者Disabled(见上方图1)。
设置SELinux的模式实际上很简单——取决于你想设置什么模式。记住:永远不推荐关闭SELinux。为什么?当你这么做了,就会出现这种可能性:你磁盘上的文件可能会被打上错误的权限标签,需要你重新标记权限才能修复。而且你无法修改一个以Disabled模式启动的系统的模式。你的最佳模式是Enforcing或者Permissive。
你可以从命令行或/etc/selinux/config文件更改SELinux的模式。要从命令行设置模式,你可以使用setenforce工具。要设置Enforcing模式,按下面这么做:
- 打开一个终端窗口
- 执行su然后输入你的管理员密码
- 执行setenforce1
- 执行getenforce确定模式已经正确设置(图2)
要设置模式为Permissive,这么做:
- 打开一个终端窗口
- 执行su然后输入你的管理员密码
- 执行setenforce0
- 执行getenforce确定模式已经正确设置(图3)
注:通过命令行设置模式会覆盖SELinux配置文件中的设置。
如果你更愿意在SELinux命令文件中设置模式,用你喜欢的编辑器打开那个文件找到这一行:
SELINUX=permissive
你可以按你的偏好设置模式,然后保存文件。
还有第三种方法修改SELinux的模式(通过bootloader),但我不推荐新用户这么做。
策略类型
SELinux策略有两种:
- Targeted目标—只有目标网络进程(dhcpd,httpd,named,nscd,ntpd,portmap,snmpd,squid,以及syslogd)受保护
- Strict严格—对所有进程完全的SELinux保护
你可以在/etc/selinux/config文件中修改策略类型。用你喜欢的编辑器打开这个文件找到这一行:
SELINUXTYPE=targeted
修改这个选项为targeted或strict以满足你的需求。
检查完整的SELinux状态
有个方便的SELinux工具,你可能想要用它来获取你启用了SELinux的系统的详细状态报告。这个命令在终端像这样运行:
sestatus-v
你可以看到像图4那样的输出。
仅是皮毛
和你预想的一样,我只介绍了SELinux的一点皮毛。SELinux的确是个复杂的系统,想要更扎实地理解它是如何工作的,以及了解如何让它更好地为你的桌面或服务器工作需要更加地深入学习。我的内容还没有覆盖到疑难解答和创建自定义SELinux策略。
SELinux是所有Linux管理员都应该知道的强大工具。现在已经向你介绍了SELinux,我强烈推荐你回到Linux.com(当有更多关于此话题的文章发表的时候)或看看NSASELinux文档获得更加深入的指南。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。