SELinux进阶篇 应用目标策略管理非限制进程和用户

简介:

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

 

非限制的进程运行在非限制域中。比如,init进程运行在非限制的initrc_t域中,非限制的kernel进程运行在kernel_t域中,非限制的用户运行在unconfined_t域中。对于非限制的进程,SELinux策略规则仍然适用...

 

 

一、管理非限制进程

非限制的进程运行在非限制域中。比如,init进程运行在非限制的initrc_t域中,非限制的kernel进程运行在kernel_t域中,非限制的用户运行在unconfined_t域中。对于非限制的进程,SELinux策略规则仍然适用,然而有关允许进程运行在非限制域中的规则允许几乎所有的访问。因此,如果一个非限制进程被黑客控制的话,那么SELinux将不能阻止黑客获取对系统资源和数据的访问权限,当然DAC规则仍然适用,因为SELinux机制是在DAC层次上附加一层对Linux的增强,而不是简单地替代DAC。

下面将给出一个具体的例子来说明Apache Http服务器(httpd进程)在非限制的条件下运行,是如何能够访问本应由Samba服务器访问的数据的。值得注意的是:在Fedora 10中,httpd进程默认是限制运行在httpd_t域中的。下面的例子假设用户系统中安装了httpd、wget(一种类似于Windows系统下Flashget软件的多线程下载工具)、settroubleshoot-server、audit等工具包,并且SELinux机制运行在enforcing模式下。

(1)运行sestatus命令来确认Linux中SELinux是运行的,且运行在enforcing模式下,运行结果与图1所示一致:

图1  运行sestatus命令来确认Linux中SELinux是否运行

(2)以root用户身份,创建一个新的测试文件testfile2,该文件路径为httpd进程的工作目录下,如下所示:

 
  
  1. #touch /var/www/html/testfile2 

(3)使用ls -z命令来查看新创建的文件的SELinux上下文信息,如图2所示:

图2  使用ls-Z命令查看新创建文件的SELinux上下文信息

从上述结果中可以清楚看到:Linux用户默认运行在非限制域中,所以testfile2文件上下文信息标识为unconfined_u。并且,RBAC用于进程,而不是文件。另外,对于文件来说角色也没有特别的含义,因此赋予其object_r为较为通用的角色。而httpd_sys_content类型则允许httpd进程对该文件进行访问。

(4)采用chron命令暂时对文件的标识进行改变。一旦系统重启,该改变将会失效。若要永久改变文件的标识,可以采用semanage命令进行操作。使用root用户身份,运行如下命令来将文件类型改为由Samba服务器可访问的类型:

 
  
  1. #chcon -t samba_share_t /var/www/html/testfile2 

然后,采用ls -z命令来查看修改后的结果:

 
  
  1. # ls -Z /var/www/html/testfile2  
  2. -rw-r--r--  root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/testfile2 

(5)在将httpd进程从限制修改为非限制之前,需要将该进程停止,使用如下命令:

 
  
  1. #/sbin/service httpd stop 

(6)以root用户身份运行如下命令,来改变httpd进程的类型,以将其从限制改为非限制:

 
  
  1. #chcon -t unconfined_exec_t /usr/sbin/httpd 

然后,使用ls -z命令来查看进程,以确保修改生效,如下所示:

 
  
  1. # ls -Z /usr/sbin/httpd  
  2. -rwxr-xr-x  root root system_u:object_r:unconfined_exec_t:s0 /usr/sbin/httpd 

(7)为了使httpd在运行时该修改生效,需要重新启动httpd进程,如图6-22所示:

(8)采用ps -ez | grep httpd命令来查看httpd进程运行在非限制域中的情况,如图3所示:

图3  启动httpd进程并查看

(9)在有权限许可的目录下,运行如下命令来测试httpd进程运行在非限制情况下的效果,如图4所示:

图4  wget命令成功执行

上述的运行结果显示,该命令能够成功运行。虽然httpd进程原来没有访问标记为samba_share_t类型文件的权限,然而由于修改,httpd进程现在运行在非限制环境下(unconfined_t),所以SELinux转为执行DAC机制,而wget命令可以访问该文件,所以成功执行。

(10)测试结束后,需要使用如下命令来恢复该httpd进程本来的运行限制:

 
  1. #restorecon -v /user/sbin/httpd 

然而,采用如下命令来进行查看,发现httpd进程又从非限制状态恢复为限制状态:

 
  1. # ls -Z /usr/sbin/httpd  
  2. -rwxr-xr-x  root root system_u:object_r:httpd_exec_t:s0 /usr/sbin/httpd   

(11)使用如下命令重新启动httpd,以时修改在httpd进程运行时生效,并通过ps -ez命令来查看进程的运行状态,如图5所示:

 
  1. #/sbin/service httpd restart  
  2. # ps -eZ | grep httpd  
  3. unconfined_u:system_r:httpd_t:s0 2963 ?        00:00:00 httpd  
  4. unconfined_u:system_r:httpd_t:s0 2965 ?        00:00:00 httpd  
  5. unconfined_u:system_r:httpd_t:s0 2966 ?        00:00:00 httpd  
  6. unconfined_u:system_r:httpd_t:s0 2967 ?        00:00:00 httpd  
  7. unconfined_u:system_r:httpd_t:s0 2968 ?        00:00:00 httpd  
  8. unconfined_u:system_r:httpd_t:s0 2969 ?        00:00:00 httpd  
  9. unconfined_u:system_r:httpd_t:s0 2970 ?        00:00:00 httpd  
  10. unconfined_u:system_r:httpd_t:s0 2971 ?        00:00:00 httpd  
  11. unconfined_u:system_r:httpd_t:s0 2972 ?        00:00:00 httpd  
  12. unconfined_u:system_r:httpd_t:s0 2973 ?        00:00:00 httpd 

图5  恢复httpd进程的运行限制

到此为止,上述例子详细的演示了SELinux是如何通过限制进程的运行来保证Linux系统安全的,也看到了如果将进程改为unconfined运行状态的安全隐患,因此提醒广大用户在实际应用过程中切忌不要随便将进程默认的限制运行状态改为非限制状态,以免给Linux系统带来不必要的麻烦和安全隐患。

二、管理限制和非限制用户

在前面的介绍中曾经提到过,每个传统的Linux用户在SELinux中都被映射为一个SELinux用户。这使得Linux用户能够继承在SELinux用户上的访问控制。用户可以使用semanage login -l命令来查看两类用户之间的具体映射情况,如图6所示:

图6  使用semanage命令查看用户映射

 

举个例子,在Fedora 10中,Linux用户默认被映射到SELinux的_default_login中,从而映射为unconfined_u用户类型。

下面通过一个更加具体的在SELinux中添加新用户的例子,来说明SELinux是怎么来映射Linux用户的。该例子的具体操作步骤如下,如图7所示:

图7  在SELinux中添加新用户

(1)以root用户身份,运行useradd命令,添加一个新用户liyang:

 
  1. #useradd liyang 

(2)以root用户身份,运行passwd命令,修改该用户的密码:

 
  1. #passwd liyang 

(3)退出当前的root运行身份,以liyang的身份重新登录Linux。重新登录后,SELinux将为用户liyang生成SELinux上下文,查看该用户的上下文:

 
  1. # id -Z  
  2. unconfined_u:unconfined_r:unconfined_t:s0  
  3.  

可以清楚地看到,当Linux添加一个新用户时,SELinux将默认地映射该用户为unconfined_u类型,角色为unconfined_r,以及unconfined_t级别。

限制和非限制用户都需要接受可执行和可写的内存检查,并且受MCS和MLS机制的约束。如果一个非限制的用户执行了一个从unconfined_t域向一个允许的域转变的应用程序,非限制用户仍要接受那个转表到的域的限制。这个就保证了即使一个用户是非限制的,这个应用也是受限的,因此,软件的漏洞所引起的风险就能得到限制

















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

相关文章
|
9天前
|
负载均衡 Java 调度
探索Python的并发编程:线程与进程的比较与应用
本文旨在深入探讨Python中的并发编程,重点比较线程与进程的异同、适用场景及实现方法。通过分析GIL对线程并发的影响,以及进程间通信的成本,我们将揭示何时选择线程或进程更为合理。同时,文章将提供实用的代码示例,帮助读者更好地理解并运用这些概念,以提升多任务处理的效率和性能。
|
23天前
|
安全 开发者 Python
Python IPC大揭秘:解锁进程间通信新姿势,让你的应用无界连接
【9月更文挑战第11天】在编程世界中,进程间通信(IPC)如同一座无形的桥梁,连接不同进程的信息孤岛,使应用无界而广阔。Python凭借其丰富的IPC机制,让开发者轻松实现进程间的无缝交流。本文将揭开Python IPC的神秘面纱,介绍几种关键的IPC技术:管道提供简单的单向数据传输,适合父子进程间通信;队列则是线程和进程安全的数据共享结构,支持多进程访问;共享内存允许快速读写大量数据,需配合锁机制确保一致性;套接字则能实现跨网络的通信,构建分布式系统。掌握这些技术,你的应用将不再受限于单个进程,实现更强大的功能。
45 5
|
2月前
|
人工智能 PyTorch 算法框架/工具
Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程
【8月更文挑战第6天】Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程
Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程
|
3天前
|
数据采集 消息中间件 并行计算
进程、线程与协程:并发执行的三种重要概念与应用
进程、线程与协程:并发执行的三种重要概念与应用
14 0
|
17天前
|
消息中间件 程序员 数据处理
探究操作系统中的进程间通信(IPC)机制及其在现代软件开发中的应用
本文深入探讨了操作系统中的核心概念——进程间通信(IPC),揭示了其在现代软件开发中的关键作用。通过对各种IPC机制如管道、消息队列、共享内存等的详细分析,本文旨在为读者提供一个清晰的理解框架,帮助他们掌握如何在实际应用中有效利用这些技术以实现进程间的协同工作。此外,文章还将探讨IPC在高并发环境下的性能优化策略,以及如何避免常见的IPC编程错误。通过结合理论与实践,本文不仅适合希望深入了解操作系统原理的技术人员阅读,也对那些致力于提升软件质量和开发效率的程序员具有重要参考价值。
18 0
|
2月前
|
Kubernetes Shell 测试技术
在Docker中,可以在一个容器中同时运行多个应用进程吗?
在Docker中,可以在一个容器中同时运行多个应用进程吗?
|
2月前
|
JavaScript Windows
NodeJs——如何获取Windows电脑指定应用进程信息
NodeJs——如何获取Windows电脑指定应用进程信息
69 0
|
3月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
3月前
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
88 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
|
2月前
|
算法 Linux 调度
探索进程调度:Linux内核中的完全公平调度器
【8月更文挑战第2天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。本文将深入探讨Linux内核中的完全公平调度器(Completely Fair Scheduler, CFS),一个旨在提供公平时间分配给所有进程的调度器。我们将通过代码示例,理解CFS如何管理运行队列、选择下一个运行进程以及如何对实时负载进行响应。文章将揭示CFS的设计哲学,并展示其如何在现代多任务计算环境中实现高效的资源分配。
下一篇
无影云桌面