七、SElinux

news2024/11/26 15:29:30

一、SElinux简介

  • SELinux是Security-Enhanced Linux的缩写,意思是安全强化的linux
  • SELinux 主要由美国国家安全局(NSA)开发,当初开发的目的是为了避免资源的误用·
  • 传统的访问控制在我们开启权限后,系统进程可以直接访问当我们对权限设置不严谨时,这种访问方式就是系统的安全漏洞

在开启SElinux后

  • 会对进程本身部署安全上下文
  • 会对文件部署安全上下文
  • 会对服务使用端口进行限制
  • 会对程序本身的不安全功能做限制

二、SElinux的工作原理

1.SElinux的工作方法

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

2.SElinux的安全上下文

安全上下文(security context):

  • 主体能不能访问目标除了策略指定外,主体与目标的安全上下文必须一致才能够顺利访问。        
  • 最终文件的成功访问还是与文件系统的rwx权限设置有关
  • 安全上下文的查看
[root@nfs-server ftp]# ls -Z
unconfined_u:object_r:public_content_t:s0 file
    system_u:object_r:public_content_t:s0 pub
[root@nfs-server ftp]# ps axZ | grep vsftpd
system_u:system_r:ftpd_t:s0-s0:c0.c1023 1467 ?   Ss     0:00 /usr/sbin/vsftpd /etc/vsftp/vsftpd.conf

Note:

安全上下文用冒号分为四个字段:Identify:role:type:

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

三、对于SElinux的管理及优化

1.SElinux的工作模式

SElinux有三种工作模式:

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

2.对于SElinux状态管理

a.查看SElinux当前状态

[root@30 ~]# getenforce
Enforcing

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

[root@30 ~]# setenforce 0|1    #只有在SElinux激活模式下才可以使用,不能用来开启或者关闭SElinus

Note 

0 表示宽容模式

1 表示强制模式

c.永久更改SElinux状态

[root@30 ~]# grubby --update-kernel ALL --args selinux=0
[root@30 ~]# grubby --update-kernel ALL --remove-args selinux
        #永久更改SElinux的状态需要在更改后重启系统才能生效

d.重启SElinux

系统在开启SElinux后,重启系统SElinux的所有内容不会有任何变化,如果需要刷新SElinux需要执行以下操作:

[root@30 ~]#touch /.autorelable

3.管理文件的安全上下文

a.临时更改文件的安全上下文

chcon [-R] [-ttype] [-u user] [-r role] 文件
-R:连同该目录下的子目录也同时修改:
-t:后面接安全上下文的类型字段;
-u:后面接身份识别:
-r:后面接角色
chcon [-R] --reference=模板 目标文件    #将文件的安全上下文按照范例文件修改

b.永久修改安全上下文

semanager fcontext [-a|-d] [-t type] [-s user] [-r range] 文件
-l:列出所有记录-a:添加记录-m:修改记录-d:删除记录
-t:添加的类型
-p:指定添加的端口是tcp或udp协议的,port子命令下使用
-e:目标路径参考原路径的上下文类型,fcontext子命令下使用
-s:后面接身份识别
-r:后面接角色

Note 

系统将每个目录的默认SElinux type类型记录在/etc/selinux/targeted/contexts/目录内

用semanage这个命令的功能来查询:

semanage {login|user|port|interface|fcontext|translation} -l

在使用semanage更改完毕后必须要刷新否则不生效

c.刷新安全上下文

restorecon [-Rv] 文件或目录
-R:连同子目录一起修改
-v:将过程显示到屏幕上
[root@nfs-server mnt]# semanage fcontxt -l | grep /var/ftp
semanage: error: argument subcommand: invalid choice: 'fcontxt' (choose from 'import', 'export', 'login', 'user', 'port', 'ibpkey', 'ibendport', 'interface', 'module', 'node', 'fcontext', 'boolean', 'permissive', 'dontaudit')
[root@nfs-server mnt]# semanage fcontext -l | grep /var/ftp
/var/ftp(/.*)?                                     all files          system_u:object_r:public_content_t:s0 
/var/ftp/bin(/.*)?                                 all files          system_u:object_r:bin_t:s0 
/var/ftp/etc(/.*)?                                 all files          system_u:object_r:etc_t:s0 
/var/ftp/lib(/.*)?                                 all files          system_u:object_r:lib_t:s0 
/var/ftp/lib/ld[^/]*\.so(\.[^/]*)*                 regular file       system_u:object_r:ld_so_t:s0 
[root@nfs-server mnt]# semanage fcontext -a -t public_content_t '/mnt/senfile(/.*)?'
[root@nfs-server mnt]# 
[root@nfs-server mnt]# semanage fcontext -l | grep senfile
/mnt/senfile(/.*)?                                 all files          system_u:object_r:public_content_t:s0 
[root@nfs-server mnt]# ls -Z /mnt/senfile
unconfined_u:object_r:public_content_t:s0 /mnt/senfile
[root@nfs-server mnt]# restorecon -RvvF /mnt/senfile
Relabeled /mnt/senfile from unconfined_u:object_r:public_content_t:s0 to system_u:object_r:public_content_t:s0
[root@nfs-server mnt]# 

4.selinux对linux服务的影响

a.服务功能的影响

查看sebool值:

[root@nfs-server ~]#getsebool -a | grep 服务名称

修改sebool值:

[root@nfs-server ~]#setsebool -P <bool类型> <0|1>
-P:表示永久生效
0:表示功能关闭
1:表示功能开启

具体操作步骤:

[root@nfs-server ~]# dnf install vsftpd -y
[root@nfs-server ~]# vim /etc/vsftpd/vsftpd.conf 
[root@nfs-server ~]# systemctl enable --now vsftpd
Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /usr/lib/systemd/system/vsftpd.service.

[root@nfs-server ~]# 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@nfs-server ~]# setsebool -P ftpd_anon_write on
[root@nfs-server ~]# getsebool -a | grep ftp
ftpd_anon_write --> on
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

b.服务的端口影响

查看服务被允许使用的端口:

[root@nfs-server ~]# semanage port -l | grep 服务

根据需求更改被允许使用的端口:

[root@nfs-server ~]# semanage port -a -t 服务下面的端口 -p 服务 xx(端口号) 
[root@nfs-server ~]# semanage port -l | grep http
http_cache_port_t              tcp      8080, 8118, 8123, 10001-10010
http_cache_port_t              udp      3130
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t            tcp      5988
pegasus_https_port_t           tcp      5989
[root@nfs-server ~]# semanage port -a -t http_port_t -p tcp 6868
[root@nfs-server ~]# semanage port -l | grep http
http_cache_port_t              tcp      8080, 8118, 8123, 10001-10010
http_cache_port_t              udp      3130
http_port_t                    tcp      6868, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t            tcp      5988
pegasus_https_port_t           tcp      5989

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

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

相关文章

Paddle Inference部署推理(一)

一&#xff1a;Paddle Inference推理 简介 Paddle Inference 是飞桨的原生推理库&#xff0c;提供服务器端的高性能推理能力。由于 Paddle Inference 能力直接基于飞桨的训练算子&#xff0c;因此它支持飞桨训练出的所有模型的推理。 Paddle Inference 功能特性丰富&#xff…

【数据分享】2001-2023年我国30米分辨率冬小麦种植分布栅格数据(免费获取)

小麦、玉米、水稻等各类农作物的种植分布数据在农业、环境、国土等很多专业都经常用到&#xff01; 本次给大家分享的是我国2001-2023年逐年的30米分辨率冬小麦种植分布栅格数据&#xff01;数据格式为TIFF格式&#xff0c;数据坐标为GCS_WGS_1984。该数据包括我国11个省份的冬…

类和对象plus版

一.类的定义 1.1类定义的格式 图中class为关键字&#xff0c;Stack为类的名字&#xff0c;用{}框住类的主体&#xff0c;类定义完后&#xff1b;不能省略。 为了区分成员变量&#xff0c;一般习惯在成员变量前面或后面加一个特殊标识&#xff0c;_或者m_ 1.2访问限定符 c采用…

jquery-picture-cut 任意文件上传(CVE-2018-9208)

目录 1、漏洞描述 2、访问ip&#xff1a;port 3、一句话木马&#xff1a;exploit.php 4、上传一句话木马 5、中国蚁剑连接成功 6、拿到flag 1、漏洞描述 jQuery是一个快速、简洁的JavaScript框架&#xff0c;是继Prototype之后又一个优秀的JavaScript代码库&#xff08;框…

【Spring Boot】# 使用@Scheduled注解无法执行定时任务

1. 前言 在 Spring Boot中&#xff0c;使用Scheduled注解来定义定时任务时&#xff0c;定时任务不执行&#xff1b;或未在规定时间执行。 import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component;Component public c…

LM2904运算放大器的应用:测电池电压

在电子设备的广泛应用中&#xff0c;电池作为便携设备的能量来源&#xff0c;其电压监测显得尤为关键。LM2904作为一款低功耗、高增益带宽积和高共模抑制比的双运算放大器&#xff0c;非常适用于电池电压的测量与监测。本文详细介绍了LM2904在电池电压测量方面的应用&#xff0…

电子学习中的关键游戏化元素

游戏化彻底改变了电子学习领域&#xff0c;提供了一种使学习具有吸引力、互动性和有效性的方法。通过将类似游戏的功能集成到教育平台中&#xff0c;教育工作者可以增强动力&#xff0c;提高知识记忆&#xff0c;并创造动态的学习体验。游戏化的关键要素为设计与学习者产生共鸣…

【网络通信】数据集合集!

本文将为您介绍经典、热门的数据集&#xff0c;希望对您在选择适合的数据集时有所帮助。 1 RITA 更新时间&#xff1a;2024-11-22 访问地址: GitHub 描述&#xff1a; RITA 是一个用于网络流量分析的开源框架。 该框架以 TSV 或 JSON 格式提取 Zeek 日志&#xff0c;目前支…

竞赛经验:关于不记得字母表,如何知道字母顺序qwq

利用ASCII码算出码值再转成字符即可 #include <bits/stdc.h> using namespace std;int main() {for(int i 1; i < 30; i){cout << char(ai) << ;} }结果&#xff1a; ps:大意了&#xff0c;本想用电脑目录&#xff0c;但没考虑到会有文件不存在导致缺…

GitLab指定用户分配合并权限

进入项目 -》 Project Settings Repository -》展开 Protected branches -》 添加要保护的分支&#xff0c;设置角色 管理用户角色权限 查看到不同用户的角色&#xff0c;一般设置Developer只有Merger Request权限&#xff0c;Maintainer还有Merge审批权限 GitLab 中的权限…

C语言菜鸟入门·关键字·union的用法

目录 1. 简介 2. 访问成员 2.1 声明 2.2 赋值 3. 共用体的大小 4. 与typedef联合使用 5. 更多关键字 1. 简介 共用体&#xff08;union&#xff09;是一种数据结构&#xff0c;它允许在同一内存位置存储不同的数据类型&#xff0c;但每次只能存储其中一种类型的…

[C++]了解内置类型升级

内置类型升级 1.调用模板T时&#xff0c;为什么可以使用T()类型的匿名对象来传参2.内置类型被升级成为类后的使用事项 1.调用模板T时&#xff0c;为什么可以使用T()类型的匿名对象来传参 当我们在定义或声明一个函数时&#xff0c;如果想使用模板T类型的默认构造&#xff08;例…

JavaScript的基础数据类型

一、JavaScript中的数组 定义 数组是一种特殊的对象&#xff0c;用于存储多个值。在JavaScript中&#xff0c;数组可以包含不同的数据类型&#xff0c;如数字、字符串、对象、甚至其他数组。数组的创建有两种常见方式&#xff1a; 字面量表示法&#xff1a;let fruits [apple…

Neural Magic 发布 LLM Compressor:提升大模型推理效率的新工具

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

友思特新闻 | 友思特荣获广州科技创新创业大赛智能装备行业赛初创组优胜企业!

2024年11月19日&#xff0c;第十三届中国创新创业大赛&#xff08;广东广州赛区&#xff09;暨2024年广州科技创新创业大赛智能装备行业赛颁奖典礼隆重举行。 赛事奖项介绍&#xff1a;广州科技创新创业大赛智能装备行业赛 第十三届“中国创新创业大赛&#xff08;广东广州赛区…

以灵魂的方式进入:从table和drawer哪个单词更长说起

有两个单词&#xff0c;table和drawer&#xff1a; table n.桌子drawer n.抽屉 现在就问&#xff0c;这两个单词&#xff0c;哪个单词更长&#xff1f;你会说&#xff0c;神经&#xff0c;这还用问吗&#xff1f;哪个单词更长&#xff0c;不一目了然吗&#xff1f; 其实&…

车载测试核心知识点和面试题

今天为大家分享一下车载测试岗位面试的时候&#xff0c;一定会问的相关技术。这些工具在测试的工作中会用到&#xff0c;在面试中也会经常被问到。所以同学们一定要去实战操作&#xff0c;这样理解和吸收才会更加深刻。 一、车载仪表台架测试CANoe工具实战 我们知道&#xff…

C/C++逆向:虚函数逆向分析

虚函数&#xff08;Virtual Function&#xff09;是C中实现多态的一种机制&#xff0c;它允许在运行时通过基类的指针或引用调用派生类中的函数&#xff0c;而不是基类中的版本。虚函数通常与继承和多态结合使用。通过在基类中使用 virtual 关键字声明函数&#xff0c;允许派生…

es写入磁盘的过程以及相关优化

数据写入到内存buffer同时写入到数据到translog buffer,这是为了防止数据不会丢失每隔1s数据从buffer中refresh到FileSystemCache中,生成segment文件,这是因为写入磁盘的过程相对耗时,借助FileSystemCache,一旦生成segment文件,就能通过索引查询到了refresh完,memory bu…

linux部署Whisper 视频音频转文字

github链接&#xff1a;链接 我这里使用anaconda来部署&#xff0c;debian12系统&#xff0c;其他linux也同样 可以使用gpu或者cpu版本&#xff0c;建议使用n卡&#xff0c;rtx3060以上 一、前期准备 1.linux系统 链接&#xff1a;debian安装 链接&#xff1a;ubuntu安装 …