Linux学习——7_SElinux

SElinux

SElinux简介

SELinux是Security-Enhanced Linux的缩写,意思是安全强化的linux
SELinux 主要由美国国家安全局(NSA)开发,当初开发的目的是为了避免资源的误用
传统的访问控制在我们开启权限后,系统进程可以直接访问
当我们对权限设置不严谨时,这种访问方式就是系统的安全漏洞
在开启SElinux后
会对进程本身部署安全上下文
会对文件部署安全上下文
会对服务使用端口进行限制
会对程序本身的不安全功能做限制

SElinux工作原理

SElinux工作方式

SELinux是通过MAC的方式来控制管理进程,它控制的主体是进程,而目标则是该进程能否读取的文件资源
主体(subject):就是进程
目标(object):被主体访问的资源,可以是文件、目录、端口等。
策略(policy):由于进程与文件数量庞大,因此SELinux会依据某些服务来制定基本的访问安全策略
        targeted:针对网络服务限制较多,针对本机限制较少,是默认的策略;
        strict:完整的SELinux限制,限制方面较为严格。

SElinux安全上下文

安全上下文(security context):
主体能不能访问目标除了策略指定外,主体与目标的安全上下文必须一致才能够顺利访问。
最终文件的成功访问还是与文件系统的rwx权限设置有关

查看是否开启SElinux

已开启的主机:
[root@localhost ~]# getenforce 
Disabled
[root@localhost ~]# grubby --update-kernel ALL --args selinux=1
[root@localhost ~]# reboot [root@localhost ~]# dnf install vsftpd -y
[root@localhost ~]# systemctl start vsftpd.service 
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 

[root@localhost ~]# systemctl restart vsftpd.service 
[root@localhost ~]# chmod 777 /var/ftp/pub/
[root@localhost ~]# ps axZ |grep vsftpd
system_u:system_r:ftpd_t:s0-s0:c0.c1023 1924 ?   Ss     0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1965 pts/0 S+   0:00 grep --color=auto vsftpd
[root@localhost ~]# touch /mnt/leefile
[root@localhost ~]# ls -Z /mnt/
unconfined_u:object_r:default_t:s0 file1  unconfined_u:object_r:default_t:s0 file3  unconfined_u:object_r:default_t:s0 file5
unconfined_u:object_r:default_t:s0 file2  unconfined_u:object_r:default_t:s0 file4      unconfined_u:object_r:mnt_t:s0 leefile

对文件的影响:

[root@localhost ~]# mv /mnt/leefile /var/ftp/
[root@localhost ~]# cd /var/ftp/
[root@localhost ftp]# ls
leefile  pub
[root@localhost ftp]# curl ftp://172.25.254.129
drwxrwxrwx    2 0        0               6 May 09  2023 pub[root@localhost ftp]# lftp 172.25.254.129
lftp 172.25.254.129:~> ls
drwxrwxrwx    2 0        0               6 May 09  2023 pub
lftp 172.25.254.129:/> cd pub/
lftp 172.25.254.129:/pub> ls
lftp 172.25.254.129:/pub> put /etc/passwd
put: /etc/passwd: Access failed: 553 Could not create file. (passwd)
lftp 172.25.254.129:/pub> ls[root@localhost ftp]# getsebool -a |grep ftp
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> off

对端口的影响:

[root@localhost ftp]# vim /etc/ssh/sshd_config
[root@localhost ftp]# systemctl restart sshd
Job for sshd.service failed because the control process exited with error code.
See "systemctl status sshd.service" and "journalctl -xeu sshd.service" for details.

未开启的主机:
[root@localhost ~]# getenforce 
Disabled
[root@localhost ~]# dnf install vsftpd -y
[root@localhost ~]# systemctl start vsftpd.service 
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 

[root@localhost ~]# systemctl restart vsftpd.service 
[root@localhost ~]# chmod 777 /var/ftp/pub/
[root@localhost ~]# ps axZ |grep vsftpd
-                                  1805 ?        Ss     0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
-                                  1832 pts/0    S+     0:00 grep --color=auto vsftpd
[root@localhost ~]# touch /mnt/leefile
[root@localhost ~]# ls =Z /mnt/
ls: cannot access '=Z': No such file or directory
/mnt/:
hgfs  leefile

对文件的影响:

[root@localhost ~]# mv /mnt/leefile /var/ftp/
root@localhost ~]# cd /var/ftp/
[root@localhost ftp]# ls
leefile  pub
[root@localhost ftp]# lftp 172.25.254.133
lftp 172.25.254.133:~> ls
-rw-r--r--    1 0        0               0 Dec 11 09:21 leefile
drwxrwxrwx    2 0        0               6 May 09  2023 pub
lftp 172.25.254.133:/> quit
[root@localhost ftp]# curl ftp://172.25.254.133
-rw-r--r--    1 0        0               0 Dec 11 09:21 leefile
drwxrwxrwx    2 0        0               6 May 09  2023 pub[root@localhost ftp]# lftp 172.25.254.133
lftp 172.25.254.133:~> ls
-rw-r--r--    1 0        0               0 Dec 11 09:21 leefile
drwxrwxrwx    2 0        0               6 May 09  2023 pub
lftp 172.25.254.133:/> cd pub/
lftp 172.25.254.133:/pub> put /etc/passwd
2199 bytes transferred
lftp 172.25.254.133:/pub> ls
-rw-------    1 14       50           2199 Dec 11 09:42 passwd[root@localhost ftp]# getsebool -a |grep ftp
getsebool:  SELinux is disabled

对端口的影响:

[root@localhost ftp]# systemctl restart sshd

安全上下文的查看
文件的安全上下文
[root@localhost ~]# ls -Zsystem_u:object_r:admin_home_t:s0  anaconda-ks.cfg
unconfined_u:object_r:admin_home_t:s0  at_job.sh进程的安全上下文
[root@localhost ~]# ps axZ |grep vsftpd
system_u:system_r:ftpd_t:s0-s0:c0.c1023 1924 ?   Ss     0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 2341 pts/0 S+   0:00 grep --color=auto vsftpd

安全上下文用冒号分为四个字段:Identify:role:type:
身份标识(Identify):相当于账号方面的身份标识,主要有以下三种常见的类型:
  root: 表示root的账号身份;
  system_u: 表示程序方面的标识,通常就是进程;
  unconfined_u:代表的是一般用户账号相关的身份。
角色(role):通过角色字段,可知道这个数据是属于程序、文件资源还是代表用户。一般角色有:
  object_r: 代表的是文件或目录等文件资源;
  system_r: 代表的是进程。
类型(type):在默认的targeted策略中,Identify与role字段基本上是不重要的,重要的在于这个类型字段。而类型字段在文件与进程的定义不太相同,分别是:
  type: 在文件资源上面称为类型。
  domain: 在主体程序中则称为域
domain需要与type搭配,则该程序才能够顺利读取文件资源。
代表灵敏度,一般用s0、s1、s2来命名,数字代表灵敏度的分级。数值越大、灵敏度越高

对于SElinux的管理及优化

SElinux工作模式

SElinux有三种工作模式:
  enforcing:强制模式,开始限制domain/type。
  permissive:宽容模式,仅会有警告信息并不会实际限制domain/type的访问。
  disabled:关闭,SELinux并没有实际运行。

对于SElinux状态管理

1.查看SElinux当前状态查看

[root@localhost ~]# getenforce
Enforcing

2.临时更改SElinux的工作模式

[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce 
Permissive
[root@localhost ~]# setenforce 1
[root@localhost ~]# getenforce 
Enforcing

3.永久更改SElinux状态,永久更改SElinux的状态需要在更改后重启系统才能生效
在RHEL9之前的版本中通过文件来永久更改SElinux的状态

[root@localhost ~]# vim /etc/selinux/config SELINUX=enforcing|permissive|disabled

在RHEL9中需要通过修改内核启动参数来永久更改SElinux的状态

[root@localhost ~]# grubby --update-kernel ALL --args selinux=0
[root@localhost ~]# grubby --update-kernel ALL --remove-args selinux

4.重启SElinux

系统在开启SElinux后,重启系统SElinux的所有内容不会有任何变化如果需要刷新SElinux

[root@localhost ~]# touch /.autorelabel

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

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

相关文章

Jenkins:开源自动化工具深度剖析

Jenkins,作为一款开源的自动化工具,在软件开发领域扮演着举足轻重的角色。它基于Java开发,提供了一个强大的持续集成系统,旨在帮助开发团队加速软件开发过程,提高软件质量,并通过自动化流程减少手动操作和重…

es(elasticsearch)

elasticsearch启动顺序 文章目录 elasticsearch启动顺序 1️⃣、elasticsearch-7.6.12️⃣、elasticsearch-head-master3️⃣、elasticsearch-7.6.1-kibana-7.6.1 1️⃣、elasticsearch-7.6.1 双击:D:\javaworkspace\java\elasticsearch-7.6.1-windows-x86_64\elas…

频道web - 性能优化之往返缓存

性能优化之往返缓存 往返缓存简介:如何验证当前页面是否有往返缓存?有哪些开发场景可以用bfcache提升性能?哪些无需关注?阻止页面进行往返缓存的行为都有哪些?1、缓存2、强制刷新3、浏览器设置4、JavaScript 代码5、网络问题6、 iframe 本身不符合 bfcache 的条件为什么会…

java+springboot+mysql法律咨询网

项目介绍: 使用javaspringbootmysql开发的法律咨询网(文书),系统包含管理员、用户角色,功能如下: 管理员:登录系统;用户管理;文章管理(法律知识&#xff09…

CTF之密码学(rot密码)

ROT加密算法,也被称为Caesar加密,是一种简单的字母替换加密算法。以下是对ROT加密算法的详细介绍: 一、基本原理 ROT加密算法通过将字母表中的每个字母向后(或向前)移动固定的位置来加密文本。选择一个固定的偏移量&…

SpringBoot【十】mybatis之xml映射文件>、<=等特殊符号写法!

一、前言&#x1f525; 环境说明&#xff1a;Windows10 Idea2021.3.2 Jdk1.8 SpringBoot 2.3.1.RELEASE 在利用mybatis进行开发的时候&#xff0c;编写sql时可能少不了>、<等比较符号&#xff0c;但是在mapper映射文件中直接使用是不行的&#xff0c;会报错&#xff0…

代理IP在电商数据爬取中的成本效益分析

在电子商务领域&#xff0c;数据的重要性不言而喻。它不仅关系到市场趋势的把握&#xff0c;还直接影响到产品定价、库存管理和客户服务等关键业务。电商数据爬取是获取这些数据的重要手段之一。然而&#xff0c;直接爬取电商网站数据可能会遇到IP被封禁、数据获取不全面等问题…

【MIT-OS6.S081作业1.3】Lab1-utilities primes

本文记录MIT-OS6.S081 Lab1 utilities 的primes函数的实现过程 文章目录 1. 作业要求primes (moderate)/(hard) 2. 实现过程2.1 代码实现 1. 作业要求 primes (moderate)/(hard) Write a concurrent version of prime sieve using pipes. This idea is due to Doug McIlroy, in…

linux 下硬盘挂载c

1. 检查硬盘的文件系统类型 确保你所尝试挂载的硬盘 /dev/vdb 上已经有一个有效的文件系统。你可以用 lsblk -f 令查看硬盘的文件系统类型。 lsblk -f2. 检查挂载命令的语法 硬盘已经格式化为 ext4 sudo mount -t ext4 /dev/vdb /data 确保你在挂载时没有指定错误的文件系统…

docker的网络类型和使用方式

docker的网络类型 5种网络类型 bridge 默认类型&#xff0c;桥接到宿主机docker0的网络&#xff0c;有点类似于VM虚拟机的NAT网络模型。 案例: docker run --rm -itd --network bridge --name wzy666wzy-bridge alpine host host类型&#xff0c;共享宿主机的网络空间&#…

C# 探险之旅:第二节 - 定义变量与变量赋值

欢迎再次踏上我们的C#学习之旅。今天&#xff0c;我们要聊一个超级重要又好玩的话题——定义变量与变量赋值。想象一下&#xff0c;你正站在一个魔法森林里&#xff0c;手里拿着一本空白的魔法书&#xff08;其实就是你的代码编辑器&#xff09;&#xff0c;准备记录下各种神奇…

URI 未注册(设置 语言和框架 架构和 DTD)

一、问题描述&#xff1a;在springboot项目中的resources中新建mybatis-config.xml文件时&#xff0c;从mybatis文档中复制的代码报错&#xff1a;URI 未注册(设置 | 语言和框架 | 架构和 DTD) 二、解决&#xff1a;在Springboot项目的设置->架构和DTD中添加 红色的网址&…

SSM 校园一卡通密钥管理系统 PF 于校园图书借阅管理的安全保障

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装校园一卡通密钥管理系统软件来发挥其高效地信息处理的作用&a…

在PowerShell下运行curl命令出现错误:Invoke-WebRequest : 无法处理参数,因为参数名称“u”具有二义性

今天在Windows 11下测试Nanamq的HTTP API&#xff0c;按照其文档输入&#xff1a; curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/subscriptions" 结果出现二义性错误&#xff1a; 而且输入curl --help命令想看看参数说明的时候&#xff…

java配置多数据源

三个数据库&#xff1a;master主库、back_one从库1、back_two从库2 1.application.yml配置三个数据库信息 spring:datasource:driver-class-name : com.mysql.jdbc.Driver# 主库master:jdbcUrl : jdbc:mysql://xxx:3306/master?useUnicodetrue&characterEncodingutf-8&a…

pytorch中的tqdm库

tqdm 是一个 Python 的进度条库&#xff0c;名字来源于阿拉伯语 "taqaddum"&#xff08;意思是“进步”&#xff09;。它以简单易用、高效著称&#xff0c;常用于循环操作中显示进度信息。 基本用法 1. 普通循环 tqdm 可以轻松为 for 循环添加进度条&#xff1a; …

MongoDB数据建模小案例

MongoDB数据建模小案例 朋友圈评论内容管理 需求 社交类的APP需求,一般都会引入“朋友圈”功能,这个产品特性有一个非常重要的功能就是评论体系。 先整理下需求: 这个APP希望点赞和评论信息都要包含头像信息: 点赞列表,点赞用户的昵称,头像;评论列表,评论用户的昵称…

针对嵌入式图形界面的图片压缩,几种比较平衡的算法选择:

RLE (Run Length Encoding) 变种 RLE-4: 4位游程编码&#xff0c;适合图标等色彩数较少的图像SRLE (Sparse RLE): 稀疏型RLE&#xff0c;对于UI中大面积相同颜色区域效果很好优点&#xff1a;解码速度快&#xff0c;实现简单缺点&#xff1a;对于复杂图案压缩率较低特别适合&am…

C++研发笔记16——C语言程序设计初阶学习笔记14

本篇笔记我们继续来学习第三部分《分支语句和循环语句》&#xff0c;在上一篇中我们详细学习了循环语句——for语句以及循环语句——do-while循环&#xff0c;接下来本部分的内容还包括&#xff1a;折半查找算法、猜数字游戏、goto语句。本篇笔记便可以结束第三部分的知识学习部…

三一集团Java开发面试题及参考答案

Java 中有几种常见的线程池? 在 Java 中,常见的线程池有以下几种: 首先是 FixedThreadPool(固定线程数线程池)。它的特点是创建一个固定大小的线程池,线程数量在初始化的时候就已经确定。例如,通过 Executors.newFixedThreadPool (int nThreads) 来创建,其中 nThreads …