在RHEL 4中,一个最激动人心的新特性就是实现了安全增强Linux(SELinux,Security-Enhanced Linux)。在这篇文章中,我们将考察你怎样才能够使用它增强系统安全。
SELinux是一个开放源码项目,由美国国家安全局(National Security Agency)发起和赞助,帮助实现强制访问控制。它是一个能够为Linux提供更多安全框架的子系统,并且能够实现操作系统级的控制。它执行强制访问控制,可以为你提供更好安全尺度,SELinux由内核和用户空间组件两部分构成。
在SELinux中,特权的指定建立在典型的Unix/Linux权限方法之上,也就是以用户和组实现的权限组织方式。具体来说,实现的方法是使用基于角色的访问控制。两个常用的角色是user_r角色和system_r,它们都作用于系统管理员。
需要预先说明的是,如果你的服务器(Web或DNS)需要暴露于Internet之上,那么使用SELinux将会帮助你带来更强的安全性。如果你只是想在内部运行一些如Oracle之类的服务,并不牵涉外部访问,那么你应该不想趟SELinux这趟浑水,因为若是实施SELinux,还需要很多东西需要学习,并且具体配置起来也非常麻烦。这需要一个特殊类型的安全类型管理员,安全将不再是域用户自行处理它们各自的文件,它需要管理员的集中管理。如果你将Linux作为你们的防火墙,那么在这里使用SELinux将非常好。这些就是在你部署SELinux需要考虑的关键词。
快速查看/etc/selinux/config文件,你将获得有关你的系统值的信息,以及现在所采取的策略。下面是具体的查看命令,记得先切换到/etc/selinux目录下。
[root@redken selinux]# more config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=permissive
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted
[root@redken selinux]#
当安装到系统时,可以选择三种SELinux中的一种。它们分别是强制(enforcing)、许可(permissive)和禁用(disabled)。我为自己的系统选择的是许可模式(实现SeLinux可用的两种模式之一),这是因为我不想在测试时,它妨碍到我的应用程序。若是想查看SELinux妨碍类型的条目,请打开/var/log/messages文件。在这里获取那些输入的妨碍类型条目之后,你可能会想打开SELinux的强制模式。
虽然在一个安装的系统上能够有多个策略,但在同一时间,只能有一个处于激活状态。已经存在的两个策略类型是“targeted”和“strict”。targeted(目标)策略通常不需要限定即可运行,strict(限制)策略则将处理进程分割成安全域,以用策略限制。
惧色将在最后确定,它决定了一个用户允许运行的命令。如果你以普通用户登录进入系统,你可能看到如下的情况:
[kem@redken ~]$ id –Z
user_u:system_r:unconfined_t
此信息表示你相对于root来说,是一个普通用户。当你以root身份登录时,运行id –Z命令后,你将会看到以下信息:
root:system_r:unconfined_t
如果你用ls –Z命令检查httpd进程,你将看到:
-rwxr-xr-x root root system_u:object_r:httpd_exec_t /usr/sbin/httpd.
上述信息表示,此文件的所有者是httpd域,而用户kem,并不在此域中。如果你想授予kem访问权限,你可以手工将他放入这个域即可。
当然,还是有一些GUI界面的工具能够帮助用户来进行策略的配置,这些工具能够为每个服务执行配置,也允许你执行如改变设置和限制文件访问的人物。在Linux命令行下,输入system-config-securitylevel命令(或者在GNOME中点击系统设置按钮,再从中选择安全等级),将会启动一个如下图的GUI界面窗口,在其中能够容易的调整SELinux的设置。在这里,我关闭了httpd进程的SELinux保护。

GUI界面配置支持的服务器包括DNS、NIS、HTTP和DHCP,虽然我不能在这里为你展示更多的设置,但我想你只要一看相应的图片,就真正明白了有关SELinux的更多知识。需要注意的是,如果你选择了启用或禁用SELinux,则需要重新启动计算机才能够使改变生效。
另外,尝试使用sestaus命令,这个好工具将给你提供有关系统的更多详细信息。这里是一些我运行此命令后收到的输出信息。
[root@redken users]# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: permissive
Mode from config file: permissive
Policy version: 18
在上述信息中,我们看到,SELinux正在运行(处于enabled状态),SELinux文件系统的挂载点是/selinux,SELinux现在运行的模式是permissive(许可)模式,策略的版本是18。策略的版本由内核支持。
如果你想查看跟安全有关的进程,则请输入ps –Z命令,或者 ps –efZ命令获取整个进程表。这里是一个例子:
ps -Z
LABEL PID TTY TIME CMD
root:system_r:unconfined_t 3110 pts/2 00:00:00 bash
root:system_r:unconfined_t 24269 pts/2 00:00:00 ps
而从命令行或者编辑SELinux文本文件的方式设置策略和规则并不是一件容易的事情,因此如果你考虑打开SELinux,则需要学习大量的知识,在生产环境下尤其如此。想获得更多的信息,请访问美国国家安全局网站的SELinux部分。
幸运的是,Red Hat将拿出一些好的文档,以帮助终端用户在Red Hat环境中实施SELinux;文档包含有一个很好的实际的例子。当然,由于Red Hat中的SELinux在配置上有一些特殊的改变,因此同样需要文档进行这些特殊的SELinux配置,具体表现在实施中,就是许多文件和目录的位置不尽相同。
这里是RedHat SELinux指南的链接,多谢Stefan Wiederode提供了此链接。