Linux安全之SELinux理解

news/2024/4/30 14:13:07/文章来源:https://blog.csdn.net/mengmeng_921/article/details/127122863

安全增强式 Linux,即SELinux(Security-Enhanced Linux)是一个 Linux 内核的安全模块,其提供了访问控制安全策略机制,包括了强制访问控制(Mandatory Access Control,MAC)。SELinux 是一组内核修改和用户空间工具,已经被添加到各种 Linux 发行版中。其软件架构力图将安全决策的执行与安全策略分离,并简化涉及执行安全策略的软件的数量。

Linux安全之SELinux理解

Linux安全之SELinux理解

1. SELinux 介绍

安全增强式 Linux(SELinux)是一种强制访问控制的实现。它的作法是以最小权限原则为基础,在 Linux 核心中使用 Linux 安全模块。它并非一个 Linux 发行版,而是一组可以应用在类 Unix 操作系统(如 Linux、BSD 等)的修改。

SELinux 更能遵从最小权限的理念
安全增强式SELinux是一个在内核中实践的强制访问控制安全性机制
Linux安全之SELinux理解

Linux安全之SELinux理解

两种访问控制

DAC:自主访问控制
MAC:强制访问控制
SELinux有两种工作级别

strict: 每个进程都受到 selinux 的控制
targeted: 仅有限个进程受到 selinux 控制,只监控容易被入侵的进程
1.1 为什么需要 SELinux
在未启用 SELinux 的情况下,要控制用户的文件访问权,唯有通过酌情访问控制(DAC)方法如文件权限或访问控制清单(ACL)。不论用户或程序都可以将不安全的文件权限赋予其它人,或反过来访问系统在正常运作下无须访问的部份。举个例说:

管理员不能控制用户:用户可以把谁都可读入的权限赋予敏感文件,例如 ssh 金钥及惯常用来放置这些金钥的目录,~/.ssh/。
进程可以更改安全性属性:每位用户的邮件文件应该只供该用户读入,但邮件客户端软件有能力将它们改为谁都可读入。
进程继承用户的权限:假若 Firefox 被木马程序所占用,它可能会阅读用户的私人 ssh 金钥,尽管它没有理由如此做。
基本上在传统 DAC 模式只在两个权限级别,root 及用户,而当中不能简易地实施最小权限的理念。很多由 root 引导 1 的进程在后期会撇除它们的权限并以受限制的用户身份来运行,有些则会在 chroot 的情况下执行,但这些安全措施都是酌情的。

1.2 解决方案
SELinux 更能遵从最小权限的理念。在缺省的 enforcing 情况下,一切均被拒绝,接着有一系列例外的政策来允许系统的每个元素(服务、程序、用户)运作时所需的访问权。当一项服务、程序或用户尝试访问或修改一个它不须用的文件或资源时,它的请求会遭拒绝,而这个行动会被记录下来。

由于 SELinux 是在内核中实践的,应用程序无须被特别编写或重写便可以采用 SELinux。当然,如果一个程序特别留意稍后所提及的 SELinux 错误码,它的运作可能会更畅顺。

理论上,下列样例方案可提供更高安全度:

局限只有某些获授权的程序可读入用户的 ~/.ssh/ 目录
防止派发邮件程序更改拥有群组、群组设置或其它读档权限
阻止浏覧器读入用户的主目录

2. SELinux 的操作

2.1 SELinux 的三种模式
SELinux 拥有三个基本的操作模式,当中 Enforcing 是缺省的模式。

Enforcing
这个缺省模式会在系统上启用并实施 SELinux 的安全性政策,拒绝访问及记录行动
Permissive
在 Permissive 模式下,SELinux 会被启用但不会实施安全性政策,而只会发出警告及记录行动。Permissive 模式在排除 SELinux 的问题时很有用
Disabled
SELinux 已被停用
SELinux 的模式可以通过 Adminstration 选单里的 SELinux 图像管理界面、或者在命令行执行 system-config-selinux 来查看及更改(SELinux 图像管理界面是 policycoreutils-gui 组件的一部份,缺省是不会被安装的)。

2.2 获取当前 SELinux 运行状态
sestatus 命令

#sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 21
Policy from config file: targeted
getenforce 命令

可能返回结果有三种:Enforcing、Permissive 和 Disabled
Disabled 代表 SELinux 被禁用
Permissive 代表仅记录安全警告但不阻止可疑行为
Enforcing 代表记录警告且阻止可疑行为。

#getenforce
Disabled
2.3 改变 SELinux 运行状态
临时修改

setenforce命令
setenforce [ Enforcing | Permissive | 1 | 0 ]
注意事项
该命令可以立刻改变 SELinux 运行状态,在 Enforcing 和 Permissive 之间切换,结果保持至关机。
若是在 setenforce 0 之后服务或者程序依然无法运行,那么就可以肯定不是 SELinux 导致的。

#强制访问控制
setenforce 1

#自主访问控制
setenforce 0
永久修改

修改配置文件/etc/sysconfig/selinux或者/etc/selinux/config
SELINUX=disabled为主开关,只有它打开了,设定访问控制才有意义

#cat /etc/sysconfig/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=disabled

#SELINUXTYPE= can take one of these two values:
#targeted - Targeted processes are protected,
#mls - Multi Level Security protection.
SELINUXTYPE=targeted
2.4 布尔型规则
因为在SELinux中有些类型没有被启动或者你需要关闭某些类型,这个时候你就需要使用下列命令来修改SELinux的类型了

获取类型状态

getsebool命令:
语法:getsebool [-a] [boolean]

#获取所以类型及其运行状态
getsebool -a

#获取某个类型及其运行状态
getsebool httpd_t
修改类型状态

setsebool命令:
语法:setsebool [ -P] boolean value | bool1=val1 bool2=val2 …

#临时修改
setsebool httpd_t 1

#永久修改
setsebool -P httpd_t 1

3. SELinux 政策

配置文件 /etc/sysconfig/selinux 还包含了 SELinux 运行策略的信息,通过改变变量 SELINUXTYPE 的值实现。

两种策略

targeted 代表仅针对预制的几种网络服务和访问请求使用 SELinux 保护
strict 代表所有网络服务和访问请求都要经过 SELinux
注意事项

可以在/etc/sysconfig/selinux中对其进行修改
RHEL 和 Fedora 默认设置为 targeted,包含了对几乎所有常见网络服务的 SELinux 策略配置,已经默认安装并且可以无需修改直接使用。

#cat /etc/sysconfig/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=disabled

#SELINUXTYPE= can take one of these two values:
#targeted - Targeted processes are protected,
#mls - Multi Level Security protection.
SELINUXTYPE=strict

4. SELinux 访问控制

4.1 三种访问控制方法
强制类型(TE)
TE 是针对型政策所采用的主要访问控制机制
基于⻆色的访问控制(RBAC)
它以 SELinux 用户(未必等同 Linux 用户)为基础,但缺省的针对型政策并未采用它
多层保障(MLS)
普遍不获采用,而且经常隐藏在缺省的针对型政策内
4.2 访问控制规则解析
所有进程及文件都拥有一个 SELinux 的安全性脉络,我们这里查看 Apache 的主页,来看看 SELinux 安全性脉络来看看它们如何运作的。

#查看 Apache 的主页
#-Z 这个标旗在多数工具内都可用来显示 SELinux 安全性脉络(例如:ls -Z、 ps axZ 等)
#ls -Z /var/www/html/index.html
-rw-r–r-- username username system_u:object_r:httpd_sys_content_t /var/www/html/index.html
SELinux 脉络栏

system_u:object_r:httpd_sys_content_t
基于「用户:角色:类型:多层保障」
在上述例子里,「用户:角色:类型」栏都有显示,而「多层保障」是隐藏的
在缺省的针对型政策里,类型是用来实施「强制类型」的重要字段,在这里它是 httpd_sys_content_t
httpd进程的 SELinux 安全性脉络
从类型栏可以看出 Apache 在 httpd_t 这个类型本地内运行
bash
#ps axZ | grep httpd
system_u:system_r:httpd_t 3234 ? Ss 0:00 /usr/sbin/httpd
SELinux 安全机制

唯有相似的类型才可互相访问,因此以 httpd_t 运行的 Apache 可以读入拥有 httpd_sys_content_t 类型的 /var/www/html/index.html
由于 Apache 在 httpd_t 这个本地内运行但不属 username 这个用户,纵使 /home/username/myfile.txt 可供任何人读入,Apache 却不能访问该文件,因为它的 SELinux 安全性脉络并不是 httpd_t 类型
倘若 Apache 被人占用,又假设它仍未取得更改 SELinux 标签至另一个脉络的 root 权限,它将会不能引导 httpd_t 本地外的进程(藉此防止权限升级),或访问与 httpd_t 本地不相关的文件

5. 排除 SELinux 疑难

5.1 SELinux 拒接访问原因
SELinux 拒绝某个文件、进程或资源被访问的基要原因

一个被错误标签的文件
一个进程在错误的 SELinux 安全性脉络下运行
政策出错,某个进程要访问一个在编写政策时意料不到的文件,并产生错误信息
一个入侵的企图
日志分析

日志档是排除任何疑难的关键,而 SELinux 亦不例外
SELinux 缺省会通过 Linux 审计系统 auditd 将日志写在 /var/log/audit/audit.log 内,而该务服缺省为启用的
假若 auditd 长驻程序并未运行,信息将会被写进 /var/log/messages
SELinux 的日志都以 AVC 这个关键字作标签,让 grep 等程序可轻易地把它们从其它信息中过滤出来。
日志分析工具

用 SELinux 排除疑难工具协助你分析日志档,将它们转换为供人阅读的格式
SELinux 排除疑难工具是由 setroubleshoot 组件所提供的
这个工具包含一个以可读格式显示信息及解决方案的图像界面、一个桌面通报图示、与及一个长驻进程,setroubleshootd,它负责查阅新的 SELinux AVC 警告并传送至通报图示

#这个工具可以从 X 窗口图像管理员的「系统」选单或从命令行引导
sealert -b

#不运行 X 服务器的人可以通过命令行产生供人阅读的报告
sealert -a /var/log/audit/audit.log > /path/to/mylogfile.txt
5.2 重新标签文件
chcon: 这个指令可以用来更改一个或多个文件与目录的 SELinux 安全性脉络,正如 chown 或 chmod 可以用来更改一个文件的拥有者或标准权限。

语法

chcon [OPTION]… CONTEXT FILE…
chcon [OPTION]… [-u USER] [-r ROLE] [-t TYPE] FILE…
chcon [OPTION]… --reference=RFILE FILE…
选项

-R:递归打标
举例

chcon -t httpd_sys_content_t index.html
实战演示

#就以Apache为例,假设你想修改DocumentRoot以另一个位置来伺服网页,替换缺省的/var/www/html
#目录。譬如说我们在 /html 创建了一个目录(又或者挂载点),然后在那里创建一个 index.html文档:
mkdir /html
touch /html/index.html

#查看selinux属性信息
#ls -Z /html/index.html
-rw-r–r-- root root user_u:object_r:default_t /html/index.html
#ls -Z | grep html
drwxr-xr-x root root user_u:object_r:default_t html

#我们可以见到/html这个目录以及/html/index.html这个文件都拥有缺省的default_t安全性脉络类型。
#如果我们打开浏览器并尝试查看该页,SELinux 将会正确地拒绝它们被访问并记录错误,因为该目录与文
#件拥有不正确的安全性脉络。我们须要设置供 Apache 使用的 httpd_sys_content_t 正确安全性脉络。
#chcon -v --type=httpd_sys_content_t /html
context of /html changed to user_u:object_r:httpd_sys_content_t

#chcon -v --type=httpd_sys_content_t /html/index.html
context of /html/index.html changed to user_u:object_r:httpd_sys_content_t

#ls -Z /html/index.html
-rw-r–r-- root root user_u:object_r:httpd_sys_content_t /html/index.html

#ls -Z | grep html
drwxr-xr-x root root user_u:object_r:httpd_sys_content_t html

#我们同样也可以利用 -R 这个回递标旗同时将它们的脉络设置:
chcon -Rv --type=httpd_sys_content_t /html

#以这个方式更改安全性脉络在系统重新开机后仍会获保留,直至该部份文件系统被重新标签。
#这个动作也算颇常,因此正确的解决方法,就是于测试后编写一条自定的规则,并把它与本地
#的规则进行合并。它将会是原有的 200 多条规则外的一条规则。要作出永久性、能过渡文件
#系统重新标签的安全性脉络改动,我们采用SELinux管理工具,或者在命令行执行semanage指令。
semanage fcontext -a -t httpd_sys_content_t “/html(/.*)?”

#如此便会将 /html 以下的一切加入 httpd_sys_content_t 这个文件脉络类型。
5.3 撤消缺省的安全性脉络
restorecon: 这个指令可以用来撤消为文件缺省的安全性脉络

语法

restorecon [-R] /path/to/somewhere
选项

-R:递归撤标
实战演示

#让我们再次以 Apache 作为样例。设假有位用户在他的主目录内编辑了一个index.html档并将该文件
#迁移(mv)至 DocumentRoot 的 /var/www/html 内。纵使复制(cp)这个指令普遍会沿用目标目
#录或文件的安全性脉络,迁移(mv)指令则会保留源文件的安全性脉络。我们可以利用 chcon 这个指令
#来更改问题文件的安全性脉络,但由于这些文件已经位于 Apache 缺省的 DocumentRoot内,我们只
#须撤消这个目录或文件的安全性脉络便成了。要单单撤消 index.html 档的脉络,我们可以利用。
restorecon -v /var/www/html/index.html

#如果要以回递的方式撤消整个目录的缺省安全性脉络
restorecon -Rv /var/www/html

#除此之外,如果我们只想检查/var/www/html目录内有哪些文件的安全性脉络需要被撤消
#我们在采用 restorecon 时可以应用 -n 这个标旗来防止重新标签的行动
restorecon -Rv -n /var/www/html

文章作者: Escape
文章链接: https://www.escapelife.site/posts/639ee49c.htm

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

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

相关文章

0052-Tui-设置方块样式

环境Time 2022-08-09 Rust 1.62.0 Tui 0.18.0前言 说明 参考:https://github.com/fdehau/tui-rs/blob/master/examples/block.rs 目标 使用 tui-rs 对方块设置各种不同的样式。 设置背景色 let block = widgets::Block::default().title("设置背景色").style(style:…

跨境电商如何利用WhatsApp API交互式按钮提高客户转化率

WhatsApp API有很多实用的功能,跨境电商卖家因此可以为客户提供出色的客户服务体验与服务。 跨境电商卖家在通过WhatsApp API为客户提供服务或进行营销时,交互性功能可以明显提高客户转化率。因为当用户想要选择服务或产品时,可以直接使用交…

Java / Tensorflow - API 调用 pb 模型使用 GPU 推理

目录 一.引言 二.Java / Tensorflow 代码配置 1.代码配置 2.Maven 配置 三.环境检测 1.显卡检测 2.显卡监控 四.推理踩坑 1.异常现象 2.异常日志 五.安装 cuda-10.0 1.下载 cuda 安装包 2.安装 cuda 2.1 preface 前言 2.2 安装配置 2.3 安装完成 2.4 可能遇到的…

day013--mysql中的子查询

目录 一,前言 二,子查询的定义及书写格式 1,定义 2,书写格式 三,子查询的分类 1,单行子查询和多行子查询 2,相关子查询和非相关子查询 一,前言 相信大家还记得之前我们在学习分…

保研专业课参考

文章目录数据结构1.什么是平衡树?平衡树是怎么创建的?2.二叉排序树的性质:3.如何编程判断一棵二叉树是完全二叉树4.二叉树怎么求高度(山大计算机)5.在图中找到一个连通图,有n个顶点,n-1条边使得…

SQL Server大分区表没有空分区的情况下如何扩展分区的方法

官方文档https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-partition-function-transact-sql?viewsql-server-ver16 Best Practices Always keep empty partitions at both ends of the partition range. Keep the partitions at both ends to guarantee that th…

【学生网页作业】航海王动漫网页 html+ css + JavaScript 简单的学生网页作业源码

🌩️ 精彩专栏推荐👇🏻👇🏻👇🏻 💂 作者主页: 【进入主页—🚀获取更多源码】 🎓 web前端期末大作业: 【📚HTML5网页期末作业 (1000套…

手机用Postern配置socks5全局代理详细教程

以静态Socks5独享IP的单地区资源为例,即IP资源全部归属单一城市,不会变动,如南京区域,则IP全部为南京城市出口。 关于Socks5的使用有多种方案,可应用于PC,安卓,模拟器,请根据情况灵…

EasyRecovery15万能数据恢复软件全面详细功能讲解

EasyRecovery 15是由全球著名数据厂商Ontrack 出品的一款非常优秀的数据恢复软件,在诸多数据恢复软件中这款软件可以说是排的上名的,具有快捷、高效、便捷等特点,可以帮助用户轻松恢复电脑丢失的数据。 因此今天coco玛吉多就给大家带来了eas…

环境主题静态HTML网页作业作品 大学生环保网页设计制作成品 简单DIV CSS布局网站

🌩️ 精彩专栏推荐👇🏻👇🏻👇🏻 💂 作者主页: 【进入主页—🚀获取更多源码】 🎓 web前端期末大作业: 【📚HTML5网页期末作业 (1000套…

2022短视频神器历时6个月辛苦全力打造的软件短视频运用工具

短视频批量监控混剪消重上传运营神器 ​ 要问当下什么最火?当然是从事自媒体了,自媒体是普通大众经由数字科技强化、与全球知识体系相连之后,一种开始理解普通大众如何提供与分享他们自身的事实、新闻的途径。简而言之,即公民用以…

移动端布局

移动端布局1. meta视口标签1.2 多倍图1.2.1 图片缩放1.2.2 背景缩放 background-size1.3 特殊样式2 移动端常见布局2.1 流式布局(百分比布局)2.2 flex布局父项常见属性2.2.1 flex-direction设置主轴或侧轴的方向2.2.2 justify-content 设置主轴的子元素的…

程序员的数学课08 加乘法则:如何计算复杂事件发生的概率?

在我们的工作和生活中少不了对概率的计算,对概率的准确计算会帮助我们做出更加合理高效的决策。 例如,早上出门之前,你需要对是否携带雨伞进行决策。如果没有任何依据而随机决策,那么就会遇到下雨没带伞或者晴天带伞的麻烦&#…

SiO2/PAA/Ag复合纳米粒/酞菁修饰磁性温敏二氧化硅纳米微球/中空SiO2/TiO2纳米微球的制备

小编给大家分享了SiO2/PAA/Ag复合纳米粒/酞菁修饰磁性温敏二氧化硅纳米微球/中空SiO2/TiO2纳米微球的制备与研究,一起来看! SiO2/PAA/Ag复合纳米粒子的制备步骤: 利用溶胶-凝胶法合成胶体二氧化硅微球,用甲基丙烯酰氧丙基三甲氧基硅烷(γ-MP…

业务开发流程

0.摘要 此文主要介绍了业务开发的整体流程、关键节点和需要注意的事项,适用于刚入行的小白,以及对自己过往经验的一个总结整理。持续更新中~~ 1.开发的主要流程&名词释义 大概给大家梳理下一个项目从发起到上线的流程。 ○ 参与人员:业…

redis之为什么那么快

写在前面 在面试中关于redis经常被问到一个问题就是redis为什么快,本文就一起从其底层的数据结构实现来分析下,为什么快,哪些快,哪些慢,哪些操作会导致慢等,下面我们就开始吧! 1:为…

【无标题】近几年攻防演练攻击队典型突破的例子

蓝队经典攻击实例 实战攻防演练中红队网络的部署情况各有特点,蓝队也会根据攻 击目标的不同而采取不同的攻击策略和手段。下面几个案例展示的就 是针对红队网络的不同薄弱点采取的不同的典型攻击策略与方法手 段。 正面突破:跨网段控制工控设备 某企业…

C#面向对象程序设计课程实验一:实验名称:C#语言基础、程序流程控制

C#面向对象程序设计课程实验一:实验名称:C#语言基础、程序流程控制实验内容:C#语言基础、程序流程控制一、 实验目的二、实验环境三、实验内容四、实验总结实验内容:C#语言基础、程序流程控制 一、 实验目的 (1)练习 C#变量声明和…

simulink-自定义模块GUI回调函数

目录 一、创建simulink模块 二、自定义GUI步骤 2.1 设计组件界面信息 2.2 GUI控件介绍 2.2.1 Parameter参数配置组件 2.2.2 Container参数配置组件 2.2.3 Display参数配置组件 2.2.4 Action参数配置组件 2.3 控件回调函数使用方法 三、设置Help信息 四、获取配置控件参数 4.…

ubuntu 搭建RKNN-Toolkit环境

1. github下载官方的RKNN-Toolkit项目包 地址:https://github.com/rockchip-linux/rknn-toolkit 然后还需要下载rknn-toolkit包,GitHub下方有链接: 各种版本的官方下载: https://github.com/rockchip-linux/rknn-toolkit/relea…