Linux系统——SElinux

news2024/11/24 19:42:28

目录

前言

一、SELinux 的作用及权限管理机制 

1.SELinux 的作用

1.1DAC

1.2MAC

1.3DAC 和 MAC 的对比

2.SELinux 基本概念

2.1主体(Subject)

2.2对象(Object)

2.3政策和规则(Policy & Rule) 

2.4安全上下文(Security Context)

2.4.1安全上下文的结构及含义

2.5SELinux 的工作模式

3.SELinux 基本操作

3.1查询文件或目录的安全上下文

3.2 查询进程的安全上下文

3.3手动修改文件或目录的安全上下文

3.4把文件或目录的安全上下文恢复到默认值

3.5查询系统中的布尔型规则及其状态

3.7开关一个布尔型规则

3.8添加目录的默认安全上下文

3.9添加某类进程允许访问的端口

4.SElinux权限管理

SElinux配置文件


前言

安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。

SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。

SELinux 的结构及配置非常复杂,而且有大量概念性的东西,要学精难度较大。很多 Linux 系统管理员嫌麻烦都把 SELinux 关闭了。

禁用Administrator与Guest用户

sudo usermod -L /sbin/nologin  Administrator(root)
sudo usermod -L /sbin/nologin  guest


passwd  -l  Administrator(root)
passwd  -l  guest

设置密码最小长度为8位,密码必须符包含大小写字符与数字的策略

vim /etc/pam.d/system-auth

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=8 lcredit=-1 ucredit=-1 dcredit=-1  enforce_for_root

参数说明
负数:代表最少出现次数,正数:代表最多出现次数
minlen = 8,密码长度至少8位;
lcredit=-1,至少包含一个小写字母;
ucredit=-1,至少包含一个大写字母;
dcredit=-1,至少包含要给数字;
ocredit=-1,至少包含一个特殊字符;
difok=5,新密码最多与旧密码重复5个字符;
enforce_for_root,对root强制执行密码复杂度策略。

输入三次无效用户锁定,锁定时间为10分钟

yum install pam pam_tally2  

/etc/pam.d/system-auth文件并找到以下行:
auth        required      pam_env.so
在行的下方添加以下内容:
auth     required    pam_tally2.so deny=3 onerr=fail unlock_time=600 even_deny_root root_unlock_time=600

pam_tally2.so:指定使用pam_tally2模块。
deny=3:定义了密码错误达到3次后用户被拒绝登录。
onerr=fail:如果模块遇到错误,将导致认证失败。
unlock_time=300:定义用户被锁定的时间(以秒为单位)


###需要重启  对图形界面无效

一、SELinux 的作用及权限管理机制 

1.SELinux 的作用

SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。

1.1DAC

在没有使用 SELinux 的操作系统中,决定一个资源是否能被访问的因素是:某个资源是否拥有对应用户的权限(读、写、执行)。只要访问这个资源的进程符合以上的条件就可以被访问。而最致命问题是,root 用户不受任何管制,系统上任何资源都可以无限制地访问。这种权限管理机制的主体是用户,也称为自主访问控制(DAC)。

1.2MAC

在使用了 SELinux 的操作系统中,决定一个资源是否能被访问的因素除了上述因素之外,还需要判断每一类进程是否拥有对某一类资源的访问权限。

这样一来,即使进程是以 root 身份运行的,也需要判断这个进程的类型以及允许访问的资源类型才能决定是否允许访问某个资源。进程的活动空间也可以被压缩到最小。

即使是以 root 身份运行的服务进程,一般也只能访问到它所需要的资源。即使程序出了漏洞,影响范围也只有在其允许访问的资源范围内。安全性大大增加。

这种权限管理机制的主体是进程,也称为强制访问控制(MAC)。

而 MAC 又细分为了两种方式,一种叫类别安全(MCS)模式,另一种叫多级安全(MLS)模式。

1.3DAC 和 MAC 的对比

在 DAC 模式下,只要相应目录有相应用户的权限,就可以被访问。而在 MAC 模式下,还要受进程允许访问目录范围的限制。 

2.SELinux 基本概念

2.1主体(Subject)

可以完全等同于进程。

2.2对象(Object)

被主体访问的资源。可以是文件、目录、端口、设备等。

2.3政策和规则(Policy & Rule) 

系统中通常有大量的文件和进程,为了节省时间和开销,通常我们只是选择性地对某些进程进行管制。而哪些进程需要管制、要怎么管制是由政策决定的。一套政策里面有多个规则。部分规则可以按照需求启用或禁用(以下把该类型的规则称为布尔型规则)。

规则是模块化、可扩展的。在安装新的应用程序时,应用程序可通过添加新的模块来添加规则。用户也可以手动地增减规则。

在 CentOS 7 系统中,有三套政策,分别是:

  • targeted:对大部分网络服务进程进行管制。这是系统默认使用的政策(下文均使用此政策)。
  • minimum:以 targeted 为基础,仅对选定的网络服务进程进行管制。一般不用。
  • mls:多级安全保护。对所有的进程进行管制。这是最严格的政策,配置难度非常大。一般不用,除非对安全性有极高的要求。

政策可以在 /etc/selinux/config 中设定。

2.4安全上下文(Security Context)

安全上下文是 SELinux 的核心。安全上下文我自己把它分为「进程安全上下文」和「文件安全上下文」。一个「进程安全上下文」一般对应多个「文件安全上下文」。只有两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由政策中的规则决定。

文件安全上下文由文件创建的位置和创建文件的进程所决定。而且系统有一套默认值,用户也可以对默认值进行设定。需要注意的是,单纯的移动文件操作并不会改变文件的安全上下文。

2.4.1安全上下文的结构及含义

安全上下文有四个字段,分别用冒号隔开。形如:system_u:object_r:admin_home_t:s0。

2.5SELinux 的工作模式

  • enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。
  • permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。
  • disabled:关闭 SELinux。

SELinux 工作模式可以在 /etc/selinux/config 中设定。

如果想从 disabled 切换到 enforcing 或者 permissive 的话,需要重启系统。反过来也一样。

enforcing 和 permissive 模式可以通过 setenforce 1|0 命令快速切换。

3.SELinux 基本操作

3.1查询文件或目录的安全上下文

ls -Z /etc/hosts
#查询 /etc/hosts 的安全上下文
-rw-r--r--. root root system_u:object_r:net_conf_t:s0 /etc/hosts

3.2 查询进程的安全上下文

ps auxZ | grep -v grep | grep nginx 
查询 Nginx 相关进程的安全上下文
system_u:system_r:httpd_t:s0 root 7997 0.0 0.0 122784 2156 ? Ss 14:31 0:00 nginx: master process /usr/sbin/nginx
system_u:system_r:httpd_t:s0 nginx 7998 0.0 0.0 125332 7560 ? S 14:31 0:00 nginx: worker process

3.3手动修改文件或目录的安全上下文

chcon [...]

选项含义
-u修改安全上下文的用户字段
修改安全上下文的用户字段修改安全上下文的角色字段
-t修改安全上下文的类型字段
-l修改安全上下文的级别字段
--reference修改与指定文件或目录相一致的安全上下文
-R-R
-h修改软链接的安全上下文(不加此选项则修改软链接对应文件)
chcon -u aaa_u -r bbb_r -t ccc_t test
#修改 test 的安全上下文为 aaa_u:bbb_r:ccc_t:s0

3.4把文件或目录的安全上下文恢复到默认值

restorecon [选项] [...]

restorecon -R /usr/share/nginx/html/
#添加一些网页文件到 Nginx 服务器的目录之后,为这些新文件设置正确的安全上下文

3.5查询系统中的布尔型规则及其状态

getsebool -a

由于该命令要么查询所有规则,要么只查询一个规则,所以一般都是先查询所有规则然后用 grep 筛选。

getsebool -a | grep httpd
#查询与 httpd 有关的布尔型规则
httpd_anon_write --> off

httpd_builtin_scripting --> on

httpd_can_check_spam --> off

httpd_can_connect_ftp --> off

3.7开关一个布尔型规则

setsebool [选项]   -P重启依然生效

setsebool -P httpd_anon_write on
#开启 httpd_anon_write 规则

3.8添加目录的默认安全上下文

semanage fcontext -a -t "(/.*)?"

注:目录或文件的默认安全上下文可以通过 semanage fcontext -l 命令配合 grep过滤查看

semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?"
#为 Nginx 新增一个网站目录 /usr/share/nginx/html2 之后,需要为其设置与原目录相同的默认安全上下文

3.9添加某类进程允许访问的端口

semanage port -a -t -p

注:各种服务类型所允许的端口号可以通过 semanage port -l 命令配合 grep 过滤查看

semanage port -a -t http_port_t -p tcp 10080
#为 Nginx 需要使用 10080 的端口用于 HTTP 服务

4.SElinux权限管理

SELinux的状态:

  • enforcing:强制,每个受限的进程都必然受限

  • permissive:允许,每个受限的进程违规操作不会被禁止,但会被记录于审计日志

  • disabled:禁用

相关命令:

  • getenforce: 获取selinux当前状态

  • sestatus :查看selinux状态

  • setenforce 0|1

    • 0: 设置为permissive  宽容

    • 1: 设置为enforcing   强制

[root@localhost html]#getenforce 
Enforcing


如果没有开启可以使用以下命令开启
[root@localhost html]#setenforce 1


永久开启需要修改  此处文件  /etc/selinux/config
vim /etc/selinux/config
# 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=enforcing

[root@localhost ~]#yum provides seinfo
#查询seinfo来源于哪个安装包

[root@localhost ~]#yum install setools-console.x86_64 -y

如果修改文件系统类型

如果开启SElinux  setenforce 为1的话就无法访问index.html;如果关闭SElinux setenforce为0的话就可以访问index.html

[root@localhost html]#seinfo  -t
#可以看到所有的安全上下文类型
[root@localhost html]# chcon -t var_t /var/www/html/index2.html
#把 index2文件类型修改  为  var_t
[root@localhost html]#ls -Z
-rw-r--r--. root root unconfined_u:object_r:var_t:s0   index2.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_rw_content_t:s0 index.html

需要打开软件端口绑定,如果端口不让绑定,一定是防护有问题;输入该命令后就可以重启httpd服务了

SElinux配置文件

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

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

相关文章

【牛客】VL65 状态机与时钟分频

描述 题目描述: 使用状态机实现时钟分频,要求对时钟进行四分频,占空比为0.25 信号示意图: clk为时钟 rst为低电平复位 clk_out 信号输出 Ps 本题题解是按照1000的状态转移进行的,不按照此状态进行,编译器…

小火星露谷管理器 如何一键安装模组

1 选择你喜欢的一键安装模组模板 有两种渠道获取一键安装模板: 通过管理器首页的新手上路按钮,获取sve或里奇赛德村的一键安装模板通过小火星露谷社区获取一键安装模板 1.1 小火星露谷管理器首页获取一键安装模板 管理器的首页有两个内置的一键安装模…

【Docker】提交Docker镜像改变(自定义Redis镜像)

查看某个容器发生改变(操作日志) docker diff redis A: 添加文件或目录(ADD)D:文件或者目录删除(DELETE)C:文件或者目录更改(CHANGE) 对更改的容器进行保存 我们平时使用镜像,会做一些自定义,比如配置文件的修改,数据的增删改等等有很多&…

Linux操作系统性能调优

Linux操作系统性能调优 前言: ​ Linux服务器运行了很多应用,在高负载下,服务器可能会出现性能瓶颈,例如CPU利用率过高、内存不足、磁盘I/O瓶颈等,从而导致系统卡顿,服务无法正常运行等问题。所以针对以上问题&#…

用ChatGPT计算植被归一化指数NDVI并出图的详细教程

用ChatGPT结合GIS计算植被归一化指数NDVI出图教程 用ENVI计算比较繁琐,如今AI的盛行,我们可以轻松解决计算问题,只需1一分钟变可以出图。 详细教学请看上方视频步骤。 更多ChatGPT教学内容请见:ChatGPT结合GIS:一分钟…

SpringCloud2023最新版本该如何进行组件选型?

前言 Developing distributed systems can be challenging. Complexity is moved from the application layer to the network layer and demands greater interaction between services. Making your code ‘cloud-native’ means dealing with 12-factor issues such as exte…

万赞提问:自动化测试的发展前景怎么样?

一个行业前景怎么样? 先看看市场需求。 下面是一部分自动化测试岗位的相关数据: 据统计,当前企业对自动化的需求已经接近一半左右了,请看下图: 自动化发展的前景如何,市场给出的薪资也是一个重要参考,来看…

Linux笔记--GCC

GCC编译器是Linux系统下最常用的CIC编译器,大部分Linux发行版中都会默认安装。GCC编译器通常以gcc指令的形式在终端中使用。 一.gcc指令 1.直接编译 创建a.c文件 #使用gcc对程序进行编译,默认得到可执行文件的文件名为a.out gcc [文件名].c gcc a.c .…

【框架学习 | 第一篇】一篇文章读懂MyBatis

文章目录 1.Mybatis介绍1.1Mybatis历史1.2Mybatis特点1.3与其他持久化框架对比1.4对象关系映射——ORM 2.搭建Mybatis2.1引入依赖2.2创建核心配置文件2.3创建表、实体类、mapper接口2.4创建映射文件2.4.1映射文件命名位置规则2.4.2编写映射文件2.4.3修改核心配置文件中映射文件…

智能驾驶规划控制理论学习06-基于优化的规划方法

目录 一、优化概念 1、一般优化问题 2、全局最优和局部最优 二、无约束优化 1、无约束优化概述 2、梯度方法 通用框架 线性搜索 回溯搜索 3、梯度下降 基本思想 实现流程 ​4、牛顿法 基本思想 实现流程 5、高斯牛顿法 6、LM法(Le…

怎么判断晶振是否起振?晶振不起振该怎么办?

如果怀疑晶振不起振造成电路板上电不良,该如何进一步判定是晶振本身的不良呢?这一步的判定非常关键,因为若为晶振不振,就可以排除晶振与电路板不匹配造成电路板上电不良发生的假定。晶发电子以下介绍针对晶振单体判定的方法: 1.…

Python内置模块

目录 什么是模块 模块分类 通过模块创建者分类 系统内置模块 第三方模块 在线安装 离线安装 模块导入 math和random模块介绍 math模块 random模块 什么是模块 在我们编写程序时,需要导入包。例如随机数的产生,需要import random。import XXX&…

C++引入

引用不是新定义一个变量,而是给已经存在的变量取一个别名,编译器不会为了引用变量开辟内存空间,它和它引用的变量公用同一块内存空间。如李白被称为诗仙。李白和诗仙都是同一个人。 语法: 类型& 引用变量名(对象名)引用实体; 特性: 引用在…

一体化对账和结算平台的设计与实现

随着企业规模的扩大和业务的复杂化,对账和结算工作变得愈发繁琐和复杂。为了提高工作效率和降低错误率,许多企业开始寻求一体化对账和结算平台的解决方案。本文将探讨一体化对账和结算平台的设计原则和实施步骤,以及其在企业管理中的重要性。…

Canvas笔记04:绘制九大基本图形的方法,重头戏是贝塞尔曲线

hello,我是贝格前端工场,最近在学习canvas,分享一些canvas的一些知识点笔记,本期分享canvas绘制图形的知识,欢迎老铁们一同学习,欢迎关注,如有前端项目可以私信贝格。 Canvas是HTML5中的一个绘…

全方位碾压chatGPT4的全球最强模型Claude 3发布!速通指南在此!保姆级教学拿脚都能学会!

🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏《Spring 狂野之旅:从入门到入魔》 &a…

HTML静态网页成品作业(HTML+CSS)——舞蹈网页设计制作(5个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码CSS部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有5个页面。 &#x1…

CogCaliperTool卡尺工具

CogCaliperTool(卡尺工具) CogCaliperTool(卡尺工具)是一种用于测量直线特征的工具。该工具通常用于检测图像中的边缘、轮廓或其他直线特征,并提供精确的测量数据,如长度、角度和位置信息。 比如说我们需要测量下图工具的边缘对…

Typescript的联合类型和交叉类型

联合类型 在 TypeScript 中,可以使用联合类型来定义对象接口,从而表示一个对象可以具有多种不同结构的类型。联合类型是或的关系!!! interface Circle {kind: "circle";radius: number; }interface Square {kind: "square";sideLe…

Positional Encoding 位置编码

Positional Encoding 位置编码 flyfish Transformer模型没有使用循环神经网络,无法从序列中学习到位置信息,并且它是并行结构,不是按位置来处理序列的,所以为输入序列加入了位置编码,将每个词的位置加入到了词向量中…