SElinux工作原理简介并演示chcon、semanage、restorecon的使用方法

目录

一.SElinux工作原理简介

1.system_u

2.object_r

3.httpd_sys_content_t

4.s0

二.SElinux策略的具体使用详情

1.restorecon

2.semanage

3.chcon


一.SElinux工作原理简介

通过mac方式管理进程,管理的目标是进程是否具有读取权限的文件(文件、目录、端口等),要使得进程和目标的安全上下文一致才能够顺利访问到资源(还要受文件资源的RWX等权限影响)。MAC可以针对特定的进程与特定的文件资源来进行权限的控制,即使你是root,在使用不同的进程时,你所能取得的权限并不一定是root,而得要看当时该进程的设置而定。这样一来就可以针对进程而不是用户对文件来进行访问控制。此外,这个进程也不能任意使用系统文件资源,因为每个文件资源也有针对进程设置可取用的权限。由于,整个系统进程那么多,文件那么多,所以SELinux也提供一些默认的策略(policy),并在该策略内提供多个规则,让你可以选择是否启用该控制规则。

#如下是我160主机的httpd的html目录的安全上下文内容,以ls -Z来查看,其中有4个字段,稍后作解释
[root@R9 www]# ls -Zl
total 0
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 24 Dec 23 21:38 ip
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 24 Dec 27 13:29 ip1

1.system_u

身份标识,root表示root、system_u表示进程程序、unconfined_u表示一般用户相关身份

2.object_r

角色字段,可以判断是属于程序、文件、用户中的哪一种,object_r表示文件或目录资源,system_r表示是进程

3.httpd_sys_content_t

类型字段,作用域哪一个域

4.s0

灵敏度,一般会有s0、s1、s2,数值越大灵敏度越高,与MLS和MCS相关

二.SElinux策略的具体使用详情

SElinux的开启和关闭在之前的文章已经介绍到,现在我们在关闭firewalld并且SElinux为Enforcing(Enforcing为强制限制,permissive为运行selinux但不强制,disabled为关闭selinux)的情况下进行演示,这里所有代码段均以httpd服务为例。

[root@R9 www]# systemctl status firewalld.service | grep ActiveActive: inactive (dead)
[root@R9 www]# getenforce 
Enforcing

1.restorecon

(1)这个命令可以将安全上下文修改为原始默认的状态,如下所示

[root@R9 www]# ls -Zl   #修改后安全上下文
total 0
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 24 Dec 23 21:38 ip
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 24 Dec 27 13:29 ip1
[root@R9 www]# restorecon -R /www/   #进行重置
[root@R9 www]# ls -ZL
system_u:object_r:default_t:s0 ip
system_u:object_r:default_t:s0 ip1

(2)可用参数

-R:将目录及其子目录一起修改

-v:将过程输出到屏幕上(详情)

2.semanage

(1)这个命令可以来进行查询和修改安全上下文设置,如下所示,我要修改我本机的html目录时就可以去查看httpd默认的安全上下文是怎样的,在后面就可以按照这个策略进行更改

[root@R9 www]# semanage fcontext -l | grep /var/www/html
/var/www/html(/.*)?/sites/default/files(/.*)?      all files          system_u:object_r:httpd_sys_rw_content_t:s0 
/var/www/html(/.*)?/sites/default/settings\.php    regular file       system_u:object_r:httpd_sys_rw_content_t:s0 
/var/www/html(/.*)?/uploads(/.*)?                  all files          system_u:object_r:httpd_sys_rw_content_t:s0 
/var/www/html(/.*)?/wp-content(/.*)?               all files          system_u:object_r:httpd_sys_rw_content_t:s0 
/var/www/html(/.*)?/wp_backups(/.*)?               all files          system_u:object_r:httpd_sys_rw_content_t:s0 
/var/www/html/[^/]*/cgi-bin(/.*)?                  all files          system_u:object_r:httpd_sys_script_exec_t:s0 
/var/www/html/cgi/munin.*                          all files          system_u:object_r:munin_script_exec_t:s0 
/var/www/html/configuration\.php                   all files          system_u:object_r:httpd_sys_rw_content_t:s0 
/var/www/html/munin(/.*)?                          all files          system_u:object_r:munin_content_t:s0 
/var/www/html/munin/cgi(/.*)?                      all files          system_u:object_r:munin_script_exec_t:s0 
/var/www/html/nextcloud/data(/.*)?                 all files          system_u:object_r:httpd_sys_rw_content_t:s0 
/var/www/html/owncloud/data(/.*)?                  all files          system_u:object_r:httpd_sys_rw_content_t:s0 

(2)可用参数

-l:查询

-a:增加安全上下文设置

-m:修改设置

-d:删除设置

(3)这里以一个例子介绍一部分semanage对于端口的管理

如下所示,我配置了80和8090端口的http服务,80端口chcon了安全上下文,8090端口为chcon安全上下文并且没有配置其的端口放行,在重启服务时就会报错了

[root@R9 www]# semanage port -l | grep http_port
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t            tcp      5988
[root@R9 www]# ls -Zl
total 0
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 24 Dec 23 21:38 ip
drwxr-xr-x. 2 root root system_u:object_r:default_t:s0           24 Dec 27 14:19 ip1
​
[root@R9 www]# cat /etc/httpd/conf.d/myweb.conf 
<VirtualHost 192.168.2.160>servername www.ssll.comDocumentRoot /www/ip<Directory "/www">AllowOverride NoneRequire all granted</Directory>
</VirtualHost>
<VirtualHost 192.168.2.160:8090>DocumentRoot /www/ip1<Directory "/www">AllowOverride NoneRequire all granted</Directory>
</VirtualHost>
​
[root@R9 www]# systemctl restart httpd
Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xeu httpd.service" for details.
[root@R9 www]# systemctl status httpd
× httpd.service - The Apache HTTP ServerLoaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)Active: failed (Result: exit-code) since Wed 2023-12-27 14:21:25 CST; 7s agoDuration: 46min 40.807sDocs: man:httpd.service(8)Process: 4553 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)Main PID: 4553 (code=exited, status=1/FAILURE)Status: "Reading configuration..."CPU: 25ms
​
Dec 27 14:21:15 R9 systemd[1]: Starting The Apache HTTP Server...
Dec 27 14:21:25 R9 httpd[4553]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:>
Dec 27 14:21:25 R9 httpd[4553]: (13)Permission denied: AH00072: make_sock: could not bind to address [::]:8090
Dec 27 14:21:25 R9 httpd[4553]: (13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:8090
Dec 27 14:21:25 R9 httpd[4553]: no listening sockets available, shutting down
Dec 27 14:21:25 R9 httpd[4553]: AH00015: Unable to open logs
Dec 27 14:21:25 R9 systemd[1]: httpd.service: Main process exited, code=exited, status=1/FAILURE
Dec 27 14:21:25 R9 systemd[1]: httpd.service: Failed with result 'exit-code'.
Dec 27 14:21:25 R9 systemd[1]: Failed to start The Apache HTTP Server.

接下来添加8090服务端口,可以看到重启服务成功并且8090端口已被添加成功,也可以成功访问

[root@R9 www]# semanage port -a -t http_port_t -p tcp 8090
[root@R9 www]# systemctl restart httpd
🔐 Enter TLS private key passphrase for fe80::20c:29ff:fe49:e52%ens160:443 (RSA) : *******                 
[root@R9 www]# ls -Zl
total 0
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 24 Dec 23 21:38 ip
drwxr-xr-x. 2 root root system_u:object_r:default_t:s0           24 Dec 27 14:19 ip1
[root@R9 www]# semanage port -l | grep http_port_t
http_port_t                    tcp      8090, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t            tcp      5988
​
[root@SLB ~]# curl 192.168.2.160:8090
hello

删除端口时可以这样做

[root@R9 www]# semanage port -d -t http_port_t -p tcp 8090

3.chcon

(1)这个命令用于修改安全上下文,如下所示我按照上面我查询到的策略进行修改后,能够顺利访问到目录内容

[root@R9 www]# ls -Zl
total 0
drwxr-xr-x. 2 root root system_u:object_r:default_t:s0 24 Dec 23 21:38 ip
drwxr-xr-x. 2 root root system_u:object_r:default_t:s0 24 Dec 27 13:29 ip1
[root@R9 www]# chcon -t httpd_sys_rw_content_t /www/ -R
[root@R9 www]# ls -Zl
total 0
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_rw_content_t:s0 24 Dec 23 21:38 ip
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_rw_content_t:s0 24 Dec 27 13:29 ip1
​
[root@SLB ~]# curl 192.168.2.160
192.168.2.160 

(2)可用参数

-R:将目录及其子目录一起修改

-t:跟安全上下文所要修改的字段内容

-u:跟身份标识

-r:跟角色字段

--reference=:这个表示按照哪个目录文件进行修改安全上下文

[root@R9 www]# restorecon -R /www   #按照httpd默认的html目录进行修改
[root@R9 www]# chcon --reference=/var/www/html -R /www
[root@R9 www]# ls -Zl
total 0
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 24 Dec 23 21:38 ip
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 24 Dec 27 13:29 ip1
​
[root@SLB ~]# curl 192.168.2.160
192.168.2.160 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创业公司该怎么进行季度绩效考核?

创业公司在绩效考核中面临的问题主要包括目标设定不清晰、时间安排不合理、绩效标准不明确、缺乏反馈和沟通、过分关注短期成果、资源不足以及文化差异等。这些问题可能单独或共同存在&#xff0c;导致绩效考核无法达到预期效果&#xff0c;甚至可能对员工的工作积极性和公司的…

Python-动态柱状图可视化

柱状图 1.基础柱状图1.1通过Bar构建基础柱状图1.2反转x轴&#xff0c;y轴1.3数值标签在右侧1.4总结 2.基础时间柱状图2.1掌握基础的时间线配置动态图表2.2创建时间线2.3自动播放2.4时间线设置主题2.5总结 3.GDP动态柱状图绘制3.1掌握列表的sort方法并配合配合lambda匿名函数完成…

【数据库系统概论】第5章-数据库完整性

文章目录 引言5.1 实体完整性5.2 参照完整性5.3 用户定义的完整性5.4 完整性约束命名子句5.6 触发器 引言 数据库的完整性是指数据的正确性和相容性。 正确性&#xff1a;符合现实语义、反映当前实际情况。性别必须为男或女。 相容性&#xff1a;数据库同一对象在不同关系表中…

MySQL 中的 ibdata1 文件过大如何处理?

ibdata1 是什么文件&#xff1f; ibdata1 是InnoDB的共有表空间&#xff0c;默认情况下会把表空间存放在一个名叫 ibdata1的文件中&#xff0c;日积月累会使该文件越来越大。 ibdata1 文件过大的解决办法 使用独享表空间&#xff0c;将表空间分别单独存放。MySQL开启独享表空…

刷新账号密码过期时间——脚本案例

OS账号默认30天密码过期&#xff0c;执行下面脚本刷新密码过期时间。 脚本先是从密码文件中读取用户和密码&#xff0c;再使用passwd命令行修改密码。然后过滤chage -l的关键信息判断密码是否修改成功。最后使用expect脚本对每个用户进行ssh登录并测试&#xff0c;确保…

Flutter 官方状态管理 Provider基本使用

当App的复杂性发展到一定程度,就会出现一个页面中不同深度的子Widget需要共享访问同一个数据状态,甚至不同页面需要共享同一个状态的情况,这时我们可能会想到InheritedWidget。InheritedWidget是 Flutter 中非常重要的一个功能型组件,它提供了一种在 Widget 树中从上到下共…

115基于matlab的用于铣削动力学建模的稳定性叶瓣图分析(stablity lobe)

基于matlab的用于铣削动力学建模的稳定性叶瓣图分析(stablity lobe)&#xff0c;程序已调通&#xff0c;可直接运行。 115matlab铣削动力学 (xiaohongshu.com)

生活常识-如何开社保证明(四川)

下载并打开天府市民云APP 注册后登陆 点击社保服务 点击社保证明 点击【四川省社会保险个人社保证明名(近24个月)】 点击下载 下载后点击【QQ发送给好友&#xff0c;然后发送给自己的电脑设备(我的电脑)】

Pthon Request库源码解读之__init__.py

首先我们需要了解下这个文件的功能&#xff1a; init.py 文件在 Python 中有多种用途&#xff0c;但当我们讨论通过 pip 安装的插件或包时&#xff0c;其主要用途是为了确保&#xff1a; 包的结构完整性&#xff1a; 当你尝试导入一个包&#xff08;文件夹&#xff09;时&#…

数据类型-变量-内存四区-指针

1、内存四区 1.1、数据类型的本质 1&#xff09;数据类型基本概念 类型是对数据的抽象类型相同的数据具有相同的表示形式、存储格式、相关的操作程序中使用的数据必定属于某种数据类型数据类型和内存 有关系C/C 引入数据类型&#xff0c;可以更方便地管理数据 2&#xff09…

laravel5.8中实现验证码组件的安装和验证

本篇文章主要讲解使用laravel5.8自带的验证码库实现验证码验证的效果教程。通过本教程你可以快速接入到自己的项目中开发相应的验证功能。 作者&#xff1a;任聪聪 (rccblogs.com) 日期&#xff1a;2023年12月17日 实际效果 安装步骤 步骤一、输入命令 composer require mews…

beego使用布局文件和模板文件进行页面渲染

在 Beego 框架中的控制器基类 Controller 中自定义一个方法&#xff0c;用于渲染模板文件并设置模板数据。 func (this *IndexController) display(tplname string) {this.Layout this.moduleName "/layout.html"this.TplName tplnamethis.LayoutSections make(…

小程序开发与移动应用开发有哪些区别?

小程序开发与移动应用开发&#xff1a;差异何在&#xff1f; 在数字化浪潮下&#xff0c;小程序和移动应用已成为人们日常生活中不可或缺的一部分。但你是否真正了解小程序开发与移动应用开发之间的区别&#xff1f;这篇文章将为你揭开两者之间的神秘面纱。 一、运行环境不同…

不限带宽是否意味着无限带宽

当今互联网发展迅速的时代&#xff0c;带宽成为了网络连接速度的重要指标之一。而对于许多用户来说&#xff0c;无限带宽似乎是一个理想的选择。不限带宽并不等于无限带宽。我将解释不限带宽的含义&#xff0c;并探讨其与无限带宽之间的区别。 不限带宽是指网络服务提供商&…

夸克 自动脚本 每次挖到自动输代码

一个bash脚本,功能是持续运行一个名为`mint-dft`的Yarn CLI命令,并在出现错误时自动重试。 代码解释: 1. `#!/bin/bash`: 这是shebang行,告诉系统使用/bin/bash来解析和执行这个脚本。 2. `export NODE_OPTIONS=--max_old_space_size=49152`: 这一行设置了环境变…

Navicat 年度报告 (2023) | 不忘初心,砥砺前行

#SUMMARY#年度报告 时光荏苒&#xff0c;转眼时间来到 2023 年与 2024 年交汇处。回顾 2023&#xff0c;数据库行业跌宕起伏&#xff0c;暗流涌动。作为数据库工具提供商 Navicat&#xff0c;我们也面临着诸多挑战与压力。一直以来&#xff0c;我们以用户体验为先、技术为本&a…

代理模式:中间者的故事

代理模式&#xff1a;中间者的故事 介绍需求分析代理模式代码实现代理模式整理和用途第一种用途第二种用途第三种用途第四种用途 总结 介绍 本文引用《大话设计模式》第七章节的内容进行学习分析&#xff0c;仅供学习使用 需求&#xff1a;小明拜托自己好朋友小王给他朋友小美…

Swift函数式编程——函数

目录 Swift函数式编程&#xff0d;函数 高阶函数&#xff08;Higher order function&#xff09; 一等函数&#xff08;First class function&#xff09; 闭包 函数柯里化&#xff08;Function Curring&#xff09; 函数式思维 使用函数解决问题 使用函数组合 总结 Sw…

解决IDEA 不能正确识别系统环境变量的问题

问题描述 本人laptop 上的是设置了GOOGLE_APPLICATION_CREDENTIALS 这个环境变量的&#xff0c; 正常java or python 的程序能基于这个环境变量使用 某个gcp service account 去访问GCP的资源 [gatemanmanjaro-x13 ~]$ env | grep -i google GOOGLE_APPLICATION_CREDENTIALS/…

2023年,写博客带给我的收获与成长

文章目录 前言写博客的心路历程膜拜写博客大佬博客大佬带来的诱惑尝试写博客坚持写博客 决定写博客的原因2023年写博客的成就博客的创作粉丝的增长博客专家成就商务合作 2024年对技术写作的展望 前言 没错&#xff0c;我就是那个考试睡大觉、作文空白交卷的王二蛋。面对写作&a…