SELinux 入门
1.背景
SELinux是「Security-Enhanced Linux」的简称,是美国国家安全局「NSA=The National Security Agency」 和SCC(Secure Computing Corporation)研发的 Linux的一个扩张强制访问控制安全模块。原先是在Fluke上研发的,2000年以 GNU GPL 发布。
现在以Linux作为因特网服务器是越来越普遍的事了。在我这几年作过的项目里,WEB的研发基本都是基于Linux的,这里有给大公司做的,也给政府部门做的,当然更多的是中小企业做的。这其中给政府做的,我们把SELinux作为一个卖点,接受了不少项目。
2.我们需要安全操作系统的理由
现在不论是政府还是民间企业,大家对信息安全问题是越来越关心了,因为企业的业务平台的服务器上存储着大量的商务机密,个人资料,个人资料他直接关系到个人的隐私问题。特别是我们政府的网站,作为信息公开的平台,他的安全就更显得重要了。这些连到互连网的服务器,不可避免的要受到来自世界各地的各种威胁。最坏的时候我们的服务器被入侵,主页文档被替换,机密文档被盗走。除了来自外部的威胁外,内部人员的不法访问,攻击也是不可忽视的。对于这些攻击或说是威胁,当然有很多的办法,有防火墙,入侵检测系统,打补丁等等。因为Linux也和其他的商用UNIX相同,不断有各类的安全漏洞被发现。我们对付这些漏洞不得不花很多的人力来堵住他。在这些手段之中,提高OS系统自身的牢固性就显得很的重要。
2.1传统的Linux OS的不足之处
虽然Linux 比起 Windows 来说,他的可靠性,稳定定要好得多,但是他也是和其他的UNIX 相同,有以下这些不足之处。
1)存在特权用户root
  任何人只要得到root的权限,对于整个系统都能够为所欲为。这一点Windows也相同。
2)对于文档的访问权的划分不够细
  在linux系统里,对于文档的操作,只有「任何者」,「任何组」,「其他」这3类的划分。
  对于「其他」这一类里的用户再细细的划分的话就没有办法了。
3)SUID程式的权限升级
  假如配置了SUID权限的程式有了漏洞的话,很容易被攻击者所利用。
4)DAC(Discretionary Access Control)问题
  文档目录的任何者能够对文档进行任何的操作,这给系统整体的管理带来不便。
对于以上这些的不足,防火墙,入侵检测系统都是无能为力的。
在这种背景下,对于访问权限大幅强化的OS SELinux来说,他的魅力的无穷的。
2.2 SELinux的长处
SELinux系统比起通常的Linux系统来,安全性能要高的多,他通过对于用户,进程权限的最小化,即使受到攻击,进程或用户权限被夺去,也不会对整个系统造成重大影响。
接下来我来介绍SELinux的一些特点。
特点1:MAC(Mandatory Access Control)―――对访问的控制完全化
对于任何的文档,目录,端口这类的资源的访问,都能够是基于策略设定的,这些策略是由管理员定制的、一般用户是没有权限更改的。
特点2: TE (Type Enforcement)――― 对于进程只付和最小的权限
Te概念在 SELinux里很的重要。他的特点是对任何的文档都赋予一个叫type的文档类型标签,对于任何的进程也赋予各自的一个叫 domain的 标签。Domain标签能够执行的操作也是由access vector在策略里定好的。
我们熟悉的apache服务器,httpd进程只能在httpd_t 里运行,这个httpd_t 的domain能执行的操作,比如能读网页内容文档赋予httpd_sys_content_t, 密码文档赋予shadow_t, TCP的80端口赋予 http_port_t等等。假如在access vector里我们不允许 http_t来对http_port_t进行操作的花,Apache启动都启动不了。反过来说,我们只允许80端口,只允许读取被标为httpd_sys_content_t的文档,httpd_t就不能用别的端口,也不能更改那些被标为httpd_sys_content_t的文档(read only)。
特点3: domain迁移 ―― 防止权限升级
在用户环境里运行点对点下载软件azureus,您当前的domain是fu_t, 但是,您考虑到安全问题,您打算让他在azureus_t里运行,您要是在terminal里用命令启动azureus的话,他的进程的domain就会默认继承您实行的shell的fu_t。
有了domain迁移的话,我们就能够让azureus在我们指定的azureus_t里运行,在安全上面,这种做法更可取,他不会影响到您的fu_t。
下面是domain迁移指示的例子:
domain_auto_trans(fu_t, azureus_exec_t, azureus_t)
意思就是,当在 fu_t domain里,实行了 被标为 azureus_exec_t的文档时,domain 从fu_t迁移到 azureus_t 。下面是Apache启动的迁移图。注意了,因为从哪一个domain能迁移到httpd_t是在策略里定好了,所以要是我们手动(/etc/init.d/httpd start)启动apache的话,可能仍然留在sysadm_t里,这样就不能完成正确的迁移。要用run_init命令来手动启动。
特点4: RBAC(role base access control) ――――― 对于用户只付和最小的权限
对于用户来说,被划分成一些ROLE,即使是ROOT用户,您要是不在sysadm_r里,也还是不能实行sysadm_t管理操作的。因为,那些ROLE能够执行那些domain也是在策略里设定的。ROLE也是能够迁移的,但是也只能安策略规定的迁移。
3. 控制转换
从fedora core 2开始, 2.6内核的版本都支持selinux.我们看看 Fedora core 5 里的/etc/sysconfig/selinux标准设定吧。
# 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=enforcing
#SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted
SELINUX有「disabled」「permissive」,「enforcing」3种选择。
Disabled就不用说了,permissive就是Selinux有效,但是即使您违反了策略的话他让您继续操作,但是把您的违反的内容记录下来。在我们研发策略的时候很的有用。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!