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

简介:
应用强制访问控制管理网络服务
 
 
与传统的自主访问控制不同,强制访问控制具有更高的安全性。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 ,如需转载请自行联系原作者



相关实践学习
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
相关文章
|
30天前
|
机器学习/深度学习 自然语言处理 数据处理
大模型开发:描述长短期记忆网络(LSTM)和它们在序列数据上的应用。
LSTM,一种RNN变体,设计用于解决RNN处理长期依赖的难题。其核心在于门控机制(输入、遗忘、输出门)和长期记忆单元(细胞状态),能有效捕捉序列数据的长期依赖,广泛应用于语言模型、机器翻译等领域。然而,LSTM也存在计算复杂度高、解释性差和数据依赖性强等问题,需要通过优化和增强策略来改进。
|
1月前
|
存储 安全 网络安全
云端防御策略:融合云服务与网络安全的未来之路
在数字化浪潮的推动下,企业纷纷转向云计算以获取灵活性、可扩展性和成本效益。然而,随之而来的是日益复杂的网络威胁,它们挑战着传统的安全边界。本文将探讨如何通过创新的云服务模型和先进的网络安全措施来构建一个既可靠又灵活的安全框架。我们将分析云计算环境中的关键安全挑战,并提出一系列针对性的策略来加强数据保护,确保业务连续性,并满足合规要求。
29 2
|
1月前
|
数据库 Android开发 开发者
构建高效Android应用:采用Kotlin协程优化网络请求处理
【2月更文挑战第30天】 在移动应用开发领域,网络请求的处理是影响用户体验的关键环节。针对Android平台,利用Kotlin协程能够极大提升异步任务处理的效率和简洁性。本文将探讨如何通过Kotlin协程优化Android应用中的网络请求处理流程,包括协程的基本概念、网络请求的异步执行以及错误处理等方面,旨在帮助开发者构建更加流畅和响应迅速的Android应用。
|
1月前
|
数据采集 监控 安全
Go语言在网络安全中的应用
【2月更文挑战第24天】Go语言,作为一种高效且易于维护的编程语言,近年来在网络安全领域得到了广泛的应用。本文旨在探讨Go语言在网络安全中的应用,包括其在防火墙、入侵检测、网络爬虫以及Web安全等方面的应用,并分析了Go语言在网络安全领域的优势与前景。
|
4天前
|
存储 安全 网络安全
云端防御策略:融合云服务与网络安全的未来之路
【4月更文挑战第20天】 随着企业数字化转型的加速,云计算已成为支撑现代业务架构的关键。然而,伴随其发展的网络安全威胁也不断演变,对信息安全提出更高要求。本文将深入探讨在动态云环境中实现网络安全防护的策略和技术,包括最新的加密技术、身份验证机制以及入侵检测系统等。通过分析当前云服务中的安全挑战,并结合前沿的网络安全技术,旨在为读者提供一个关于如何在享受云计算便利的同时保障数据安全的全面视角。
|
6天前
|
存储 监控 安全
网络安全与信息安全:防范漏洞、应用加密、提升意识
【4月更文挑战第18天】 在数字化时代,网络安全与信息安全保障已成为维护国家安全、企业利益和个人隐私的关键。本文深入探讨网络安全的多面性,包括识别和防御网络漏洞、应用加密技术保护数据以及提升全民网络安全意识的重要性。通过对这些关键领域的分析,文章旨在为读者提供实用的策略和建议,以增强其网络环境的安全防护能力。
10 0
|
7天前
|
运维 安全 Cloud Native
安全访问服务边缘(SASE):网络新时代的安全与连接解决方案
SASE(安全访问服务边缘)是一种云基安全模型,结合了网络功能和安全策略,由Gartner在2019年提出。它强调身份驱动的私有网络、云原生架构和全面边缘支持,旨在解决传统WAN和安全方案的局限性,如高延迟和分散管理。SASE通过降低IT成本、提升安全响应和网络性能,应对数据分散、风险控制和访问速度等问题,适用于移动办公、多分支办公等场景。随着网络安全挑战的增加,SASE将在企业的数字化转型中扮演关键角色。
|
7天前
|
数据采集 机器学习/深度学习 数据挖掘
网络数据处理中的NumPy应用实战
【4月更文挑战第17天】本文介绍了NumPy在网络数据处理中的应用,包括数据预处理、流量分析和模式识别。通过使用NumPy进行数据清洗、格式化和聚合,以及处理时间序列数据和计算统计指标,可以有效进行流量分析和异常检测。此外,NumPy还支持相关性分析、周期性检测和聚类分析,助力模式识别。作为强大的科学计算库,NumPy在处理日益增长的网络数据中发挥着不可或缺的作用。
|
15天前
|
传感器 监控 安全
|
15天前
|
安全 SDN 数据中心

热门文章

最新文章