参考:http://wenx05124561.blog.163.com/blog/static/124000805201251082649313/
http://linux.chinaitlab.com/safe/790446.html
鸟哥的linux私房菜第三版“SElinux初探”一节
Selinux这个东西全称是security enhanced linux,意思就是安全扩展linux,不配置这个的linux系统跟windows是一个安全级别的,配置这个之后的linux的安全级别才上了一个层次。这个东西在刚开发出来的时候以linux的补丁包的形式发布,现在已经集成在系统内核了。
原本系统的不足之处说起吧。
对文件的访问权限划分不够细。
我们都知道linux中的每个文件都有一串权限标示,即-rwxrwxrwx。其中第一位标示该文件的类型,比如文件夹为d,符号链接为l,字符设备为c,块设备为b等。之后的九个位置3个一组,分表标示了属主、属组和其它用户的权限,r代表读权限,w代表写权限,x代表执行权限。这种权限定义方式对用户的划分不够细,比如other中可能有各类的用户。
存在root这样拥有无限权力的账户。
这跟windows的Administrator是类似的,设想若某人获得了root权限就可以干任何事了,这绝对是不安全的。
SUID机制的安全隐患。
SUID是这样一种机制,核主要是根据euid来确定进程对资源的访问权限。由于SUID是在执行程序(程序的可执行位被设置)时起作用,而可执行位只对普通文件和目录文件有意义,所以设置其他种类文件的SUID位是没有多大意义的。
我们知道内核主要是根据euid来确定进程对资源的访问权限。一个进程如果没有SUID位,则euid=uid分别是运行这个程序的用户的uid。例如kevin用户的uid为204,foo用户的uid 200,kevin运行foo用户的my.exe(假定kevin也有x权限)程序形成的进程的euid=uid=204内核根据这些值来判断进程对资源访问的限制,其实就是kevin用户对资源访问的权限,和foo没关系。
如果一个程序设置了SUID,则euid变成被运行的程序的所有者的uid,例如kevin用户运行myfile,euid=200,uid=204,则这个进程具有它的属主foo的资源访问权限。
SUID的作用就是这样:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源,获得程序属主的资源访问权限。
Selinux机制的工作方式。
Selinux建立了所有程序跟所有档案的权限对应关系。它的组成有三部分,主体(程序)、目标(文件)和策略(权限规则)。其中策略是由各liunx发行版的厂商指定,比如RHEL这个版本的策略就是targeted。这个策略主要针对服务器的一些网络服务进行了设定,比如ftp、www、dns等。这个策略我们不可更改。另外,每个服务下的策略中有一些可定制选项,这些定制选项对应了一个个的布尔值,通过设置布尔值是0或1,可以有限的定制一些策略选项。这个策略主要是将每一个网络服务的工作目录限定在文件系统中的某一些具体的文件夹内,被限定的服务不可以访问除策略内的文件夹外的其他文件系统。
此外,Selinux为每一个文件和每一个运行的程序分配一个表示文件,即安全性文本。这个安全性文本有3个字段:分别为identify:role:type.
Identiry主要有三种类型:root:表示root身份
System_u:表示系统程序身份。
User_u:表示一般使用者身份。
Role主要有两种类型:object_r:表示是档案资源。
System_r表示程序。
Type是最重要的一个字段。程序的这个字段称为domain,即域。档案的这个字段成为type。只有该文件的类型在程序所属的domain里。程序才能读取该文件。至于domain跟type的对应关系也是存储在相应的策略文件中。
当一个程序要访问某一文件的时候,内核首先检查策略文件,确定该程序是否可以访问该目录。若检查通过,就去检查程序的domain和文件的type的对应关系,若该文件的type在程序的domain中,内核就继续检查程序的用户权限,就是那三个rwx了,只有这3步都通过,该程序才能访问到该文件。其中,第一道关是由发行版厂商指定,个人不可更改,只可在有限的范围内定制一些选项。第二道关用户可以通过修改文件的上下文(chcon)获得权限,第三道关用户 可以通过修改权限(chmod)信息获得权限。所以它所谓的安全性提升就是因为策略文件的指定不是用户决定的,而用户也不可以更改策略文件。
以上是我对SElinux的个人理解,不一定正确。
下面就按照那三道关的分层,介绍一下用户可以干的事。
修改布尔值定制策略。
首先可以使用
Man -k _selinux
查看系统有哪些seliunx服务策略。
然后可以通过比如
man ftpd_seliunx
查看该服务下可定制的布尔值参数。
找到对应参数后可以通过
getsebool -a |grep ftp
查看现在的布尔值参数设置。
最后可以通过
Setsebool -P 布尔值 1或者0
来更改某一个布尔值。
第一道关卡能做的就这么多了,下面说下第二道关卡。
修改上下文。
首先查看程序和档案的安全性文本内容
在ls和ps后加上“-Z”参数就可以了。
然后就是修改,使用
Chcon -t 修改后的类型 被修改文件的绝对路径
就可以修改文档的上下文信息了。
此外,可以使用
Restorecon -Rv 被修改文件的绝对路径
来根据SElinux的目标策略恢复文件的安全上下文。
最后一道关卡是
用户权限的修改,此处不再介绍。
另外说下setroubleshoot这个错误定位服务。
首先说下
selinux的配置文件
/etc/selinux/config文件。
文件中可设置三种模式:
SELINUX=enforcing #强制,若违反策略,访问被拒绝
Permissive #警告,若违反策略,访问不会被拒绝,但会写入日志信息
Disabled #关闭,即不开启selinux
可以通过getenforce命令查看当前selinux状态。
也可以通过setenforce 0或1,改变selinux状态,0为警告模式,1为强制模式。
若selinux从开启状态改为关闭状态,或由关闭状态转为开启状态,则需要机器重启。
此文件另一个选项为设定selinux策略。即SELINUXTYPE的值。Rhel提供了两种策略,即targeted和strict。
当selinux设置在警告模式中,可以通过查看日志,
根据日志提示来修改权限信息。
在系统没开启审计即audit服务的情况下,selinux的日志信息会存放在/var/log/messages文件中。若开启审计,则会存放在/var/log/audit/audit.log文件中。以存在messages中为例,使用
Cat /var/log/messages |grep seliunx
可以查看警告信息。根据警告信息,复制粘贴每一行警告信息的最后命令可查看详细警告信息。如
sealert -l 06d28197-111a-421d-81ff-f4b1e8c43412
查看详细信息,再根据详细信息的提示可更改文件上下文权限。
最后说下红帽下面的图形化工具。
System-config-selinux
具体使用可具体实验。