Linux之内核级防火墙selinux模块

2023-11-09

一、什么是selinux?

SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。

二、selinux的模式

enforcing:	强制模式,代表SELinux运作中,且已经正确的开始限制domain/type了。

permissive;	宽容模式,代表SELinux运作中,不过仅会有警告讯息并不会实际限制domain/type的存取.这种模式可以运来作为SELinux的debug之用(看下什么原因导致无法访问)。

disabled:	关闭模式

可以用命令getenforce查看当前selinux的模式。

在这里插入图片描述
安全上下文(security context)

这个是我们主要修改的地方,进程必须和文件的安全上下文对应(不是必须一样)才能对其进行访问。

ls -Z 文件名    	   	# 查看文件的安全上下文

ps -Z 进程pid           # 查看进程的安全上下文

三、selinux在系统中的作用。

我们通过一系列的示例让大家自己体会到selinux模块的强大功能。

首先给大家看一个现象:

我们在/mnt目录建立一个文件,并且把文件移动到匿名用户的pub目录里。
在这里插入图片描述
分析:这里我们看到文件fire的确移动到了pub目录里,但是通过lftp连接后que看不到,这是为什么呢?

在这里插入图片描述
context共分为五个部分,以:分隔。

user role type sensitivity category
身份识别 文件、进程、用户 数据类型 安全级别 划分的不同分类
unconfined_u不受限的用户或文件system_u受限的进程或文件 object_r文件,system_r进程和用户 何种类型进程访问何种文件 s0最低,只有在msl才有意义 这一位没有什么大的作用

在这里插入图片描述
分析:可以看到redhat文件和fire文件的安全上下文不同,vsftpd进程无法识别fire文件的安全上下文,因此lftp远程连接时无法看到。
那么,怎呢才能lftp远程连接时能够看到该文件呢?

1、临时改变文件的安全上下文。

chcon -t public_content_t /var/ftp/fire		##更改fire文件的安全上下文为public_content_t

示例:
在这里插入图片描述
分析:将fire文件的安全上下文,更改为vsftpd可识别的安全上下文后,再通过lftp远程连接,就可以看到fire文件了。

2、永久更改文件的安全上下文。

semanage fcontext -a -t public_content_t '/redhat(/.*)?'		##永久更改文件的安全上下文
semanage fcontext -l | grep  redhat		## 查看redhat目录与目录中文件的安全上下文

示例:

[root@localhost ~]# ls -Zd /redhat/
drwxr-xr-x. root root system_u:object_r:default_t:s0   /redhat/
[root@localhost ~]# semanage fcontext -a -t public_content_t '/redhat(/.*)?'		##永久修改安全上下文
[root@localhost ~]# semanage fcontext -l | grep redhat	##查看redhat与内部文件修改的上下文关系
/etc/redhat-lsb(/.*)?                              all files          system_u:object_r:bin_t:s0 
/usr/libexec/ipa/com\.redhat\.idm\.trust-fetch-domains regular file       system_u:object_r:ipa_helper_exec_t:s0 
/usr/libexec/ipa/oddjob/com\.redhat\.idm\.trust-fetch-domains regular file       system_u:object_r:ipa_helper_exec_t:s0 
/redhat(/.*)?                                      all files          system_u:object_r:public_content_t:s0 
[root@localhost ~]# ls -Zd /redhat/		##查看上下文关系,并未改变
drwxr-xr-x. root root system_u:object_r:default_t:s0   /redhat/
[root@localhost ~]# restorecon -FvvR /redhat/		##手动刷新安全上下文
restorecon reset /redhat context system_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
restorecon reset /redhat/redhat1 context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
restorecon reset /redhat/redhat2 context unconfined_u:object_r:user_tmp_t:s0->system_u:object_r:public_content_t:s0
[root@localhost ~]# ls -Zd /redhat/
drwxr-xr-x. root root system_u:object_r:public_content_t:s0 /redhat/
[root@localhost ~]# 

在这里插入图片描述

四、selinux的相关作用

1、本地用户上传开关

这里selinux的模式为enforcing。
在这里插入图片描述
本地用户上传文件会报错。
在这里插入图片描述
打开开关:

setsebool  -P ftp_home_dir on	##打开上传

在这里插入图片描述

2、匿名用户上传

首先这里selinux的模式为enforcing。

vim /etc/vsftpd/vsftpd.conf

anonymous_enable=YES
anon_upload_enable=YES		##允许匿名用户上传
systemctl restart vsftpd.service

在这里插入图片描述
打开selinux匿名用户上传开关。

getsebool -a | grep ftp			##查询权限开关
setsebool -P ftpd_anon_write on	##打开ftp匿名用户写权限

在这里插入图片描述
更改匿名用户家目录权限和安全上下文可写。

chgrp ftp /var/ftp/pub/
chmod 775 /var/ftp/pub/
ls -Zd /var/ftp/pub/			##查看目录的安全上下文
semanage fcontext -a -t public_content_rw_t /var/ftp/pub	##开启安全上下文写权限
semanage fcontext -l | grep  /var/ftp/pub		##查看pub目录的安全上下文更改。
restorecon -RvvF /var/ftp/pub/	##刷新安全上下文

在这里插入图片描述

五、selinux 的两种模式

setenforce 1		##Enforcing,拒绝访问

setenforce 0		##peremissive警告,不拒绝

测试:

[root@localhost ~]# cd /mnt
[root@localhost mnt]# touch test
[root@localhost mnt]# mv test /var/ftp/
[root@localhost mnt]# lftp 172.25.254.233
lftp 172.25.254.233:~> ls
drwxrwxr-x    2 0        50             44 Jan 28 02:47 pub
lftp 172.25.254.233:/> quit
[root@localhost mnt]# geten
getenforce  getent      
[root@localhost mnt]# getenforce 
Enforcing
[root@localhost mnt]# setenforce 0
[root@localhost mnt]# getenforce 
Permissive
[root@localhost mnt]# lftp 172.25.254.233
lftp 172.25.254.233:~> ls
drwxrwxr-x    2 0        50             44 Jan 28 02:47 pub
-rw-r--r--    1 0        0               0 Jan 28 02:52 test
lftp 172.25.254.233:/> quit
[root@localhost mnt]# > /var/log/audit/audit.log 
[root@localhost mnt]# lftp 172.25.254.233
lftp 172.25.254.233:~> ls
drwxrwxr-x    2 0        50             44 Jan 28 02:47 pub
-rw-r--r--    1 0        0               0 Jan 28 02:52 test

在这里插入图片描述

六、selinux 如何获取报错的解决方案。

[root@localhost ~]# rpm -qa | grep setroubleshoot
setroubleshoot-server-3.2.17-2.el7.x86_64	##提供解决方案的软件
setroubleshoot-3.2.17-2.el7.x86_64
setroubleshoot-plugins-3.0.59-1.el7.noarch
[root@localhost ~]# yum install setroubleshoot-server-3.2.17-2.el7.x86_64
[root@localhost ~]# > /var/log/messages 	##清空日志
[root@localhost ~]# lftp 172.25.254.232		
lftp 172.25.254.232:~> ls
-rw-r--r--    1 0        0               0 Jan 24 08:13 file
drwxr-xr-x    2 0        0               6 Jan 24 08:25 pub
-rw-r--r--    1 0        0               0 Jan 24 06:17 test
lftp 172.25.254.232:/> cd pub/			##进入没有写权限的pub/
lftp 172.25.254.232:/pub> ls
lftp 172.25.254.232:/pub> put /etc/passwd	
put: Access failed: 553 Could not create file. (passwd)	##权限太小被拒绝
lftp 172.25.254.232:/pub> quit
[root@localhost ~]# cat /var/log/messages 	##查看日志

*****  Plugin catchall_boolean (57.6 confidence) suggests   ******************

If you want to allow ftpd to full access
Then you must tell SELinux about this by enabling the 'ftpd_full_access' boolean.
You can read 'None' man page for more details.
Do
setsebool -P ftpd_full_access 1			##出现解决方案

*****  Plugin catchall_labels (36.2 confidence) suggests   *******************
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux之内核级防火墙selinux模块 的相关文章

  • 如何查明 Ubuntu 上安装了哪个版本的 GTK+?

    我需要确定 Ubuntu 上安装了哪个版本的 GTK 男人似乎不帮忙 这个建议 https stackoverflow com a 126145 会告诉您安装了哪个 2 0 的次要版本 不同的主要版本将具有不同的包名称 因为它们可以在系统上
  • 如何使用AWK脚本检查表的所有列数据类型? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在这里 我正在检查表中第一列的数据类型 但我想知道AWK中表的所有列数据类型 我尝试过 但只能获得一列数据类型 例如 Column 1
  • 如何在我的 AWS EC2 实例上安装特定字体?

    我有一个在 AWS EC2 Amazon Linux Elastic Beanstalk 实例上运行的 Python 应用程序 该实例需要某些特定字体才能生成输出 并且想知道如何在部署或实例启动过程中安装它们 我的代码在本地计算机 OS X
  • 伊迪德信息

    重新定义问题 有什么方法可以获取所连接显示器的序列号吗 我想收集显示器的Eid信息 当我使用 logverbose 选项运行 X 时 我可以从 xorg 0 log 文件中获取它 但问题是 如果我切换显示器 拔出当前显示器 然后插入另一个显
  • 停止服务时单元陷入故障状态(状态=143)[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这是我的问题 我有 CentOS 和 java 进程在上面运行 Java进程是通过启动 停止脚本来操作的 它也创建了 java 实例的 p
  • 为什么在 Linux 上字符串文字的内存地址与其他字符串文字的内存地址如此不同?

    我注意到字符串文字在内存中的地址与其他常量和变量 Linux 操作系统 非常不同 它们有许多前导零 未打印 Example const char h Hi int i 1 printf p n void h printf p n void
  • 无需 cron 在后台发送邮件

    我想知道是否有一种方法可以运行 PHP 循环 以便在后台向订阅者发送几百封电子邮件 我的目标是格式化新闻通讯 单击发送 然后关闭浏览器或更改页面 当然 发送电子邮件的实际过程将在后台运行 不会因浏览器关闭而中断 我知道这可以通过 cron
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • Docker:处理 tar 文件时出错(退出状态 1):设置枢轴目录时出错:不是目录

    我是 Docker 新手 不知道是什么原因导致此错误或如何诊断它 任何有关此问题的具体帮助或有关首先检查何处以诊断此类问题的提示将不胜感激 我的 Dockerfile FROM java 8 Install maven RUN apt ge
  • 让 MongoDB 在 Linux 上监听远程连接

    我已在 Windows 本地计算机上 上成功安装 MongoDB 作为服务 但现在我想将 MongoDb 移动到单独的服务器 所以我将 tarball 解压到网络上的虚拟服务器 运行 Linux 当我从本地计算机使用 PuTTY 连接到服务
  • 归档文件系统或格式

    我正在寻找一种文件类型来存储已退役系统的档案 目前 我们主要使用 tar gz 但从 200GB tar gz 存档中查找并提取几个文件是很麻烦的 因为 tar gz 不支持任何类型的随机访问读取规定 在你明白之前 使用 FUSE 安装 t
  • 在 /dev/input/eventX 中写入事件需要哪些命令?

    我正在开发一个android需要将触摸事件发送到 dev input eventX 的应用程序 我知道C执行此类操作的代码结构如下 struct input event struct timeval time unsigned short
  • 如何使用 sed 仅删除双空行?

    我找到了这个问题和答案 https stackoverflow com questions 4651591 howto use sed to remove only triple empty lines关于如何删除三重空行 但是 我只需要对
  • 在主目录中安装库

    在 Linux Ubuntu 中 我尝试运行一个工具 但它显示错误 库丢失 我无权在系统中安装任何内容 或者根本无法从我的用户帐户执行 sudo 是否可以在我的主目录 没有 sudo 中安装缺少的库 在我的例子中为 libstdc so 6
  • diff 文件仅比较每行的前 n 个字符

    我有2个文件 我们将它们称为 md5s1 txt 和 md5s2 txt 两者都包含a的输出 find type f print0 xargs 0 md5sum sort gt md5s txt 不同目录下的命令 许多文件被重命名 但内容保
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • Godaddy 托管上的 CakePHP 控制台

    我一直在努力让我的 CakePHP 网站在 Godaddy 网格托管 帐户上运行 我的蛋糕应用程序设置是从帐户的子目录托管的 并且可以通过子域访问 我必须调整我的 htaccess 文件才能使其正常工作 现在我需要让 CakePHP 控制台
  • 为什么我收到的数据包数据大小大于mss?

    我在两台 PC 上使用 ifconfig ethX mtu 300 修改了 MTU 并使用 netperf 测试网络 我用 WireShark 嗅探了 SYN 数据包中的 MSS 260 但我得到了一些大于 260 的数据包 为什么 嗅探器
  • awk 子串单个字符

    这是columns txt aaa bbb 3 ccc ddd 2 eee fff 1 3 3 g 3 hhh i jjj 3 kkk ll 3 mm nn oo 3 我可以找到第二列以 b 开头的行 awk if substr 2 1 1
  • 创建 jar 文件 - 保留文件权限

    我想知道如何创建一个保留其内容的文件权限的 jar 文件 我将源代码和可执行文件打包在一个 jar 文件中 该文件将在使用前提取 人们应该能够通过运行批处理 shell 脚本文件立即运行示例和演示 然后他们应该能够修改源代码并重新编译所有内

随机推荐

  • [轻量级RTSP服务]Linux

    背景 随着国产操作系统的推进 传统行业对Linux平台的呼声和需求越来越大 之前几年 我们发布了Linux平台运营商级的RTSP转RTMP推送模块 RTMP推送模块和RTSP RTMP播放模块 前段时间 有开发者问我们 是不是可以在Linu
  • eclipse中springboot项目如何打包成jar文件

    eclipse中springboot项目如何打包成jar包 前提 第一步 清除项目中之前的打包内容 第二步 打jar包 第三步 测试 4 注意事项 前提 在项目的pom xml中配置相关的内容 其中finalName中内容表示jar war
  • 树莓派mqtt协议连接阿里云物联网平台,手机端获取数据并控制

    树莓派C语言mqtt协议连接阿里云物联网平台 一 阿里云后台配置树莓派设备 阿里云添加链接描述 注册 登录 打开控制台 选择产品与服务 物联网平台 进入后 选择设备管理 产品 点击创建产品 产品名称随便写 品类自定义 直连设备 其他默认 最
  • 【设计模式】建造者模式

    建造者模式 Builder Pattern 使用多个简单的对象一步一步构建成一个复杂的对象 这种类型的设计模式属于创建型模式 它提供了一种创建对象的最佳方式 一个 Builder 类会一步一步构造最终的对象 该 Builder 类是独立于其
  • 【概率论与数理统计】猴博士 笔记 p15-16 一、二维连续型求概率

    一维连续型求概率 题型如下 解题步骤如下 其实就是求积分 举例1的例子 例2 解 例3 解 注意 要把Y变为X计算 且要分类讨论y是否大于0 例4 解 去掉max和min的方法 去掉多余项的方法 假设要求AB两项同时发生的概率 当多余项 A
  • kafka使用_使用多线程增加kafka消费能力

    原创 小姐姐味道 微信公众号ID xjjdog 欢迎分享 转载请保留出处 前提 本例适合那些没有顺序要求的消息主题 kafka通过一系列优化 写入和读取速度能够达到数万条 秒 通过增加分区数量 能够通过部署多个消费者增加并行消费能力 但还是
  • order by产生的 Using temporary的优化

    今天遇到一个慢查询的sql sql如下 EXPLAIN SELECT tas f year tc pk id tas f sex tas f rank score tas f age tas f km five tas f km ten t
  • filter过滤器实现权限访问控制以及同一账号只能登录一台设备

    需求 如题目所意 未登录用户不能浏览访问项目内部的资源 对访问的请求和响应进行拦截 且一个用户只能在一台设备登录 权限访问控制功能可以通过过滤器或者拦截器去实现 在这里我用的是过滤器 过滤器可以过滤全部action请求 拦截器则更有针对性
  • unity通过键盘控制物体移动,大小的缩放

    拖动距离 private float distance 10 缩放量 float scale 0 2f 通过键盘 Q 或者 E 控制物体的缩放 通过键盘 w s a d 控制物体上下左右的移动 private void Update if
  • PWM实现线性调光

    1 PWM调光原理 PWM全称为脉宽调制技术 是通过高精度的计数器对方波的占空比进行编码 就是这个东西 其实很好理解 高电平的时候才会做功 低电平的时候肯定不亮啊 PWM就是调制高电平的占比 其实一般是低电平才有效 因为会外接一个12V的电
  • XFocus Windows Internet 服务器安全配置

    Windows 2003版本区别 1 Windows Server 2003 Standard Edition 标准版 针对中小型企业的核心产品 他也是支持双路处理器 4GB的内存 它除了具备 Windows Server 2003 Web
  • Revit SDK下载地址

    20190325更新 共享了如下sdk REVIT 2014 SDK exe REVIT2015SDK SubscriptionRelease msi REVIT 2016 SDK msi Revit 2017 1 SDK Update O
  • 树莓派OpenWrt SD扩展问题

    树莓派OpenWrt磁盘扩展 1 查看问题 前几天给树莓派4B刷了OpenWrt当做软路由来使用 发现树莓派的SD卡空间没有完全被使用 有一部分未分区 已用大概只有2GB df h查看 2 fdisk 命令查看磁盘 3 按p查看分区情况 发
  • ansible自动化运维工具上部署lnmp架构

    ansible自动化运维工具上部署lnmp架构 ansible安装 通过ansible连接到192 168 228 20配置nginx安装 本地也要安装nginx 步骤略 安装mysql 安装PHP ansible自动化运维工具上部署lnm
  • Spring默认使用的JSON工具--Jackson

    Spring默认使用的JSON工具 Jackson 一 Jackson介绍 我们常用的json转换工具包括fastJson Gson Jackson等 其中Gson是Google所维护 功能全 fastJson特点是快 但是爆出几次的重大b
  • 2021最新版IDEA右侧Maven模块以及View下的Maven Project不见了解决方法

    问题描述 重新启动了一下IDEA后发现许多jar包找不到 想使用Maven进行依赖刷新 却找不到项目右侧的Maven Project 网上搜索了很多解决方法 如清除IDEA缓存 重启电脑 删除隐藏文件等等 都没有效果 将正确的解决方法记录在
  • Redis集群模式使用Lua脚本的限制

    问题复现 ERR bad lua script for redis cluster all the keys that the script uses should be passed using the KEYS array and KE
  • chapter15:springboot与监控管理

    Spring Boot与监控管理视频 1 简介 通过引入spring boot starter actuator 可以使用SpringBoot为我们提供的准生产环境下的应用监控和管理功能 我们可以通过http jmx ssh协议来进行操作
  • js宏观任务、微观任务

    js运行机制分为同步异步 异步又分为宏观事件和微观事件 同步异步 js是一门单线程语言 因此js在同一个时间里只能做一件事 单线程意味着 如果在同个时间有多个任务的话 这些任务就需要排队 前一个执行完成才能执行下一个任务 同步任务 同步任务
  • Linux之内核级防火墙selinux模块

    一 什么是selinux SELinux Security Enhanced Linux 是美国国家安全局 NSA 对于强制访问控制的实现 是 Linux历史上最杰出的新安全子系统 NSA是在Linux社区的帮助下开发了一种访问控制体系 在