本文摘自:http://security.zdnet.com.cn/security_zone/2011/1124/2067407.shtml
三、使用SELinux策略目录
如上述的例子中,SELinux配置文件中的SELINUXTYPE选项告诉init在系统启动过程中载入哪个策略,这里设置的字符串必须匹配用来存储二进制策略版本的目录名,例如,用户使用MLS(Multi-Level Security,多级安全)策略,因此用户设置SELINUXTYPE=MLS,确保用户想要内核使用的策略在/etc/selinux/config文件中。在上述例子中,活动策略默认为目标策略(targeted),由第10行给出所示。
SELinux系统上安装的每个策略在/etc/selinux/目录下都它们自己的目录,子目录的名字对应于策略的名字(如,strict,targeted,refpolicy等),在SELinux配置文件中就要使用这些子目录名字,告诉内核在启动时载入哪个策略,在本章中提到的所有路径都是相对域策略目录路径/etc/selinux/[policy]/的,图1是在最新的Fedora 16系统上/etc/selinux/目录的简单列表输出:
图1 /etc/selinux/目录的简单列表输出
如上面所看到的,在系统上安装了一个策略目录:targeted。注意目录和策略子目录都用selinux_config_t类型进行标记的。
semodule和semanage命令管理策略的许多方面,semodule命令管理可载入策略模块的安装、更新和移除,它对可载入策略包起作用,它包括一个可载入策略模块和文件上下文消息,semanage工具管理添加、修改和移除用户、角色、文件上下文、多层安全(MLS)/多范畴安全(MCS)转换、端口标记和接口标记,关于这些工具的更多信息在它们的帮助手册中。
每个策略子目录包括的文件和文件如何标记必须遵守一个规范,这个规范被许多系统实用程序使用,帮助管理策略,通常,任何设计优良的策略源树都将正确安装策略文件,下面是targeted策略目录的列表输出,它就是一个典型,如图2所示:
图2 targeted策略目录的列表输出
如上所示:一个正在运行的系统不需要src/目录,它包括了安装的策略源树,要么是示例策略,要么是应用策略源树,实际上单片二进制策略文件存储在.policy/目录中的policy.[ver]文件中,这里的[ver]就是策略二进制文件的版本号,如policy.19,这就是系统启动时载入内核的文件。
四、管理网络服务的文件系统访问权限
在SELinux中,有一个非常重要的概念称为布尔变量,它通常用来在运行时改变SELinux的部分策略,而不需要重新定义和改写策略文件。并且,这些布尔变量在很大程度上也与许多网络服务的访问权限相关,比如对网络文件系统(NFS)的访问,对FTP的访问等等。
1.布尔变量的罗列和配置
通过列出系统中的布尔变量,可以知道与布尔变量相关的策略的开关情况(on或者是off状态),从而知道相关网络服务的访问权限状态。可以使用如图3命令进行罗列:
图3 查看系统布尔变量
上述结果中的SELinux boolean列列出了系统中的布尔变量名称,Description列则给出了该布尔变量的开关状态。比如,如下的布尔变量表示的意思是阻止ftp用户访问用户目录:
ftp_home_dir -> 关 Allow ftp to read and write files in the user home directories
如下命令可以仅仅给出布尔变量的开关状态,而不给出他们的具体描述信息,如图4所示:
#/usr/sbin/getsebool –a
图4 显示布尔变量的开关状态
并且,通过该命令可以查看具体的布尔变量(一个或者多个)的开关状态信息,如下所示:
#/usr/sbin/getsebool allow_console_login
#/usr/sbin/getsebool allow_console_login allow_cvs_read_shadow
使用setsebool命令可以设置布尔变量(改变其开关状态)。下面给出具体的例子来对其进行详细介绍,该例子表明如何来对httpd_can_network_connect_db布尔变量来进行状态设置,该布尔变量控制httpd服务器进程能否连接后台数据库系统:
(1)使用getsebool命令查看该布尔变量的缺省状态,表明该变量的缺省状态是off,即不允许httpd进程访问后端数据库服务器:
# /usr/sbin/getsebool httpd_can_network_connect_db
httpd_can_network_connect_db --> off
(2)使用setsebool命令改变该布尔变量的状态,从而使得httpd进程能够访问数据库服务器:
#/usr/sbin/setsebool httpd_can_network_connect_db on
改变成功后,可以继续使用getsebool命令进行查看:
#/usr/sbin/getsebool httpd_can_network_connect_db
(3)上述状态改变只是暂时性的,一旦系统重启,该变量状态将改变回初始状态,因此,可以使用如下命令永久性改变状态:
#/usr/sbin/setsebool -P httpd_can_network_connect_db on
2.网络服务对于文件系统的访问权限管理
对于大多数网络服务来说,各种网络服务缺省情况下都能使用具有各自的服务类型的文件,比如nfs服务可以使用nfs_t类型的文件,samba服务可以使用cifs_t类型的文件。然而,由于NFS和CIFS这两个共享文件系统的特殊性,HTTP服务和FTP服务都不能使用标记这两个文件系统类型的文件,因此,在实际使用过程中,用户需要对控制他们的布尔变量进行显式的状态修改,如下所示:
(1)对于Apache HTTP服务器
允许访问NFS文件系统,需要运行如下命令,修改布尔变量:
#/usr/sbin/setsebool –P httpd_use_nfs on
允许访问Samba文件系统,需要运行如下命令,修改布尔变量:
#/usr/sbin/setsebool –P httpd_use_cifs on
(2)对于Samba服务
允许共享NFS文件系统的文件,需要运行如下命令,修改布尔变量:
#/usr/sbin/setsebool –P samb_share_nfs on
(3)对于FTP服务器
允许访问NFS文件系统,需要运行如下命令,修改布尔变量:
#/usr/sbin/setsebool –P allow_ftpd_use_nfs on
允许访问Samba文件系统,需要运行如下命令,修改布尔变量:
#/usr/sbin/setsebool –P llow_ftpd_use_cifs on
(4)对于其他服务
可以使用如下命令来查找相关的布尔变量并根据上述的例子进行同样修改即可:
查找与NFS相关的布尔变量:
#/usr/sbin/semanage boolean –l | grep nfs
查找与Samba相关的布尔变量:
#/usr/sbin/semanage bo