注册 登录
  • 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

Linux中安全增强系统SELinux

安全管理 彭东稳 6979次浏览 已收录 0个评论

在大多数用户的眼里,每次登陆Linux系统都必须输入密码,而且除了root之外,一个普通用户不能随意读写其他用户的文件,也不能更改系统设置,应该足够安全了。当了解到PAM那样的用户认证机制之后,更加坚定了对Linux系统安全性的信心,似乎从此以后就可以高枕无忧了。但是遗憾地说,只因PAM是用户认证机制,而不是用户授权机制。真正的用户授权机制在Linux的内核,而且这套机制存在问题。

Linux中安全增强系统SELinux

主动访问控制DAC

Linux内核的用户授权机制也叫访问控制机制,在前面已经说过用户身份问题和文件管理方式就是受控于这种机制。Linux系统中的用户主要分为root和普通用户两种,并将它们划分到不同的群组中。而这两种用户是否能够访问系统中的某个文件则与该文件的rwx权限属性有关。如果某个程序想要访问这个文件,Linux内核会根据改程序的拥有者的UID和所属组的GID与该文件UIDGIDrwx权限属性进行对比来决定是否允许操作。

 

Linux这种控制文件访问的机制有一个非常好听的名字——主动访问控制,discretionary access control,简称DAC。其缺陷如下(有利有弊):

root拥有特权:rootDAC中不受任何限制,如果某个拥有root权限的程序被别有用心的人所控制,那么他就可以利用这个程序在你的系统上干人任何事情,而且你还不知道。

SUID程序的权限升级:Linux为了实现类似让用户能够修改自己密码的操作(shadow文件只能由root存取),只能给某些程序开启一个后门,这个后门就是SUID,这可是特权的直接产物,因为有特权就会有人通过特权走捷径。虽然设计良好的带有SUID的程序都会集成PAM,但是如果被人利用那么损失将会等同于ROOT

用户可以利用程序来更改文件的存取权限:如果某个用户为了自己的方便,将某个目录的权限设定为777,那么该目录就可以被所有人任意访问。

强制访问控制MAC

与主动访问控制相对应的是强制访问控制,英文叫mandatory access control,简称MACMAC可以规避DAC的所有问题,因为MAC针对特定的程序与特定的文件进行关联性地访问控制。即便你是root,在使用不同的程序的时候,你所能访问的文件也只是那个程序所能访问的文件。换句话说,MAC控制的主体是程序而不是使用者,MAC规定了一个程序能够访问哪些文件,而跟使用这个程序的用户无关。

但是,一个Linux系统中的程序数量比它的用户数量多个几十倍是一点都不奇怪的,那么每个程序都使用MAC来控制似乎不太现实。Linux系统采用了一个折中的方案—-DACMAC结合使用。对于大多数与安全无关的程序就使用DAC来控制好了。对于那些安全攸关的程序,比如passwdhttpd等则采用MAC来控制,只能让他们读取/etc/shadow文件或访问/var/www/目录,即便他们存在某些问题能够被那些别有用心的人所利用,又能掀起多大的风浪呢?而且即便是使用MAC控制的程序,也首先要进行一次DAC的控制。这样,这个系统的访问控制能力不但细腻得多,安全得多,也容易使用了。

那么Linux是怎么实现MAC的,就像DAC那样,MAC也是由Linux内核来实现的,比较经典的有SELinuxAppArmorGrsecurity,其中SELinux已经包含在Centos/RHEL/redora LinuxDebian/UbuntuSuseslackware等很多发行版中,下面我们就来说说SELinux是怎么实现MAC访问控制又是如何提供强健的安全保证和防御未知攻击的吧。

SELinux

首先,SELinux是一种基于策略的MAC安全系统,是以Linux内核可加载模块的形式提供的。其次,SELinux的全称是Security enhanced linux,翻译过来就是安全强化Linux,是Linux上最杰出的新型安全子系统。另外,SELinux的来头也不小,是由美国国家安全局开发,所以它的能力是不容小觑的。最后,SELinux是在2.6版本的Linux内核中开始被引用。对于目前可用的各种Linux安全模块来说,SELinux是功能最全面,而且是测试最充分的,是在超过20年的MAC研究基础上简历起来的。自从Linux拥有了SELinux,大型企业和政府部门才真正地开始考虑采用Linux作为其主要的操作系统。

开启SELinux

初学者可以说大部分都是很讨厌SELinux,一因为不知道它到底是干嘛的,二在使用系统的或是搭建实验的时候总是要学会关闭SELinux。既然这样那我们就先来看看跟SELinux有关的指令及其含义。还有就是不同的发行版可能对应的指令会不同,下面就以centos6.0为例说说。

打开/etc/sysconfig/selinux这个文件,应该是如下内容:

其含义SELINUX=disabled表示关闭了SELinux,当SELINUX=enforcing时表示一种工作模式,强制SELinux使用你所定义的所有安全策略。那么与enforcing模式相对应的是permissive模式。如果SELinux工作在permissive模式之下,则并不代表系统已经真正受到SELinux的保护了,因为它只要求显示一些相关的信息状态,余下的就什么都不做了。

开启和关闭SELinux都要重新启动系统,因为这个需要内核本身被重新加载。如果你确定SELinux是否已经成功开启了,可以使用sestatus命令来确认。虽然开启或关闭SELinux要重启系统,但是在enforcingpermissive模式之间进行切换就很方便了。只需要使用setenforce命令就可以,给它一个参数010就代表permissive模式,那么1就代表enforcing模式啦。如果要查看当期那SELinux工作在上面模式下,可以使用getenforce命令来获得。

需要注意的是,一旦你开启了SELinux,而且设置它工作在enforcing模式之下,很可能会有悲剧发生,你有一对服务无法顺利启动。最主要的提示信息时/lib目录下的某些文件没有读取权限而导致启动失败。一旦发生这种悲剧,可以将SELinux设置为permissive模式,然后使用“restorecon –Rv/”命令。如果有人处于好奇将SELINUXTYPE=targeted设置成了SELINUXTYPE=mls,那可能会是更大的悲剧,因为你都无法登陆系统也无法关机。如果尝试断电的话,就更加悲剧了,单用户模式你都进不去了。这个时候怎么办呢?动用内核启动参数吧,就是GRUB的交互界面中指定内核参数enforcing=0就行。就可以启动系统了。

安全上下文

在进一步讲述SELinux之前,我们先来了解一下它的最基本的概念———安全环境,或者是安全上下文。安全上下文实际上是一个标签,如果系统中开启了SELinux,那么系统中所有的文件、目录、进程、套接字、乃至用户本身就会带有这个标签。这个标签由:用户、角色、域/类型、敏感度和类别这五个部分构成,并使用冒号分割。这个五个部分并不总是全部出现,具体的要根据你选择了何种策略。使用“id –Z”命令可以查看当前用户的安全上下文,如下

unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

要查看进程的安全上下文可以使用“ps -Z”命令,至于文件或目录的安全上下文可以使用“ls -Z”命令。

安全上下文中的第一部分是用户。它与Linux本身的用户是完全不同的概念。它们可以共存,而且很多时候还会被人们弄混。因为一个SELinux的用户会与Linux本身的用户使用相同的文本表达(登录名)。但是不管怎样,都要记住它们两个完全不是一回事儿。使用su命令并不能改变SELinux的用户。

每一个Linux本身的用户可以和一个SELinux的用户相对应,也就是说当它通过和发途径登陆了一个Linux系统,那么同时就会分配给它一个SELinux用户。可以通过“semanage login -l”命令来查看这种对于关系。安全上下文中的第二个部分是角色,角色规定了用户能干什么,每一个SELinux用户都会有它对应的角色,而且还可以对应多个角色。

身份

selinux中,身份的概念与传统的Linux UID是完全不同的,它们可以共存。而且很多时候还会被人们弄混。因为一个selinux的身份会跟标准的linux登录名使用相同的文本表达,但是不管怎样都要记住,它们两个完全不是一回事儿。在selinux中身份是安全上下文的一部分,它会决定什么可以被执行。运行su命令是不会改变selinux的身份的。

SElinux的策略

一开始我们就说SELinux是一种基于策略的MAC安全系统,那么它都提供了什么策略呢?回答这个问题是很难的,因为SELinux的策略可以有千百种,但是对于SELINUXTYPE这个配置项留给我们的选择并不多,因为Linux发行商们已经为我们编制好了一些策略套件,拿来直接使用或做一些小幅度的改动就可以放心地使用了。而这个SELINUXTYPE配置项就是用于选择策略套件的。

对于centos6.x系统,它提供了三个策略套件,分别是targetedmlsminimum,也分别代表了不同的侧重点。targeted是最常用的策略套件,也是centos默认的。它侧重的是对网络服务的严格限制,用来在没有严重影响用户体验的情况下尽可能多的保护关键进程,在centos 4时只有15个已经定义好的targets存在,包括httpdnameddhcpdmysqld、而后来的centos版本受保护的对象越来越多,targets的数量猛增,现已超过了200个。在保护安全的同时targeted策略也期望能达到这么一种境界,大多数用户没有感觉到selinux在运行而它却在默默起着保护作用。SELinux还允许用户使用多策略,我们可以使用mls套件来实现。它能做到不需要对安全策略进行破坏性地改变就能使MLS生效,我们需要再文件/etc/sysconfig/selinux中把SELINUXTYPE=targeted这行改成SELINUXTYPE=mls,使用chconsemanage命令重新标签上下文,然后重启系统。如果有的用户只想使用一个SELinux在内存不多的虚拟机上运行,SELinux推出了和targeted策略一样的minimum软件包。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (0)or分享 (0)
关于作者:

您必须 登录 才能发表评论!