Linux之SELinux自主访问控制系统
什么是SELinux
selinux(security enhanced linux)安全强化的linux,它是一个linux内核模块,也是linux的一个安全子系统。
SELinux的作用
selinux的主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)
SELinux的权限管理机制
DAC(自主访问控制)
在没有使用 SELinux 的操作系统中,决定一个资源是否能被访问的因素是:某个资源是否拥有对应用户的权限(读、写、执行)。
只要访问这个资源的进程符合以上的条件就可以被访问。
而最致命问题是,root 用户不受任何管制,系统上任何资源都可以无限制地访问。
这种权限管理机制的主体是用户
MAC(强制访问控制)
在使用了 SELinux 的操作系统中,决定一个资源是否能被访问的因素除了上述因素之外,还需要判断每一类进程是否拥有对某一类资源的访问权限。
这样一来,即使进程是以 root 身份运行的,也需要判断这个进程的类型以及允许访问的资源类型才能决定是否允许访问某个资源。进程的活动空间也可以被压缩到最小。
Http root
即使是以 root 身份运行的服务进程,一般也只能访问到它所需要的资源。即使程序出了漏洞,影响范围也只有在其允许访问的资源范围内。安全性大大增加。
这种权限管理机制的主体是进程
MAC又分为两种模式
- 类别安全(MCS)模式
- 多级安全(MLS)模式
SELinux的工作模式
更改模式 在 /etc/selinux/config 中设定,重启才能生效
如果只更改permissive、enforcing只需要使用命令setenforce 0或1即可
- enforcing
强制模式,违反 SELinux 规则的行为将被阻止并记录到日志中 - permissive
宽容模式,违反 SELinux 规则的行为只会记录到日志中。一般为调试用。 - disabled
关闭 SELinux。
SELinux 基本概念 (进程文件标签和目标文件标签匹配)
主体(Subject)
可以完全等同于进程。
注:为了方便理解,如无特别说明,以下均把进程视为主体。
对象(Object)
被主体访问的资源。可以是文件、目录、端口、设备等。
注:为了方便理解,如无特别说明,以下均把文件或者目录视为对象。
政策和规则(Policy & Rule)
系统中通常有大量的文件和进程,为了节省时间和开销,通常我们只是选择性地对某些进程进行管制。
而哪些进程需要管制、要怎么管制是由政策决定的。
一套政策里面有多个规则。部分规则可以按照需求启用或禁用(以下把该类型的规则称为布尔型规则)。
规则是模块化、可扩展的。在安装新的应用程序时,应用程序可通过添加新的模块来添加规则。用户也可以手动地增减规则。
在redhat 7 系统中,有三套政策,分别是:
- targeted:对大部分网络服务进程进行管制。这是系统默认使用的政策(下文均使用此政策)。
- minimum:以 targeted 为基础,仅对选定的网络服务进程进行管制。一般不用。
- mls:多级安全保护。对所有的进程进行管制。这是最严格的政策,配置难度非常大。一般不用,除非对安全性有极高的要求。
政策可以在 /etc/selinux/config 中设定。
安全上下文(Security Context)
安全上下文是 SELinux 的核心。
安全上下文又分为:
- 进程安全上下文
- 文件安全上下文
一个进程安全上下一般对应多个文件安全上下文。
只有两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由政策中的规则决定。
文件安全上下文由文件创建的位置和创建文件的进程所决定。而且系统有一套默认值,用户也可以对默认值进行设定。
需要注意的是,单纯的移动文件操作并不会改变文件的安全上下文。
安全上下文的结构及含义
安全上下文有四个字段,分别用冒号隔开。形如:system_u:object_r:admin_home_t:s0。
常用命令及SELinux语句详解
SELINUX配置文件
/etc/selinux/config
#查看级别
[root@web ~]# getenforce
#使用命令行切换级别
setenforce 0
setenforce 1
#修改级别
#直接编辑/etc/selinux/config
SELINUX=enforcing
#修改完成后重启才能生效
#查看selinux状态
[root@web ~]# sestatus
#查看selinux值
[root@web ~]# ll -Z
#查看context值的变化
[root@web ~]# touch 1
[root@web ~]# cp 1 /tmp
[root@web ~]# ll -Z /tmp
#该文件的context值会随着目录的作用和环境的不同而发生改变,该值会继承上一级目录的context值 ll -Z
system_u:object_r:admin_home_t:s0
用户身份:角色:类型(标签): 安全级别
这条语句通过:划分成了四段,第一段 system_u 代表的是用户,第二段 object_r 表示的是角色,第三段是SELinux中最重要的信息,admin_home 表示的是类型,最后一段 s0 是跟MLS、MCS相关的东西,暂时不需要管
①system_u指的是SElinux用户,root表示root账户身份,user_u表示普通用户无特权用户,system_u表示系统用户,通过用户可以确认身份类型,一般搭配角色使用。身份和不同的角色搭配时有权限不同,虽然可以使用su命令切换用户但对于SElinux的用户并没有发生改变,账户之间切换时此用户身份不变,在targeted策略环境下用户标识没有实质性作用。
②object_r一般为文件目录的角色、system_r一般为进程的角色,在targeted策略环境中用户的角色一般为system_r。用户的角色类似用户组的概念,不同的角色具有不同的身份权限,一个用户可以具备多个角色,但是同一时间只能使用一个角色。在targeted策略环境下角色没有实质作用,在targeted策略环境中所有的进程文件的角色都是system_r角色。
③admin_home文件和进程都有一个类型,SElinux依据类型的相关组合来限制存取权限
Touch /.autorelabel 系统当中默认启用了selinux去读取一个文件,而这个文件里是否由内容他都要去读,读完之后它会给这些系统默认的文件设置安全值
#修改context值,所以如果没有这一步你么系统也跨不出这一步所以系统就不会正常启动
④s0 mls
更改文件的标签值
在家目录下新建一个文件test
[root@redhat ~]# touch test
查看标签值
在根目录创建一个文件newtest
[root@redhat ~]# touch /newtest
查看标签值
方法一:
使用chcon命令
现在将家目录文件的标签值更改为根目录文件的标签值
[root@redhat ~]# chcon -t etc_runtime_t test
查看是否更改成功
如果要回复之前的标签值
[root@redhat ~]# restorecon -v test
Relabeled /root/test from unconfined_u:object_r:etc_runtime_t:s0 to unconfined_u:object_r:admin_home_t:s0
[root@redhat ~]# ll -Z test
-rw-r--r--. 1 root root unconfined_u:object_r:admin_home_t:s0 0 Sep 6 00:02 test
方法二:
使用semanage命令
将根目录的newtest标签值改为admin_home_t
[root@redhat ~]# semanage fcontext -a -t admin_home_t /newtest
查看
此时只是修改默认值,还未生效
执行restorecon
[root@redhat ~]# restorecon -v /newtest
Relabeled /newtest from unconfined_u:object_r:etc_runtime_t:s0 to unconfined_u:object_r:admin_home_t:s0
查看
如何在SELinux开启的情况下访问自定义的web服务
新建web服务目录
[root@redhat ~]# mkdir -p /www/openlab
添加访问的页面信息
[root@redhat ~]# echo this is openlab > /www/openlab/index.html
配置
[root@redhat ~]# vim /etc/httpd/conf.d/vhost.conf
//添加如下<VirtualHost 192.168.159.128:80>DocumentRoot /www/openlabServerName 192.168.159.128
</VirtualHost><Directory /www>AllowOverride noneRequire all granted
</Directory>
重启服务、关闭防火墙
[root@redhat ~]# systemctl restart httpd
[root@redhat ~]# systemctl stop firewalld
查看当前selinux状态
[root@redhat ~]# getenforce Enforcing //强制执行-----》开启状态
访问
[root@redhat ~]# curl http://192.168.159.128
此时为欢迎界面,并没有成功访问我们自定义的资源文件信息
修改当前自定义的资源文件标签值
查看默认web服务访问的资源文件的标签值
修改当前自定义资源文件的标签值
[root@redhat html]# chcon -t httpd_sys_content_t /www/openlab/index.html
[root@redhat html]# ll -Z /www/openlab/index.html
-rw-r--r--. 1 root root unconfined_u:object_r:httpd_sys_content_t:s0 16 Sep 6 01:30 /www/openlab/index.html
查看
在seLinux开启的情况下访问web服务的自定义端口
修改配置自定义端口、并监听
[root@redhat html]# vim /etc/httpd/conf.d/vhost.confLISTEN 8909 //监听
<VirtualHost 192.168.159.128:8909> //自定义的端口DocumentRoot /www/openlabServerName 192.168.159.128
</VirtualHost><Directory /www>AllowOverride noneRequire all granted
</Directory>
重启服务
发现报错
[root@redhat html]# systemctl restart httpd
Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xe" for details.
查看原因
[root@redhat html]# systemctl status httpd
无法开启这个端口
Sep 06 02:18:31 redhat httpd[5987]: (13)Permission denied: AH00072: make_sock: could not bind to address [::]:8909
Sep 06 02:18:31 redhat httpd[5987]: (13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:8909
查看web服务端口的标签值
[root@redhat ~]# semanage port -l | grep -w 80
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
修改当前你web服务访问的端口类型
[root@redhat html]# semanage port -a -t http_port_t -p tcp 8909
[root@redhat html]# semanage port -l | grep -w 8909
http_port_t tcp 8909, 8090, 80, 81, 443, 488, 8008, 8009, 8443, 9000
重启服务
[root@redhat html]# systemctl restart httpd
通过指定端口访问测试
Linux之SELinux自主访问控制系统相关推荐
- SELinux与强制访问控制系统应用
几乎可以肯定每个人都听说过 SELinux (更准确的说,尝试关闭过),甚至某些过往的经验让您对 SELinux 产生了偏见.不过随着日益增长的 0-day 安全漏洞,或许现在是时候去了解下这个在 ...
- linux 7 没有权限访问,技术|RHCSA 系列(十三): 在 RHEL 7 中使用 SELinux 进行强制访问控制...
RHCSA 认证:SELinux 精要和控制文件系统的访问 尽管作为第一级别的权限和访问控制机制是必要的,但它们同样有一些局限,而这些局限则可以由安全增强 Linux(Security Enhance ...
- linux 禁止app权限,SELinux文件访问安全策略和app权限配置
SELinux文件访问安全策略和app权限配置 Android开发 基于android6.0版本的SELinux文件访问安全策略 在android6.0以后的版本,google采用了SELinux的文 ...
- Linux中SELinux理解
SELinux是Security Enhaanced Linux 的英文缩写,字面上的意思就是安全强化的Linux 其实SELinux是在进行进程.文件等详细权限配置时依据的一个内核模块.由于启动网络 ...
- linux配置selinux为许可模式,SELinux安全配置,详细说明
SELinux之一:SELinux基本概念及基本配置 2013年06月29日 ⁄ Linux管理, 网络安全 ⁄ 共 7741字 ⁄ 暂无评论 ⁄ 被围观 13,281 views+ SELinux从 ...
- Fabric-iot:物联网中基于区块链的访问控制系统
原文连接https://ieeexplore.ieee.org/abstract/document/8964343/ 摘要:物联网设备具有一些特殊特征,如移动性.性能受限.分布式部署等,使得传统的集中 ...
- Linux系统selinux目录,SELinux深入理解
1. 简介 SELinux带给Linux的主要价值是:提供了一个灵活的,可配置的MAC机制. Security-Enhanced Linux (SELinux)由以下两部分组成: Kernel SEL ...
- linux基础配置脚本,Linux中selinux基础配置教程详解
selinux(Security-Enhanced Linux)安全增强型linux,是一个Linux内核模块,也是Linux的一个安全子系统. 三种模式: Enforcing:强制模式,在selin ...
- 局域网服务器linux访问不了网,linux局域网不能相互访问
1.关闭防火墙 /etc/init.d/iptable stop 2.关闭selinux 1.临时禁用SELinux: root@server# setenforce 0 这样重启服务器之后,还是会启 ...
- 解决Linux局域网不能相互访问
文章目录 1. 关闭防火墙 2. 关闭selinux 解决Linux局域网不能相互访问 1. 关闭防火墙 /etc/init.d/iptable stop 2. 关闭selinux 临时禁用SELin ...
最新文章
- 容量法和库仑法的异同点_【图文专辑】第十讲:容量法高锰酸盐指数的测定
- 全部python编程语言-编程语言高质量代码的优秀Python工具
- zabbix在windows服务器下监控
- 支付宝接口参数调用相关
- 产品经理该如何全局思考和分析行业产业链?
- 浅说 XSS和CSRF
- 不再惧怕!二叉树结构相关算法总结 | 原力计划
- HelloWorld Windows Live Writer
- 深度学习2.0-26.Regularization减轻overfitting
- 朋友圈我快看不下去了!
- python简单爬虫代码-Python爬虫――写出最简单的网页爬虫
- vim编辑器及目录结构
- 河北科怡档案管理系统连接服务器,档案信息管理系统web端使用说明.docx
- win10便签常驻桌面_便签,草图,截屏草图,一个win10自带的小工具统统解决!...
- adaboost.M1与adaboost.M2差别比较
- 【听】《斯坦福极简经济学》,国家调控
- 2022年中国汽车事件数据记录器(EDR)市场现状研究分析与发展前景预测报告
- jquery 筛选选择器 下拉菜单
- 数控加工仿真系统 - FANUC OI 铣床编程笔记(上)
- 数据库基础知识(八)
热门文章
- torch --用法
- 从零实现深度学习框架——逻辑回归简介
- 网络博客营销之博客设置和优化
- python小技巧 - 如何成为Python高手
- numpy 矩阵拼接_Python实践代码总结第10集(Numpy)
- 对比select中的distinct影响
- Ros学习笔记(一)创建工作空间
- [OHOS ERROR] clang not found, install it please
- 解决git push报错error: failed to push some refs to 的问题
- 7-3 奇偶分家 (10 分)