linux系统---selinux

目录

前言

一、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.6开关一个布尔型规则

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

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

4.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  guestpasswd  -l  Administrator(root)
passwd  -l  guest

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

vim /etc/pam.d/system-authpassword    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=600pam_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 --> offhttpd_builtin_scripting --> onhttpd_can_check_spam --> offhttpd_can_connect_ftp --> off
3.6开关一个布尔型规则

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

setsebool -P httpd_anon_write on
#开启 httpd_anon_write 规则
3.7添加目录的默认安全上下文

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.8添加某类进程允许访问的端口

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.hqwc.cn/news/525412.html

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

相关文章

手写简易操作系统(三)--加载Loader

前情提要 上一节我们讲了如何启动计算机,这一节我们讲如何加载内核,内核是存在于硬盘上的一段程序,要加载这段程序,那么必然需要从硬盘上读取数据,这里我们就需要使用 ATA PIO 模式 根据ATA规范,所有符合A…

算法---双指针练习-4(盛水最多的容器)

题目 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址:盛水最多的容器 2. 讲解算法原理 算法的主要思路是使用双指针的方法,通过不断调整指针的位置来计算面积,并更新最大面积。具体步骤如下: 初始化左指针x为数组…

UE5.1_使用技巧(常更)

UE5.1_使用技巧(常更) 1. 清除所有断点 运行时忘记蓝图中的断点可能会出现运行错误的可能,务必运行是排除一切断点,逐个排查也是办法,但是在事件函数多的情况下会很复杂且慢节奏,学会一次性清除所有很有必…

第五十四回 高太尉大兴三路兵 呼延灼摆布连环马-AI通过构建并训练CNN网络来进行飞机识别

呼延灼举荐了百胜将韩滔和天目将彭玘做先锋。 两军对战,韩滔和秦明斗二十回合,呼延灼与林冲斗在一起,花荣与彭玘斗在一处,后彭玘与一丈青扈三娘斗在一起,被扈三娘抓住。 尽管梁山占优,宋江也没有乘胜追击&…

PyTorch之完整的神经网络模型训练

简单的示例: 在PyTorch中,可以使用nn.Module类来定义神经网络模型。以下是一个示例的神经网络模型定义的代码: import torch import torch.nn as nnclass MyModel(nn.Module):def __init__(self):super(MyModel, self).__init__()# 定义神经…

推理判断-聂佳-判读4-定义判断

知识点讲解 考点1 快速识别有效信息 考点2 同构选项排除 题目 考点1 快速识别有效信息 考点2 同构选项排除 总结

P4551 最长异或路径

最长异或路径 题目描述 给定一棵 n n n 个点的带权树,结点下标从 1 1 1 开始到 n n n。寻找树中找两个结点,求最长的异或路径。 异或路径指的是指两个结点之间唯一路径上的所有边权的异或。 输入格式 第一行一个整数 n n n,表示点数…

TI IWR6843ISK ROS驱动程序搭建

1、设备准备 1.1 硬件设备 1)TI IWR 6843 ISK 1块 2)Micro USB 数据线 1条 1.2 系统环境 1)VMware Workstation 15 Player 虚拟机 2)Ubuntu18.04 并安装有 ROS1 系统 如若没有安装 ROS 系统,可通过如下指令进行…

HarmonyOS 数据持久化 关系型数据库之 增删改逻辑编写

好 上文 HarmonyOS 数据持久化 关系型数据库之 初始化操作 我们讲了 关系型数据库初始化 那么 本文 我们来编写 增删改 相关代码 打开我们的项目 打开到 我们之前写的这个 relationalClass 类 然后 我们在 initTaskDB 下面再定义一个函数 叫 addTask 的函数 用来执行添加逻辑 …

存算一体成为突破算力瓶颈的关键技术?

大模型的训练和推理需要高性能的算力支持。以ChatGPT为例,据估算,在训练方面,1746亿参数的GPT-3模型大约需要375-625台8卡DGX A100服务器训练10天左右,对应A100 GPU数量约3000-5000张。 在推理方面,如果以A100 GPU单卡…

数论<1>——数论基础

这期博客是一个数论入门介绍,dalao们可以自动忽略。 Part 1:素数(质数) 说到数论,小学奥数里也有。我最先想到的就是质数了。素数就是一个只能被1和它自己整除的数。判断的方法也很简单,可以扫一遍就结束了,但是没必要。由于一个…

智能革新:2024年AI辅助研发的挑战、机遇与未来展望

引言 在进入2024年的门槛时,我们站在了一个科技飞速发展的新纪元,其中,人工智能(AI)的持续进步和应用扩展无疑是推动这一变革的强大动力。AI辅助研发,作为将人工智能技术应用于科研和产品开发过程的一种模…