应用SELinux中的目标策略限制进程运行

简介:

原文请见:http://netsecurity.51cto.com/art/201110/295978.htm

 

一、安装SELinux相关的安装包

虽然在有的Linux发行套件中已经缺省安装了SELinux(例如Fedora 10和Red Hat Enterprise Linux 5、6),然而用户还是需要了解具体安装SELinux所需要的安装包,下面对他们进行简要介绍,主要包括如下几个部分:

Policycoreutils:提供与SELinux相关的命令,比如semanage,restorecon,audit2allow,semodule,load_policy,以及setsebool等,来操作和管理SELinux。

Policycoreutils-gui:提供图形化的工具system-config-selinux来管理SELinux。

Selinux-policy:提供SeLinux应用策略。该应用策略包括了所有的SELinux策略,并作为其他诸如目标策略(targeted policy)的基础使用。

Selinux-policy-policy:提供SELinux策略。对于目标策略,安装selinux-policy-targeted包,对于MLS策略,则安装selinux-policy-mls包。需要说明的是:在Fedora 8中,strict策略与目标策略结合在一起。

Setroubleshoot-server:翻译SELinux拒绝操作信息,成为sealert软件可以查看的详细描述信息。

Setools,setools-gui和setools-console:这些安装包提供了与SELinux有关的策略分析和检索、审计日志监控、文件上下文管理等命令和工具。

Libselinux-utils:提供诸如avsstat,getenforce,getsebool,matchpathcon,selinuxconlist,selinuxdefcon,selinuxenabled,setenforce,togglesebools等工具。

Mcstrans:提供对SELinux上下文中级别(比如s0-s0:c0.c1023)信息的翻译工作,在缺省情况下该软件包不安装。

二、使用与SELinux有关的日志文件

SELinux有许多相关的日志文件来记录在运行过程中对操作的拒绝日志,以便用户在后续过程中进行审计评估。在缺省情况下,SELinux将拒绝日志写入到/var/log/audit/audit.log文件中,该文件的部分内容显示如图1所示:

图1 /var/log/audit/audit.log文件的部分内容显示

图1 /var/log/audit/audit.log文件的部分内容显示

另外,如果setroubleshooted运行的话,在/var/log/audit/audit.log中的记录将被翻译成容易理解和阅读的方式,保存在/var/log/messages文件中:

图2  var/log/messages文件的部分输出

图2  var/log/messages文件的部分输出

当然,拒绝信息被送到不同的地方,这要根据不同的守护进程而定表1列出了对应于不同的守护进程的日志文件的路径:

表1 SELinux日志文件列表
守护进程
日志文件
auditd on
/var/log/audit/audit.log
Auditd off; rsyslogd on
/var/log/messages
Setroubleshootd, rsylogd, auditd on
/var/log/audit/audit.log翻译后存入/var/log/messages

为了启动上述的守护进程,需要来分别配置auditd,rsyslogd以及setroubleshootd来使他们在系统启动时自动运行,可以以root身份运行下述命令:

#/sbin/chkconfig -levels 2345 auditd on
#/sbin/chkconfig -levels 2345 rsyslogd on
#/sbin/chkconfig -levels 2345 setroubleshootd on

并且,可以使用如下命令检查这些守护进程是否正常运行:

#/sbin/service auditd status
#/sbin/service rsyslogd status
#/sbin/service setroubleshootd status

 

三、启动和禁用SELinux

启动和禁用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

四、目标策略原理

Targeted策略是从strict示例策略衍生而来的,它的结构和组织几乎是一样的,但strict策略更趋向于最大化使用SELinux所有特性,为大部分程序提供强壮的安全保护,而targeted策略的目标是隔离高风险程序,使用targeted策略的好处是一方面可以向Linux系统添加大量的安全保护,同时又尽量少影响现有的用户程序,targeted策略主要集中于面向网络的服务(即那些暴露在外任意遭受黑客攻击的组件),targeted策略是RHEL和Fedora系统上标准的策略,因为它在增强安全性和减少对现有应用程序影响之间达到了一个很好的平衡。

如果安装了targeted示例策略,可以在/etc/selinux/targeted/src/policy/目录下看到它的源文件,从各个方面来看,targeted示例策略源与strict示例源都非常相似。

Targeted示例策略和strict示例策略之间主要的差异是使用了无限制的域类型unconfined_t,并移除了所有其他用户域类型,如sysadm_t和user_t,这也意味着基本的角色结构也被移除了,所有用户都以角色system_r运行,几乎所有的用户运行的程序都以unconfined_t域类型执行。当然,无限制域和限制域都需要接受可执行和可写的内存检查。在默认情况下,运行在无限制域下的主体不能分配可写和可执行的内存,这个机制降低了系统遭受缓冲区溢出攻击(buffer overflow attack)的风险。当然,这些内存检查可以通过设置下面需要详细介绍的布尔变量来关掉,它使得SELinux策略可以在运行时得到修改。

用户可以在./domain/unconfined.te中找到unconfined域定义,注意在targeted示例策略中,strict策略文件admin.te和user.te不再位于./domains/目录下,这些文件为strict示例策略定义了各种各样的用户域,每一个都具有受限的特权,在targeted示例策略中,所有程序都以unconfined_t域类型运行,除非它们都明确地指定了域类型(因此称其为targeted),本质上unconfined域可以访问所有的SELinux类型,使它免除SELinux安全控制(因此成为unconfined)。在strict示例策略中,./domains/program/包括许多策略模块,每个模块代表一个或多个域类型和关联的类型,以及为特定程序制定的规则。在targeted示例策略中,这个目录包括的文件要少得多,这些就是目标。

目标示例策略模块与strict策略中策略模块类似,例如:strict ping模块和targeted ping模块是一致的,但有部分targeted模块只是简单地定义类型使域不受限制(不是targeted),例如:如果查看crond的targeted策略(crond.te),会发现有一行unconfined_domain(crond_t)。这个宏在targeted示例中定义在./policy/macros/global_macros.te文件中,它将crond域类型提供了所有SELinux访问权,使得它不受限制,如果用户将其域strict版本(/etc/selinux/strict/src/policy/domains/program/crond.te)crond模块进行比较,会看到它们之间有很大的差异,在targeted策略中,crond被认为是不受限制的域,但在这两个策略中ping却保留是strict域。

五、应用目标策略限制进程运行

几乎所有的服务进程都在限制下运行。并且,大多数以root身份运行的系统进程(比如说passwd进程)都是受限制域性的。当进程受限制时,它只能在自己限制的域内运行,例如Web服务进程httpd只能运行在httpd_t域内。如果一个受限制的进程被黑客攻击并控制了,根据SELinux策略配置,这个黑客也仅仅只能访问这个受限制的域,因此攻击所带来的危害也比传统的Linux小了很多。

以下通过一个具体的限制进程的例子(RHEL或者Fedora系统中的例子)来说明SELinux是如何将进程限制在自己的域内运行的。这个例子以用户非常熟悉且常用的Apache服务器中的httpd进程为例,来介绍SELinux是如何阻止httpd进程来访问由其他域管理的文件类型的。

(1)运行sestatus命令来确认Linux中SELinux是运行的,它运行在enforcing模式下,该模式可以简单理解为SELinux的完全运行模式,它可以进行强制访问控制),且确保采用了目标策略,如图1命令所示:

图1  使用sestatus确认SELinux是否运行

图1  使用sestatus确认SELinux是否运行

上述运行结果表明SELinux运行在enforcing模式下,且采用了目标策略。

(2)采用Linux中的root用户权限,使用如下命令在httpd的工作目录中创建一个新的文件:

#touch /var/www/html/testfile

(3)运行如下命令来查看该文件的SELinux上下文信息:

 

# ls -Z /var/www/html/testfile

-rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/testfile

从上述结果可以清楚地看到:在默认情况下,Linux用户是非限制的,因此刚创建的testfile文件的SELinux上下文中的类型标记为unconfined_u。RBAC访问控制机制是用于进程的,不是用于文件。并且,角色对于文件来说也没有什么太大的含义,因此上述结果中的object_r角色也仅仅是一个用于文件的通用角色。在/proc目录下,与进程相关的文件可以采用system_r角色。另外,结果中的httpd_sys_content_t类型允许httpd进程访问该文件。

(4)以Linux的root用户身份,运行下述命令来运行httpd进程,如图2所示:

图2  成功启动httpd进程

图2  成功启动httpd进程

(5)切换到一个Linux用户具有权限的目录下,运行如下命令,图3所示结果为该命令能够正确的执行并下载文件:

图3  wget正确执行并下载文件

图3  wget正确执行并下载文件

(6)使用chcon命令来对文件的类型进行重新标识。然而,这样的标识不是永久性的修改,一旦系统重启,该标识就会改变回去。对于文件类型的永久性改变,需要采用semanage命令,这个命令在后面将进行详细介绍。下面,以root用户的身份,运行图4所示chcon命令来将上面步骤中创建的testfile文件的类型改为由Samba进程使用的文件;然后,运行ls -z /var/www/html/testfile命令来查看改变的结果,如图4所示:

图4  chcon命令运行结果

图4  chcon命令运行结果

(7)在传统的Linux中httpd进程可以访问testfile文件,下面需要尝试一下在SELinux中,该进程是否能够成功访问testfile文件。如步骤(5)所示,再次运行该命令进行文件下载工作,发现命令运行失败,文件没有权限下载,运行结果如图5所示:

图6  wget命令执行失败

图6  wget命令执行失败

通过上述7个步骤的详细演示可以得知:虽然传统的Linux的DAC机制允许httpd进程访问testfile文件,然而SELinux的MAC机制却拒绝该访问操作。原因在于:该文件的类型(samba_share_t)httpd进程不能访问,因此SELinux拒绝了该操作。同时,SELinux对这些操作日志进行了详细的记载,以方便系统管理员事后进行审计和处理,可以查看/var/log/messages文件,如图7所示:

图7  /var/log/messages文件图示

图7  /var/log/messages文件图示

另外,相关的错误日志也可以查看/var/log/audit/audit.log文件,如图8所示:

type=AVC msg=audit(1241564654.246:26): avc: denied { getattr } for pid

图8  /var/log/audit/audit.log文件图示

图8  /var/log/audit/audit.log文件图示

并且,由于该操作牵涉到httpd服务进程,由于该服务也有自己的日志文件,因此,也可以通过/var/log/httpd/error_log文件进行查看,如图9所示:

图9  /var/log/httpd/error_log文件图示

图9  /var/log/httpd/error_log文件图示
















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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
7天前
|
算法 大数据 调度
深入理解操作系统:进程管理与调度策略
【4月更文挑战第27天】 在现代计算机系统的核心,操作系统扮演着至关重要的角色。它不仅管理硬件资源,还为应用程序提供必要的服务。其中,进程管理是操作系统的一个关键组成部分,它负责创建、执行以及终止进程。而进程调度策略则是确保系统高效运行的基石。本文将探讨操作系统中的进程管理机制及其调度策略,分析它们如何影响系统性能,并讨论当前的挑战及未来可能的发展方向。
|
7天前
|
弹性计算 Dubbo Serverless
Serverless 应用引擎操作报错合集之阿里函数计算中,生成图片时进程卡住如何解决
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
16 3
|
3天前
|
Linux Shell 调度
【Linux系列】fork( )函数原理与应用详解——了解【父子进程及其特性】(代码演示,画图帮助理解,思维导图,精简)(11)
【Linux系列】fork( )函数原理与应用详解——了解【父子进程及其特性】(代码演示,画图帮助理解,思维导图,精简)(11)
|
4天前
|
安全 算法 网络安全
构筑网络长城:网络安全漏洞解析与防御策略深入理解操作系统:进程管理与调度策略
【4月更文挑战第30天】 在数字化时代,网络安全已成为维护信息完整性、确保数据流通安全和保障用户隐私的关键。本文将深入探讨网络安全的核心问题——安全漏洞,并分享关于加密技术的最新进展以及提升个人和企业安全意识的有效方法。通过对常见网络威胁的剖析,我们旨在提供一套综合性的网络防御策略,以助力读者构建更为坚固的信息安全防线。 【4月更文挑战第30天】 在现代操作系统的核心,进程管理是维持多任务环境稳定的关键。本文将深入探讨操作系统中的进程概念、进程状态转换及进程调度策略。通过分析不同的调度算法,我们将了解操作系统如何平衡各进程的执行,确保系统资源的高效利用和响应时间的最优化。文中不仅剖析了先来先
|
5天前
|
算法 Linux 调度
深入理解操作系统之进程调度策略
【4月更文挑战第29天】 在多任务操作系统中,进程调度策略是核心组件之一,它决定了处理器资源的分配。不同于常规的摘要重述内容,本文将通过分析不同的进程调度算法,揭示它们对系统性能的影响,以及在不同应用场景下的适用性。文章首先概述了操作系统中的进程概念和调度的重要性,然后详细探讨了几种主流的调度策略,包括先来先服务(FCFS)、短作业优先(SJF)、轮转调度(RR)及多级反馈队列(MFQ)。最后,文章评估了这些策略在现代操作系统中的应用,并提出了未来可能的发展趋势。
|
5天前
|
机器学习/深度学习 人工智能 算法
深入理解操作系统的进程调度策略
【4月更文挑战第29天】 本文旨在探讨操作系统中的核心机制之一——进程调度。通过对不同进程调度算法的比较分析,我们不仅揭示了各种算法背后的原理和设计理念,还讨论了它们在现代多核处理器环境下的性能表现和适用场景。文章首先回顾了进程调度的基本概念,随后详细阐述了几种经典调度策略,包括先来先服务、短作业优先以及时间片轮转等。接着,本文通过模拟实验对比了这些策略在不同工作负载下的表现,并提出了改进的调度方案。最后,文章展望了未来进程调度研究的方向,特别是在人工智能和机器学习领域的应用前景。
|
5天前
|
算法 安全 调度
深入理解操作系统:进程管理与调度策略
【4月更文挑战第29天】 在本文中,我们将深入探讨操作系统的核心组件之一——进程管理。首先,我们将解释进程的概念以及它们在操作系统中的作用。接着,我们将详细讨论不同的进程调度策略,包括先来先服务、短作业优先和轮转调度等。此外,我们还将分析这些调度策略的优缺点,并探讨它们在不同场景下的应用。最后,我们将展望操作系统进程管理的未来发展趋势。
|
5天前
|
算法 Linux 调度
深入理解操作系统的进程调度策略
【4月更文挑战第29天】 在多任务操作系统中,进程调度策略是核心组件之一,它直接关系到系统资源的利用效率及用户体验。本文将探讨现代操作系统中的几种主要进程调度算法——从简单的先来先服务(FCFS)到复杂的多级反馈队列(MLFQ)和公平共享调度(Fair Share Scheduling, FSS)。我们将剖析每种策略的工作原理、优势、局限性以及它们在实际操作系统中的应用实例。通过比较分析,文章旨在为读者提供一个全面的视角,以理解不同调度策略如何影响操作系统的性能和行为。
|
6天前
|
算法 调度 UED
深入理解操作系统中的进程调度策略
【4月更文挑战第28天】 在多任务操作系统中,进程调度策略是决定系统性能和响应能力的关键因素。本文将探讨操作系统中进程调度的基本原理、不同调度算法的特点及其适用场景,并通过分析比较它们的优缺点,提供一个全面的视角来理解操作系统如何管理运行中的进程。通过深入了解这些调度策略,读者可以更好地把握操作系统的行为模式,以及如何在特定应用中选择合适的调度策略以优化系统表现。
|
8天前
|
负载均衡 算法 Linux
深入理解操作系统中的进程调度策略
【4月更文挑战第26天】 在多任务操作系统中,进程调度策略是核心组件之一,负责决定哪个进程将获得CPU时间以及何时执行。本文旨在剖析现代操作系统中几种主要的进程调度算法,包括它们各自的工作原理、优势与局限性。我们将探讨先来先服务(FCFS)、短作业优先(SJF)、轮转调度(RR)和多级反馈队列等策略,并分析其对系统性能的影响。通过比较这些策略在不同场景下的表现,我们得出了每种调度策略的适用环境和最佳实践。