应用强制访问控制管理网络服务

安全 网站安全
与传统的自主访问控制不同,强制访问控制具有更高的安全性。SELinux是强制访问控制机制的一个代表,本文将介绍什么是强制访问控制机制以及如何启动SELinux

与传统的自主访问控制不同,强制访问控制具有更高的安全性。SELinux是强制访问控制机制的一个代表,本文将介绍如何应用该机制来管理网络服务的文件系统访问权限,并以Fedora 16下的SELinux为例进行实例介绍。

一、强制访问控制机制简介

在传统的访问控制机制中,自主访问控制模型占主导地位。使用自主访问控制(discretionary access control,DAC)的系统可以让资源的拥有者指定哪些主体可以访问该资源。这种模型称为“自主型”是因为对访问的控制是由资源拥有者自主决定的。在DAC模型中,访问根据授予用户的权限来进行限制,这意味着客体的拥有者有权指定对这些客体的访问类型。如果一个组织采用了DAC模型,那么网络管理员可以让资源的拥有者控制哪些人可以访问他们的文件。DAC模型中最常见的实现方式是访问控制列表(access control list,ACL),这个列表由用户指定,由操作系统实施。我们使用的大多数操作系统都是基于自主型访问控制模型的,比如Windows、Macintosh和主流的Unix系统。

而在强制型访问(mandatory access control,MAC)模型中,数据的拥有者没有决定谁能访问这些文件的权力,是由操作系统最后做出决定,并且可能会覆盖数据拥有者的设置。这种模型更为结构化并更加严格,一般基于安全标签系统来实现。用户被赋予一个安全级别(秘密、机密、绝密等),且数据也被分成了多个类别。这种分类存储在资源的安全标签里面。分类标签指明了用户访问一个文件时必备的可信级别。

当系统接到一个客体访问请求时,它根据主体的安全级别和客体的安全类别作出决策。主体如何访问数据的规则由管理层制定,由管理员配置和管理,由操作系统来进行实施,由安全技术支持。安全标签和各个客体附在一起,所以每一个文件、目录和设备都有其自己的安全标签以及分类信息。一个用户可能具有秘密(Secret)的访问级别,他要访问的数据具有绝密(Top Secret)的安全标签。这种情况下用户会被拒绝访问,因为他的安全级别不等于或低于客体的安全类别。目前,最常见的MAC系统是由美国国家安全局(NSA)和安全计算(Secure Computing)公司开发的SELinux。在较高版本的Linux发行套件中,如Red Hat Enterprise Linux(RHEL)5,RHEL6,Fedora 1至Fedora 16等版本中,都包含对SELinux的支持。

二、如何启动和关闭SELinux

使用SELinux的前提启动它。启动和禁用SELinux的步骤主要包括:1)修改其配置文件;2)执行重启。

首先需要介绍一下SELinux的主配置文件。主配置文件/etc/selinux/config控制系统下一次启动过程中载入哪个策略,以及系统运行在哪个模式下,可以使用sestatus命令确定当前SELinux的状态,下面显示了一个config文件的例子:

 

SELinux模式(由上述例子中第6行的SELINUX选项确定):可以被设置为enforcing,permissive或disabled三种:

1) 在enforcing模式下,策略被完整执行,这是SELinux的主要模式,应该在所有要求增强Linux安全性的操作系统上使用。

2) 在permissive模式下,策略规则不被强制执行,而只是进行审核。除此之外,SELinux不会影响系统的安全性,这个模式在调试和测试一个策略时非常有用。

3) 在disabled模式下,SELinux内核机制是完全关闭的,只有系统启动时策略载入前系统才会处于disabled模式,这个模式和permissive模式有所不同。permissive模式不会拒绝任何访问,只是进行审核;而在disabled模式下,SELinux将不会有任何动作。特别地,在enforcing和permissive模式或disabled模式之间切换时要小心,当返回enforcing模式时,通常会导致文件标记不一致。SELinux配置文件中的模式设置由init使用,在它载入初始策略前配置SELinux使用。

以下是启动SELinux的详细步骤示意:

(1)编辑配置文件

根据上面的介绍,编辑确定SELinux的运行模式和活动策略(见下面配置文件中的黑体部分)即可:

 

(2)使用getenforce命令和sestatus命令查看SELinux的运行模式和详细上下文信息:

#/usr/sbin/getenforce

#/usr/sbin/sestatus

(3)使用root用户身份重启系统即可:

#reboot

同理,禁用SELinux的步骤就是在编辑配置文件时设为“SELINUX=diabled”。

三、使用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/目录的简单列表输出:

 #p#

图1  /etc/selinux/目录的简单列表输出 

如上面所看到的,在系统上安装了一个策略目录:targeted。注意目录和策略子目录都用selinux_config_t类型进行标记的。

semodule和semanage命令管理策略的许多方面,semodule命令管理可载入策略模块的安装、更新和移除,它对可载入策略包起作用,它包括一个可载入策略模块和文件上下文消息,semanage工具管理添加、修改和移除用户、角色、文件上下文、多层安全(MLS)/多范畴安全(MCS)转换、端口标记和接口标记,关于这些工具的更多信息在它们的帮助手册中。

每个策略子目录包括的文件和文件如何标记必须遵守一个规范,这个规范被许多系统实用程序使用,帮助管理策略,通常,任何设计优良的策略源树都将正确安装策略文件,下面是targeted策略目录的列表输出,它就是一个典型,如图2所示:

 

如上所示:一个正在运行的系统不需要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

 

 #p#

图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

 

【编辑推荐】

  1. 攻击MAC再出新招 黑客或可控制MAC电脑
  2. 关于域控制器的5大安全建议
  3. 解读准入控制 保障企业内网安全
  4. iPhone或Android可被远程控制
  5. 准入控制:让企业网络摘掉“公共场所”的帽子
责任编辑:Writer 来源: TechTarget中国
相关推荐

2020-06-03 09:00:20

firewall-cm网络服务系统运维

2010-09-09 14:46:12

2010-04-20 13:54:24

Oracle强制访问

2020-02-28 17:21:39

华为

2014-06-26 14:10:44

2009-07-27 13:32:37

2013-12-24 07:17:25

虚拟网络网络虚拟化

2013-12-23 10:14:36

虚拟网络

2009-02-20 10:11:00

网络服务网络管理

2011-07-15 10:03:06

网络服务虚拟应用

2011-08-22 11:00:14

nagios

2011-08-22 11:00:17

nagios

2011-08-22 11:00:10

nagios

2010-04-20 13:44:58

Oracle强制访问

2011-12-06 09:55:13

网络访问控制NAC

2011-08-22 10:30:29

nagios

2012-04-13 16:21:47

亚马逊云计算CloudSerach

2023-04-25 10:22:00

云计算网络部署

2013-04-28 10:18:42

SDNSDN应用4-7层

2011-08-03 10:01:28

网络智能手机
点赞
收藏

51CTO技术栈公众号