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

简介:
应用强制访问控制管理网络服务
 
 
与传统的自主访问控制不同,强制访问控制具有更高的安全性。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)公司开发的 SE Linux。而在较高版本的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文件的例子:
 
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled – No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
      targeted - Targeted processes are protected.
      mls – Multi Level Security protection.
SELINUXTYPE=targeted
 
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的运行模式和活动策略(见下面配置文件中的黑体部分)即可:
 
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled – No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
      targeted - Targeted processes are protected.
      mls – Multi Level Security protection.
SELINUXTYPE=targeted
 
(2)使用getenforce命令和sestatus命令查看SELinux的运行模式和详细上下文信息:
#/usr/sbin/getenforce
 
#/usr/sbin/sestatus
 
(3)使用root用户身份重启系统即可:
#reboot
 
同理,禁用SELinux的详细步骤如下:
(1)       编辑配置文件
根据上面的介绍,编辑确定SELinux的运行模式和活动策略(见下面配置文件中的黑体部分)即可
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled – No SELinux policy is loaded.
SELINUX=diabled
# SELINUXTYPE= can take one of these two values:
      targeted - Targeted processes are protected.
      mls – Multi Level Security protection.
SELINUXTYPE=targeted
 
(2)       使用getenforce命令和sestatus命令查看SELinux的运行模式和详细上下文信息:
#/usr/sbin/getenforce
 
#/usr/sbin/sestatus
 
(3)       使用root用户身份重启系统即可
#reboot
三、使用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 bool










本文转自samsunglinuxl51CTO博客,原文链接: http://blog.51cto.com/patterson/741960 ,如需转载请自行联系原作者



相关文章
|
4月前
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic,深度学习探索者。深耕TensorFlow与PyTorch,分享框架对比、性能优化与实战经验,助力技术进阶。
|
6月前
|
监控 安全 Shell
管道符在渗透测试与网络安全中的全面应用指南
管道符是渗透测试与网络安全中的关键工具,既可用于高效系统管理,也可能被攻击者利用实施命令注入、权限提升、数据外泄等攻击。本文全面解析管道符的基础原理、实战应用与防御策略,涵盖Windows与Linux系统差异、攻击技术示例及检测手段,帮助安全人员掌握其利用方式与防护措施,提升系统安全性。
259 6
|
9月前
|
人工智能 监控 安全
NTP网络子钟的技术架构与行业应用解析
在数字化与智能化时代,时间同步精度至关重要。西安同步电子科技有限公司专注时间频率领域,以“同步天下”品牌提供可靠解决方案。其明星产品SYN6109型NTP网络子钟基于网络时间协议,实现高精度时间同步,广泛应用于考场、医院、智慧场景等领域。公司坚持技术创新,产品通过权威认证,未来将结合5G、物联网等技术推动行业进步,引领精准时间管理新时代。
|
5月前
|
机器学习/深度学习 人工智能 算法
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic带你深入卷积神经网络(CNN)核心技术,从生物启发到数学原理,详解ResNet、注意力机制与模型优化,探索视觉智能的演进之路。
532 11
|
8月前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
431 61
|
6月前
|
数据采集 存储 数据可视化
Python网络爬虫在环境保护中的应用:污染源监测数据抓取与分析
在环保领域,数据是决策基础,但分散在多个平台,获取困难。Python网络爬虫技术灵活高效,可自动化抓取空气质量、水质、污染源等数据,实现多平台整合、实时更新、结构化存储与异常预警。本文详解爬虫实战应用,涵盖技术选型、代码实现、反爬策略与数据分析,助力环保数据高效利用。
377 0
|
6月前
|
安全 Linux
利用Libevent在CentOS 7上打造异步网络应用
总结以上步骤,您可以在CentOS 7系统上,使用Libevent有效地构建和运行异步网络应用。通过采取正确的架构和代码设计策略,能保证网络应用的高效性和稳定性。
194 0
|
Ubuntu 网络协议 Unix
02理解网络IO:实现服务与客户端通信
网络IO指客户端与服务端通过网络进行数据收发的过程,常见于微信、QQ等应用。本文详解如何用C语言实现一个支持多客户端连接的TCP服务端,涉及socket编程、线程处理及通信流程,并分析“一消息一线程”模式的优缺点。
415 0
|
9月前
|
机器学习/深度学习 算法 测试技术
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
本文探讨了基于图的重排序方法在信息检索领域的应用与前景。传统两阶段检索架构中,初始检索速度快但结果可能含噪声,重排序阶段通过强大语言模型提升精度,但仍面临复杂需求挑战
310 0
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
|
8月前
|
监控 安全 Linux
AWK在网络安全中的高效应用:从日志分析到威胁狩猎
本文深入探讨AWK在网络安全中的高效应用,涵盖日志分析、威胁狩猎及应急响应等场景。通过实战技巧,助力安全工程师将日志分析效率提升3倍以上,构建轻量级监控方案。文章详解AWK核心语法与网络安全专用技巧,如时间范围分析、多条件过滤和数据脱敏,并提供性能优化与工具集成方案。掌握AWK,让安全工作事半功倍!
297 0