您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

理解Linux下的SELinux

时间:2020-09-03 16:01:50  来源:  作者:

长久以来,每当遇到授权问题或者新安装的主机,我的第一反应是通过setenforce 0命令禁用SElinux,来减少产生的权限问题,但是这并不是一个良好的习惯。这篇文章尝试对SELinux的基本概念和用法进行简单介绍,并且提供一些更深入的资料。

Linux下默认的接入控制是DAC,其特点是资源的拥有者可以对它进行任何操作(读、写、执行)。当一个进程准备操作资源时,Linux内核会比较进程和资源的UID和GID,如果权限允许,就可以进行相应的操作。此种方式往往会带来一些问题,如果一个进程是以root的身份运行,也就意味着他能够对系统的任何资源进行操作,而且不被限制。 假如我们的软件存在漏洞呢?这个往往是一个灾难性的问题。因此,就引出了另外的一种安全接入控制机制mac,Linux下的一种现实是SELinux,也就是我们将要讨论的内容。

基本概念

Mandatory Access Control (MAC)

SELinux 属于MAC的具体实现,增强了Linux系统的安全性。MAC机制的特点在于,资源的拥有者,并不能决定谁可以接入到资源。具体决定是否可以接入到资源,是基于安全策略。而安全策略则是有一系列的接入规则组成,并仅有特定权限的用户有权限操作安全策略。

一个简单的例子,则是一个程序如果要写入某个目录下的文件,在写入之前,一个特定的系统代码,将会依据进程的Context和资源的Context查询安全策略,并且根据安全策略决定是否允许写入文件。

Flask Security Architecture

SELinux的软件设计架构是参照Flask,Flask是一种灵活的操作系统安全架构,并且在Fluke research operating system中得到了实现。Flask的主要特点是把安全策略执行代码和安全策略决策代码,划分成了两个组件。安全策略决策代码在Flask架构中称作Security Server。除了这两个组件以外,另外一个组件Vector Cache(AVC), 主要提供策略决策结果的缓存,以此提高Security Server的性能。其具体执行流程为,安全策略执行代码通过AVC查询Security Server的安全策略决策结果,并将其缓存以备下次使用。

理解Linux下的SELinux

 

The Flask Security Architecture: System Support for Diverse Security Policies

Linux Security Module

前面两部分介绍了MAC机制和Flask架构,最终SELinux的实现是依赖于Linux提供的Linux Security Module框架简称为LSM。其实LSM的名字并不是特别准确,因为他并不是Linux模块,而是一些列的hook,同样也不提供任何的安全机制。LSM的的重要目标是提供对linux接入控制模块的支持。

理解Linux下的SELinux

 

Linux Security Module Framework

 

LSM 在内核数据结构中增加了安全字段,并且在重要的内核代码(系统调用)中增加了hook。可以在hook中注册回调函数对安全字段进行管理,以及执行接入控制。

SELinux

Security Enhanced Linux(SELinux) 为Linux 提供了一种增强的安全机制,其本质就是回答了一个“Subject是否可以对Object做Action?”的问题,例如 Web服务可以写入到用户目录下面的文件吗?其中Web服务就是Subject而文件就是Object,写入对应的就是Action。

依照上面的例子,我们引入了几个概念,分别是Subject、Object、Action、以及例子没有体现出来的Context:

  • Subject: 在SELinux里指的就是进程,也就是操作的主体。
  • Object: 操作的目标对象,例如 文件
  • Action: 对Object做的动作,例如 读取、写入或者执行等等
  • Context: Subject和Object都有属于自己的Context,也可以称作为Label。Context有几个部分组成,分别是SELinux User、SELinux Role、SELinux Type、SELinux Level,每个部分的具体含义,将在下一章介绍。

用户程序执行的系统调用(例如读取文件),都要被SELinux依据安全策略进行检查。如果安全策略允许操作,则继续,否则将会抛出错误信息给应用程序。SELinux决策的同时还需要Subject和Object的Context信息,确定所属的User、Role和Type等信息,以此查询对应的安全策略进行决策。SELinux同样也使用了AVC机制用于缓存决策结果,以此来提高性能。

SELinux Context

进程和文件都有属于自己的Context信息,Context分为几个部分,分别是 SELinux User、Role、Type 和一个可选的Level信息。SELinux在运行过程中将使用这些信息查询安全策略进行决策。

  • SELinux User:每一个Linux用户都会映射到SELinux用户,每一个SELinux User都会对应相应的Role。
  • SELinux Role:每个Role也对应几种SELinux Type,并且充当了User和Type的‘中间人’
  • SELinux Type:安全策略使用SELinux Type制定规则,定义何种Domian(Type)的Subject,可以接入何种Type的Object。
理解Linux下的SELinux

 

 

显示进程的Context

~]# ps -Z
LABEL                             PID TTY          TIME CMD
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 9509 pts/1 00:00:00 sudo
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 9515 pts/1 00:00:00 su
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 9516 pts/1 00:00:00 bash
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 9544 pts/1 00:00:00 ps

显示文件的Context信息

~]# ls -Z
system_u:object_r:admin_home_t:s0 anaconda-ks.cfg

临时修改文件的SELinux Type 为htttpd_sys_content_t

~]# chcon -t httpd_sys_content_t file-name

SELinux 的运行状态

SELinux 有三个运行状态,分别是disabled, permissive 和 enforcing

  • Disable: 禁用SELinux,不会给任何新资源打Label,如果重新启用的话,将会给资源重新打上Lable,过程会比较缓慢。
  • Permissive:如果违反安全策略,并不会真正的执行拒绝操作,替代的方式是记录一条log信息。
  • Enforcing: 默认模式,SELinux的正常状态,会实际禁用违反策略的操作

查看当前的运行状态

~]# getenforce
Enforcing

临时改变运行状态为Permissive

~]# setenforce 0
~]# getenforce
Permissive

临时改变运行状态为 Enforcing

~]# setenforce 1
~]# getenforce
Enforcing

使用sestatus可以查看完整的状态信息

~]# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinuxSELinux root directory:         /etc/selinuxLoaded policy name:             targetedCurrent mode:                   enforcingMode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      30

SELinux Log

SELinux 的Log日志默认记录在/var/log/audit/audit.log

~]# cat /var/log/audit/audit.log
type=AVC msg=audit(1223024155.684:49): avc:  denied  { getattr } for  pid=2000 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=399185 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:samba_share_t:s0 tclass=file

/var/log/message 也会记录相应的信息,例如:

May 7 18:55:56 localhost setroubleshoot: SELinux is preventing httpd (httpd_t) "getattr" to /var/www/html/file1 (samba_share_t). For complete SELinux messages. run sealert -l de7e30d6-5488-466d-a606-92c9f40d316d

SELinux 配置文件

SELinux的配置文件位于/etc/selinux/config。默认配置文件主要两部分,一个是SELinux的运行状态和SELinuxType。直接在配置文件中修改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

SELinux Booleans

Booleans允许在运行时修改SELinux安全策略。

列出所有的Booleans选项

~]# semanage boolean -l
SELinux boolean                State  Default Description
smartmon_3ware                 (off  ,  off)  Determine whether smartmon can...
mpd_enable_homedirs            (off  ,  off)  Determine whether mpd can traverse...

临时修改httpd_can_network_connect_db状态为开启

~]# setsebool httpd_can_network_connect_db on

深入研究

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/selinux_users_and_administrators_guide/index#chap-Security-Enhanced_Linux-Working_with_SELinux

 

http://www.kroah.com/linux/talks/ols_2002_lsm_paper/lsm.pdf

 

https://www.cs.cmu.edu/~dga/papers/flask-usenixsec99.pdf

 

https://people.redhat.com/duffy/selinux/selinux-coloring-book_A4-Stapled.pdf



Tags:SELinux   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
长久以来,每当遇到授权问题或者新安装的主机,我的第一反应是通过setenforce 0命令禁用SELinux,来减少产生的权限问题,但是这并不是一个良好的习惯。这篇文章尝试对SELinux的基本...【详细内容】
2020-09-03  Tags: SELinux  点击:(101)  评论:(0)  加入收藏
1. 前言本文主要讲解如何临时或永久地禁用SELinux。如何临时或永久地禁用SELinuxLinux被认为是当今最安全的操作系统之一,这是因为它杰出的安全特性,如SELinux(安全增强的Linu...【详细内容】
2020-07-04  Tags: SELinux  点击:(89)  评论:(0)  加入收藏
请先掌握上面默认网站浏览访问及页面文件的修改方法,然后进行修改网页数据的主目录,实现自定义网站数据主目录的操作。1、网站数据主目录修改把默认网站主目录/var/www/html改...【详细内容】
2019-12-13  Tags: SELinux  点击:(135)  评论:(0)  加入收藏
SELinux介绍Security-Enhanced Linux ,是美国国家安全局(NSA=The National Security Agency)和SCC(Secure Computing Corporation)开发的 Linux的一个强制访问控制的安全模...【详细内容】
2019-11-08  Tags: SELinux  点击:(119)  评论:(0)  加入收藏
▌简易百科推荐
作用显示文件或目录所占用的磁盘空间使用命令格式du [option] 文件/目录命令功能显示文件或目录所占用的磁盘空间一些写法的区别du -sh xxx 显示总目录的大小,但是不会列出...【详细内容】
2021-12-23  mitsuhide1992    Tags:du命令   点击:(12)  评论:(0)  加入收藏
什么是linux内核linux就像是一个哲学的最佳实践。如果非要对它评价,我真的不知道该怎么赞叹,我只能自豪地说着:“linux的美丽简直让人沉醉。”我只能说是我处在linux学习的修炼...【详细内容】
2021-12-23  linux上的码农    Tags:linux内核   点击:(15)  评论:(0)  加入收藏
本文将比较 Linux 中 service 和 systemctl 命令,先分别简单介绍这两个命令的基础用法,然后进行比较。从 CentOS 7.x 开始,CentOS 开始使用 systemd 服务来代替 service服务(dae...【详细内容】
2021-12-23  软件架构    Tags:systemctl   点击:(13)  评论:(0)  加入收藏
mv是move的缩写,可以用来移动文件或者重命名文件名,经常用来备份文件或者目录。命令格式mv [选项] 源文件或者目录 目标文件或者目录命令功能mv命令中第二个参数类型的不同(...【详细内容】
2021-12-17  入门小站    Tags:mv命令   点击:(23)  评论:(0)  加入收藏
大数据技术AI Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料 98篇原创内容 -->公众号 Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处...【详细内容】
2021-12-17  仙风道骨的宝石骑士    Tags:sed命令   点击:(21)  评论:(0)  加入收藏
Node是个啥?  写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性地拿了下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段...【详细内容】
2021-12-15  linux上的码农    Tags:node   点击:(21)  评论:(0)  加入收藏
难道只有我一个人觉得Ubuntu的unity桌面非常好用吗?最近把台式机上面的Ubuntu 16.04格式化了,装了黑苹果用了一周,不得不说,MacOS确实很精美,软件生态比Linux丰富很多,比Windows简...【详细内容】
2021-12-14  地球末日村    Tags:ubuntu   点击:(34)  评论:(0)  加入收藏
简介Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。输出信息含义执行net...【详细内容】
2021-12-13  窥镜天    Tags:Linux netstat   点击:(26)  评论:(0)  加入收藏
对于较多数量的文件描述符的监听无论是select还是poll系统调用都显得捉襟见肘,poll每次都需要将所有的文件描述符复制到内核,内核本身不会对这些文件描述符加以保存,这样的设计...【详细内容】
2021-12-13  深度Linux    Tags:Linux   点击:(16)  评论:(0)  加入收藏
今天,我们来了解下 Linux 系统的革命性通用执行引擎-eBPF,之所以聊着玩意,因为它确实牛逼,作为一项底层技术,在现在的云原生生态领域中起着举足轻重的作用。截至目前,业界使用范...【详细内容】
2021-12-10  架构驿站    Tags:eBPF   点击:(24)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条