Selinu x配置详解
1.背景
SELinu x是「Securi ty-Enhanc ed Linux」的简称,是美国国家安全局「NSA=The Nation al Securi ty Agency」和SCC(Secure Comput ing Corpor ation)开发的 Linux的一个扩张强制访问控制安全模块。原先是在Fl uke上开发的,2000年以GNU GPL 发布。
现在以Lin ux作为因特网服务器是越来越普遍的事了。在我这几年作过的项目里,WEB的开发基本都是基于Linu x的,这里有给大公司做的,也给政府部门做的,当然更多的是中小企业做的。这其中给政府做的,我们把SEL inux作为一个卖点,接受了不少项目。
现在不论是政府还是民间企业,大家对信息安全问题是越来越关心了,因为企业的业务平台的服务器上存储着大量的商务机密,个人资料,个人资料它直接关系到个人的隐私问题。特别是我们政府的网站,作为信息公开的平台,它的安全就更显得重要了。这些连到互联网的服务器,不可避免的要受到来自世界各地的各种威胁。最坏的时候我们的服务器被入侵,主页文件被替换,机密文件被盗走。除了来自外部的威胁外,内部人员的不法访问,攻击也是不可忽视的。对于这些攻击或者说是威胁,当然有很多的 办法,有防火墙,入侵检测系统,打补丁等等。因为Linu x也和其他的商用UN IX一样,不断有各类的安全漏洞被发现。我们对付这些漏洞不得不花很多的人力来堵住它。在这些手段之中,提高OS 系统自身的牢固性就显得非常的重要。
2.1传统的Li nux OS的不足之处
虽然Linu x 比起Window s 来说,它的可靠性,稳定定要好得多,但是他也是和其他的UN IX 一样,有以下这些不足之处。
1)存在特权用户root
风切变任何人只要得到root的权限,对于整个系统都可以为所欲为。这一点Win dows也一样。
2)对于文件的访问权的划分不够细
在linux系统里,对于文件的操作,只有「所有者」,「所有组」,「其他」这3类的划分。
对于「其他」这一类里的用户再细细的划分的话就没有办法了。
3)SUID程序的权限升级
如果设置了S UID权限的程序有了漏洞的话,很容易被攻击者所利用。
4)DAC(Discre tiona ry Access Contro l)问题
文件目录的所有者可以对文件进行所有的操作,这给系统整体的管理带来不便。
和讯微博
对于以上这些的不足,防火墙,入侵检测系统都是无能为力的。
在这种背景下,对于访问权限大幅强化的OS SELinu x来说,它的魅力的无穷的。
2.2 SELinu x的优点
SELinu x系统比起通常的Li nux系统来,安全性能要高的多,它通过对于用户,进程权限的最小化,即使受到攻击,进程或者用户权限被夺去,也不会对整个系统造成重大影响。
接下来我来介绍SELi nux的一些特点。
特点1:MAC(Mandat ory Access Contro l)―――对访问的控制彻底化
对于所有的文件,目录,端口这类的资源的访问,都可以是基于策略设定的,这些策略是由管理员定制的、一般用户是没有权限更改的。 特点2:TE (Type Enforc ement)―――对于进程只付与最小的权限Te概念在SELinu x里非常的重要。它的特点是对所有的文件都赋予一个叫type的文件类型标签,对于所有的进程也赋予各自的一个叫 domain的标签。Domain标签能够执行的操作也是由acc ess vector在策略里定好的。
我们熟悉的a pache服务器,httpd进程只能在h ttpd_t 里运行,这个http d_t 的domai n能执行的操作,比如能读网页内容文件赋予http d_sys_cont ent_t, 密码文件赋予shado w_t, TCP的80端口赋予http_p ort_t等等。如果在acc ess vector里我们不允许http_t来对htt p_por t_t进行操作的花,Apache启动都启动不了。反过来说,我们只允许80端口,只允许读取被标为httpd_sys_c onten t_t的文件,httpd_t就不能用别的端口,也不能更改那些被标为h ttpd_sys_c onten t_t的文件(read only)。
特点3:domain迁移――防止权限升级
在用户环境里运行点对点下载软件azureu s,你当前的do main是fu_t,但是,你考虑到安全问题,你打算让他在azure us_t里运行,你要是在te rmina l里用命令启动azu reus的话,它的进程的d omain就会默认继承你实行的shell的fu_t。
有了domain迁移的话,我们就可以让azure us在我们指定的az ureus_t里运行,在安
全上面,这种做法更可取,它不会影响到你的fu_t。
下面是dom ain迁移指示的例子:
domain_auto_tran s(fu_t, azureu s_exe c_t, azureu s_t)
意思就是,当在fu_t domain里,实行了被标为azureu s_exe c_t的文件时,domain从fu_t迁移到azureu s_t 。下面是Apa che启动的迁移图。注意了,因为从哪一个domai n能迁移到httpd_t是在策略里定好了,所以要是我们手动(/etc/init.d/httpdstart)启动apac he的话,可能仍然留在sysad m_t里,这样就不能完成正确的迁移。要用run_init命令来手动启动。
特点4:RBAC(role base access contro l)―――――对于用户只付与最小的权限
对于用户来说,被划分成一些ROLE,即使是ROO T用户,你要是不在s ysadm_r里,也还是不能实行sysa dm_t管理操作的。因为,那些ROLE可以执行那些doma in也是在策略里设定的。ROLE也是可以迁移的,但是也只能安策略规定的迁移。
maxthon3
3. 控制切换
从fedor a core 2开始, 2.6内核的版本都支持se linux.我们看看Fedora core 5 里的/etc/syscon fig/selinu x标准设定吧。
# This file contro ls the stateof SELinu x on the system.
# SELINU X= can take one of thesethreevalues:
# enforc ing - SELinu x securi ty policy is enforc ed.
# permis sive- SELinu x prints warnin gs instea d of enforc ing.一时性起
# disabl ed - SELinu x is fullydisabl ed.
SELINU X=enforc ing
#SELINU X=disabl ed
# SELINU XTYPE= type of policy in use. Possib le values are:
# target ed - Only target ed networ k daemon s are protec ted.
# strict - Full SELinu x protec tion.
SELINU XTYPE=target ed
SELINU X有「disabl ed」「permis sive」,「enforc ing」3种选择。
Disabl ed就不用说了,permis sive就是Seli nux有效,但是即使你违反了策略的话它让你继续操作,但是把你的违反的内容记录下来。在我们开发策略的时候非常的有用。
相当于Deb ug模式。
Enforc ing就是你违反了策略,你就无法继续操作下去。
SELINU XTYPE呢,现在主要有2大类,一类就是红帽子开发的t arget ed,它只是对于,主要的网络服务进行保护,比如apache,sendma il, bind,postgr esql等,不属于那些d omain的就都让他们在unc onfin ed_t里,可导入性高,可用性好但是不能对整体进行保护。
另一类是St rict,是NAS开发的,能对整个系统进行保护,但是设定复杂,我认为虽然它复杂,但是一些基本的会了,还是可以玩得动的。
我们除了在/etc/syscon fig/selinu x设它有效无效外,在启动的时候,也可以通过传递参数se linux给内核来控制它。(Fedora 5默认是有效)
kernel /boot/vmlinu z-2.6.15-1.2054_F C5 ro root=LABEL=/ rhgb quietselinu x=0
上面的变更可以让它无效。
[root@python syscon fig]# /usr/sbin/getenf orce
Enforc ing
东北电气发展股份有限公司确认有效后重新对文件系统赋予标签:
[root@python syscon fig]# /sbin/fixfil es relabe l
或者
[root@python /]# touch/.autore label
然后 reboot ,你就在sec ure的L inux环境下工作了。
4. SELinu x的基本操作
SELinu x 是个经过安全强化的Li nux操作系统,实际上,基本上原来的运用软件没有必要修改就能在它上面运行。真正做了特别修改的RP M包只要50多个。像文件系统E XT3都是经过了扩展。对于一些原有的命令也进行了扩展,另外还增加了一些新的命令,接下来我们就来看看这些命令。
4.1 文件操作
1)ls命令
在命令后加个-Z 或者加–contex t
[root@python azureu s]# ls -Z
-rwxr-xr-x fu fu user_u:object_r:user_h ome_t azureu s
-rw-r--r-- fu fu user_u:object_r:user_h ome_t Azureu s2.jar
-rw-r--r-- fu fu user_u:object_r:user_h ome_t Azureu s.png
2)chcon
更改文件的标签
[root@python tmp]# ls --contex
-rw-r--r-- root root root:object_r:staff_tmp_
[root@python tmp]# chcon-t etc_t
数控系统[root@python tmp]# ls -
-rw-r--r-- root root root:object_r:etc_t
3)restor econ
当这个文件在策略里有定义是,可以恢复原来的文件标签。
4)setfil es
跟chcon一样可以更改一部分文件的标签,不需要对整个文件系统重新设定标签。
5)fixfil es
一般是对整个文件系统的,后面一般跟relabe l,对整个系统relabe l后,一般我们都重新启动。如果,在根目录下有.autore label空文件的话,每次重新启动时都调用fixfil es relabe l
6)star
就是tar在SELin ux下的互换命令,能把文件的标签也一起备份起来。