在RHEL8中如何使用 SELinux

news2024/7/4 5:41:17
本章主要介绍在RHEL8中如何使用 SELinux。
  • 了解什么是 SELinux
  • 了解 SELinux 的上下文
  • 配置端口上下文
  • 了解SELinux的布尔值
  • 了解SELinux的模式
在 Windows系统中安装了一些安全软件后,当执行某个命令时,如果安全软件认为这个
命令对系统是一种危害,则会阻止这个命令继续运行。例如,在powershell中创建一个用户
net user tom /add,安全软件会认为这个操作是不安全的,然后会阻止,如图26-1所示。

RHEL/CentOS 中的SELinux实现的是类似的功能,SELinux全称是Security-Enhanced
Linux,目的是提高系统的安全性。当我们执行某个操作时,如果SELinux认为此操作有危
险,则会拒绝进一步的访问。
26.1 了解上下文
在开启了SELinux 的情况下,SELinux 会为每个文件、每个进程都分配一个标签,这个标
签我们称为上下文(context),后续说的标签和上下文是同一个概念,查看上下文时需要
加上Z选项。例如,查看进程的上下文,命令如下。
[root@pp ~]# ps axZ | grep -v grep | grep httpd
system_u:system_r:httpd_t:s0      36960 ?        Ss     0:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0      36961 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0      36962 ?        Sl     0:01 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0      36963 ?        Sl     0:01 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0      36964 ?        Sl     0:01 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0      37245 ?        Sl     0:01 /usr/sbin/httpd -DFOREGROUND
[root@pp ~]# 
可以看到,httpd进程的上下文为httpd_t。
查看文件的上下文,命令如下。
[root@pp ~]# ls -dZ /var/www/html/
system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
[root@pp ~]# 
可以看到,/var/www/html的上下文为httpd_sys_content_t。
特定上下文的进程,只能访问特定上下文的文件,上下文为httpd_t的进程可以访问上下
文为httpd_sys _content_t的文件或目录。
如图26-2所示,假设一个xx进程的标签是aa-p,它能访问
标签为aa-f的文件,所以xx进程访问文件aa是没问题的,因
为标签匹配了。但是xx进程访问文件bb时却是访问不了
的,即使文件bb的权限为777也是访问不了的,因为文件
bb的标签是bb-f。
下面做一个测试。
在server上创建目录/web,并写一些测试数据到/web/index.html中,命令如下。
[root@pp ~]# mkdir /web
[root@pp ~]# echo 555 > /web/index.html
[root@pp ~]# 
查看/web 的上下文,命令如下。
[root@pp ~]# ls -dZ /web/
unconfined_u:object_r:default_t:s0 /web/
[root@pp ~]# 
可以看到,/web 的上下文为 default_t。
把/web软链接到/var/www/html/www,命令如下。
[root@pp ~]# ln -s /web /var/www/html/www
[root@pp ~]# 
这里的www是/web的软链接(快捷方式),当我们在地址栏中输
入“192.168.26.100/www"时,其实访问的是/web中的index.html。
确保httpd服务是运行的
确保防火墙放行了httpd服务,命令如下。
[root@pp ~]# firewall-cmd --add-service=http
success
[root@pp ~]# 
在客户端上访问此内容,结果如图26-3所示。
发现访问是被拒绝的,原因是当客户端在浏览器的地址栏中输
入“192.168.26.101/www"连接到服务器时,服务器会有一个httpd进程来“接待”这个客
户端的连接请求,然后 httpd根
据用户的请求去访问目录/web,如图26-4所示。

前面已经看到httpd进程的上下文是httpd_t,/web的上下文是default_t,这两个是不匹配
的,所以 httpd进程访问目录/web时被拒绝。
但是httpd进程是可以正常访问/var/www/html的(上下文为httpd_sys_content_t),考
虑如果把/web的上下文改成 httpd sys content t是不是就可以使httpd进程能访问了呢?
改变上下文的命令如下。
1 chcon ‐R ‐t 上下文 目录
这里-R选项的意思是递归。
把/web的上下文改成httpd_sys_content_t,命令如下。
[root@pp ~]# chcon -R -t httpd_sys_content_t /web/
[root@pp ~]# 
再次查看/web的上下文,命令如下。
[root@pp ~]# ls -dZ /web/
unconfined_u:object_r:httpd_sys_content_t:s0 /web/
[root@pp ~]# 
现在已经是 httpd_sys_content_t了,浏览器测
试结果,可以正常访问量
如果要恢复目录的默认
上下文,可以用“restorecon -R 目录”命令。下
面恢复/web的上下文,命令如下。
[root@pp ~]# restorecon -R /web/
[root@pp ~]# 
再次查看/web的上下文,命令如下。
[root@pp ~]# ls -dZ /web/
unconfined_u:object_r:default_t:s0 /web/
[root@pp ~]# 
可以看到,/web的上下文又恢复成default t了,此时刷新浏览器之后又是被拒绝。
如果想修改默认上下文,可以用如下命令。
这里(/.*)?表示“/目录”本身及里面所有的内容。
如果想删除默认上下文,把上面命令的-a换成-d即可,命令如下。
1 semanage fcontext ‐d ‐t httpd_sys_content_t "/目录(/.*)?"
下面修改/web 的默认上下文,命令如下。
[root@pp ~]# semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"
[root@pp ~]# 
查看/web 的上下文,命令如下。
[root@pp ~]# ls -dZ /web/
unconfined_u:object_r:default_t:s0 /web/
[root@pp ~]# 
可以看到,当前仍然是 default_t,说明semanage修改的只是默认值,并没有改变当前
上下文,要改变当前上下文,仍然需要使用restorecon命令,命令如下。
[root@pp ~]# restorecon -R /web
[root@pp ~]# ls -dZ /web/
unconfined_u:object_r:httpd_sys_content_t:s0 /web/
[root@pp ~]# 
可以看到,此时已经修改了默认上下文。
26.2 端口上下文 端口也是有上下文的,如果一个端口没有上下文或上下文和进程不匹配,则进程就无法访
问此端口。
查看系统所有端口上下文的命令是semanage port -l(小写字母l,list的意思)。
练习:请通过如下命令把httpd端口改为808,命令如下。
[root@pp ~]# sed ‐i '/^Listen/cListen 808' /etc/httpd/conf/httpd.c
onf
[root@server ~]#
然后重启 httpd服务,命令如下。
[root@pp ~]# systemctl restart httpd
Job for httpd.service failed because the control process exited with e
rror code.
See "systemctl status httpd.service" and "journalctl ‐xe" for details.
[root@pp ~]#
发现启动服务失败,通过journalctl -xe l grep httpd查看日志,发现里面有一段话,如
下所示。
[root@server ~]# journalctl -xe | grep httpd
4月 12 17:23:05 server.rhce.cc setroubleshoot[41672]: SELinux is preventing
/usr/sbin/httpd from name_bind access on the tcp_socket port 808. For complete
SELinux messages run: sealert -l b2ede99e-5451-46b9-99c8-3ff84f150288
这里的意思是无法绑定端口808,这是因为端口808没有对应的上下文,命令如下。
1 [root@pp ~]# semanage port ‐l | grep 'b808\b'
2 [root@pp ~]#
这样httpd进程是访问不了端口808的。但是端口80是正常工作的,查看端口80的上下文,
命令如下。
[root@pp ~]# semanage port ‐l | grep '\b80\b'
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
[root@pp ~]#
可以看到,端口80的上下文是 http_port_t。如果把端口808的上下文改成和端口80一样
不就可以了吗?试试修改端口808的上下文。
修改端口上下文的语法如下。
1 semanage port ‐a ‐t 上下文 ‐p 协议 端口
如果要删除端口上下文,语法如下。
1 semanage port ‐d ‐t 上下文 ‐p 协议 端口
下面把端口808的上下文改成http_port_t,命令如下。
[root@pp ~]# semanage port ‐a ‐t http_port_t ‐p tcp 808
这里的意思是把端口808的上下文改成http_port_t。
再次查看端口808的上下文,命令如下。
[root@pp ~]# semanage port ‐l | grep '\b808\b'
http_port_t tcp 808, 80, 81, 443, 488, 8008, 8009, 8443, 9000
[root@pp ~]#
再次重启httpd服务,命令如下。
1 [root@pp ~]# systemctl restart httpd
2 [root@pp ~]#
26.3 了解SELinux的布尔值
布尔值可以理解为一个功能开关,如图26-6所示。
在没有SELinux的情况下,电灯亮不亮完全由开关控制,打开开关电灯亮,关闭开关电灯
灭。现在有了SELinux,情况如图26-7所示。
现在电灯亮还是不亮,不能完全由原来的开关A决定,这当中 SELinux也具有决定权。如
果把开关A打开,但是 SELinux不允许打开,则电灯仍然是不亮的。
要查看系统中所有SELinux的布尔值可以使用getsebool -a命令。
下面看一个例子,在前面讲到yum时,已经在server上启动了vsftpd并开启了匿名用户访
问,匿名用户是ftp或anonymous。
下面开始测试匿名用户是否可以往ftp中写入内容。
(1)在server上创建/var/ftp/incoming目录,并把所有者和所属组改为ftp,命令如下。
[root@pp ~]# mkdir /var/ftp/incoming
[root@pp ~]# chown ftp.ftp /var/ftp/incoming/
[root@pp ~]#
(2)修改配置文件/etc/vsftpd/vsftpd.conf,添加如下两行。
anon_upload_enable=YES
anon_mkdir_write_enable=YES

 

这两行的作用是设置允许匿名用户往ftp中写内容。这两行加在哪里都可以,原本配置文
件中就有这两行,只是被注释掉了,所以直接找到这两行内容,把最前面的#去掉也可以。
然后重启vsftpd,命令如下。
[root@pp ~]# systemctl restart vsftpd
[root@pp ~]#
在server2上自行安装lftp,使用lftp登录并进入incoming目录中(如果不指定用户名,则
是匿名用户登录)。
[root@pp ~]# lftp 192.168.8.11/incoming
cd 成功, 当前目录=/incoming
lftp 192.168.8.11:/incoming> ls
lftp 192.168.8.11:/incoming>
可以看到,使用匿名用户是可以登录成功的(注意,如果想使用指定用户登录,则需要加
上u选项),并且 incoming目录下没有任何文件。
26.4 了解SELinux的模式
SELinux一共有以下两种模式。
(1) Enforcing:如果不满足SELinux条件,则SELinux 会阻止访问服务并提供警报。
(2) Permissive:如果不满足SELinux条件,则SELinux不会阻止访问,但是会警报。查看
当前处于什么模式用getenforce命令,命令如下。
[root@pp ~]# getenforce 
Permissive
[root@pp ~]# 
要是想切换模式,需要用setenforce命令。
setenforce 1:切换到Enforcing模式。
setenforce0:切换到Permissive模式。
[root@pp ~]# setenforce 0
[root@pp ~]# getenforce 
Permissive
[root@pp ~]# setenforce 1
[root@pp ~]# getenforce 
Enforcing
[root@pp ~]# 
但是使用setenforce命令切换也只是临时生效,重启系统之后又变成默认模式了。如果想
修改默认模式,可以通过修改配置文件/etc/SELinux/config或/etc/sysconfig/SELinux,后
者是前者的快捷方式(软链接)。
使用vim打开/etc/SELinux/config,如图26-8所示。
其中 SELINUX=后面的部分就是默认模式(记住不是 SELINUXTYPE那行)。如果想彻底
关闭SELinux,只能在此配置文件中把内容改为SELINUX=disabled,且重启才能生效

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

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

相关文章

【广州华锐互动】3D虚拟还原井下复杂事故:提高安全意识,预防事故再次发生

随着科技的不断发展,3D虚拟现实技术已经逐渐应用于各个领域,为我们的生活带来了诸多便利。在钻井行业,3D虚拟现实技术的应用也日益受到重视。通过3D虚拟还原井下复杂事故,可以帮助我们更直观地了解事故发生的原因和过程&#xff0…

Python3开发环境的搭建

1,电脑操作系统的确认 我的是win10、64位的,你们的操作系统可自寻得。 2,Python安装包的下载 (1)浏览器种输入网址:https://www.python.org 选择对应的系统(我的是win10/64位) &#xf…

如何精准找企业线索?你缺一个法宝

如何找企业数据、找客户?近年来,经常会听到认识的销售朋友抱怨,每天花费大量时间从各种渠道找企业信息、找客户线索,结果总是不如意,投入大量时间,产出却0;创业成功的老板也抱怨优秀人才越来越难…

CSS特效027:超可爱的小狗狗,女孩子都喜欢

为什么当初选择计算机行业? 科技总是迷人的,通过计算机可以造出各种美妙的设计。 后来工作,更加感觉到可视化的魅力,于是乎更加的专注于canvas,CSS,openlayers,leaflet,cesium。。。…

Axure系列(二)之 元件库的介绍以及个人简介案例展示

目录 一. 元件介绍 二. 基本元件的使用 2.1 形状元件 2.2 图片元件 2.3 占位符 2.4 文本 2.5 线段元件 2.6 热区文件 三. 表单元件的使用 3.1 文本框 3.2 文本域 3.3 下拉列表 3.4 列表框 3.5 复选框 3.6 单选按钮 四. 菜单与表格元件的使用 4.1 树 4.2 表格…

大模型元年压轴盛会定档12月28日,第十届WAVE SUMMIT即将启航

回望2023年,大语言模型或许将是科技史上最浓墨重彩的一笔。从技术、产业到生态,大语言模型在突飞猛进中加速重构万物。随着理解、生成、逻辑、记忆四大能力显著提升,大语言模型为通用人工智能带来曙光。 AI开发者们正在用算法和代码书写一个…

连连看游戏

连通块记忆性递归的综合运用 这里x,y的设置反我平常的习惯,搞得我有点晕 实际上可以一输入就交换x,y的数据的 如果设置y1为全局变量的话会warning: warning: built-in function y1 declared as non-function 所以我改成p和q了…

gin投票项目5

对应视频V3版本 1.优化用户注册的功能 增加扩展字段 1.增加一个UUID字段,vachar(50)。 2.增加一个UUID的唯一索引。 UUID具有全局唯一性; 方法:在数据库中新建一个列,名为uuid并移至主键下方&#xf…

CTF-misc(1)图片隐写

笔记目录 渗透测试工具(1)wireshark渗透测试工具(2)Nmap渗透测试工具(3)BurpsuiteAWD比赛(1)AWD入门攻略大纲CTF-Web(2)SQL注入CTF-Web(3)文件上传漏洞 图片隐写目录 (1)GIf和二维码隐写 二维码补全 二维码绘图 Gif规律分析 (2)文本附加图片隐写 (3)IHDR文件头修复图片宽高 (…

基于单片机智能视力保护台灯控制系统设计

**单片机设计介绍,基于单片机智能视力保护台灯控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机智能视力保护台灯控制系统是一种基于单片机技术的设备,在保证照明效果的同时&#xf…

企业API网关适用业务场景

什么是企业级API网关 企业级API网关是一种用于管理、保护和监控企业内部和外部API(Application Programming Interface)的解决方案。它提供了一套统一的接入点,帮助企业实现对API的安全性、流量控制、版本管理、监控和分析等方面的管理。企业…

STM32储存器和总线构架

一、引言 本篇文章旨在介绍STM32小容量、中容量和大容量的储存器和系统构架,文中涉及到一些专有名词和概念较为抽象和陌生,建议读者能够查阅相关资料和知识加深了解。 二、正文 (一)、系统构架 在小容量、中容量和 大容量产品中…

接口自动化测试之Yaml数据驱动封装!

一、数据驱动:pytest.mark.parametrize() 首先看个样本: import pytestclass TestData:# parametrize有两个值,一个是args_name:参数名,一个是args_value:参数值,可以有多个,进行数据解包# args_value可以…

Windows环境提示“‘mysql‘ 不是内部或外部命令,也不是可运行的程序或批处文理件” 简易记录

在Windows环境下使用DOS命令窗登入MYSQL,提示“mysql 不是内部或外部命令,也不是可运行的程序或批处理文件。” 这意味着系统无法找到 mysql.exe可执行文件,这是因为 MySQL 没有正确安装或未添加到系统PATH环境变量中所致。 处理方法&#x…

巧用ChatGPT系列丛书(由北京大学出版社出版)

前言 随着人工智能技术的迅速发展,越来越多的工具和应用程序被应用于职场中,以提高我们的工作效率。其中,ChatGPT作为一种先进的自然语言处理技术,正在逐渐引起人们的关注。 ✨巧用ChatGPT系列书籍: 《巧用chatGPT快…

文献速递:PET-影像组学专题--临床上在乳腺癌方面PET-MRI的进展

文献速递:PET-影像组学专题–临床上在乳腺癌方面PET-MRI的进展 01 文献速递介绍 成像在乳腺癌的筛查、诊断、分期和管理中扮演着关键角色。乳房X线摄影(mammography)、超声检查和动态增强乳腺MRI是主要的乳腺癌成像方法。对于怀疑或已知有…

【教程】开始使用ipaguard进行代码加固混淆

目录 前言 下载ipa代码混淆保护工具 获取ipaguard登录码 代码混淆 文件混淆 IPA重签名与安装测试 前言 iOS加固保护是直接针对ios ipa二进制文件的保护技术,可以对iOS APP中的可执行文件进行深度混淆、加密。使用任何工具都无法逆向、破解还原源文件。对APP进…

mysql数据恢复

使用MySQL第三方工具binlog2sql binlog2sql,一款基于python开发的开源工具,是由大众点评团队的DBA使用python开发出来的,从MySQL binlog解析出你要的SQL。根据不同选项,你可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等。其功…

《Vue.js设计与实现》—Vue3响应系统的原理

一、响应式数据与副作用函数 1. 副作用函数 1-1 指令材料 在JavaScript中,副作用函数是指在执行过程中对外部环境产生可观察的变化或影响的函数。这种函数通常会修改全局变量、修改传入的参数、执行I/O操作(如读写文件或发送网络请求)、修…

Dockerfile创建镜像LNMP+WordPress

实验部署 INMPwordpress nginx 172.111.0.10 docker-nginx mysql 172.111.0.20 docker-mysql php 172.111.0.30 docker-php nginx 关闭防火墙和安全机制在opt目录创建nginx MySQL php目录 cd nginx mysql php vim Dockerfile#声明基础镜像 FROM centos:7 #安装依赖环境 R…