9.SELinux

news2024/11/24 8:49:14

目录

1. 概述

1.1. 概念

1.2. 作用:

1.3. SELinux与传统的权限区别

2. SELinux工作原理

2.1. 名词解释

2.1.1. 主体(Subject)

2.1.2. 目标(Object)

2.1.3. 策略(Policy)

2.1.4. 安全上下文(Security Context)

2.2. 文件安全上下文查看

2.2.1. 先启用selinux

2.2.2. 命令:

3. SELinux的启动、关闭与查看

3.1. 三种配置模式

3.2. 原理图:

3.3. 模式管理

3.3.1. 查看当前模式

3.3.2. 临时开启/关闭

3.3.3. 永久关闭

3.3.4. 注意

3.4. selinux的状态

3.4.1. 命令

3.4.2. 分析

4. 修改安全上下文

4.1. chcon命令

4.1.1. 作用

4.1.2. 格式

4.1.3. 示例

4.2. restorecon命令

4.2.1. 作用

4.2.2. 格式:

4.3. semanage命令

4.3.1. 作用

4.3.2. 安装

4.3.3. 格式1:

4.3.4. 常用命令组

4.3.5. 布尔值的查询与修改:

4.4. 实验

4.4.1. 实验1

4.4.2. 实验2

4.4.3. 实验3


1. 概述

1.1. 概念

SELinux(Security-Enhanced Linux)是美国国家安全局在 Linux 开源社区的帮助下开发的一个强制访问控制(MAC,Mandatory Access Control)的安全子系统,用于各个服务进程都受到约束,使其仅获取到本应获取的资源

例如,电脑上下载了一个美图软件,当您全神贯注地使用它给照片进行美颜的时候,它却在后台默默监听着浏览器中输入的密码信息,而这显然不应该是它应做的事情

1.2. 作用:

SELinux 域限制:对服务程序的功能进行限制,以确保服务程序做不了出格的事情

SELinux 安全上下文:对文件资源的访问限制,确保文件资源只能被其所属的服务程序访问

1.3. SELinux与传统的权限区别

传统的文件权限与账号的关系:属于自主访问控制DAC(Discretionary Access Control),当某个进程想要对文件进行访问时,系统就会根据该进程的所有者/用户组,并比较文件的权限,若通过权限检查,就可以访问该文件,注意:各种权限设置对root用户是无效的

SELinux的以策略规则制定特定程序读取特定文件:属于强制访问控制MAC(Mandatory Access Control),可以针对特定的进程与特定的文件资源来进行权限的控制,即使你是root在使用不同的进程 时,你所能取得的权限并不一定是root,而得要看当时该进程的设置而定,则就可以针对进程来进行访问控制

2. SELinux工作原理

2.1. 名词解释

2.1.1. 主体(Subject)

主体就是想要访问文件或目录资源的进程。

进程得到资源流程:由用户调用命令,由命令产生进程,由进程去访问文件或目录资源。

自主访问控制系统中(Linux 默认权限中),靠权限控制的主体是用户

强制访问控制系统中(SELinux 中),靠策略规则控制的主体则是进程

2.1.2. 目标(Object)

目标就是需要访问的文件或目录资源

2.1.3. 策略(Policy)

Linux 系统中进程与文件的数量庞大,限制进程是否可以访问文件的 SELinux 规则数量就更加烦琐,如果每个规则都需要管理员手工设定,那么 SELinux 的可用性就会极低,所以SELinux 默认定义了两个策略来制订规则

2个默认策略

(1)-targeted:默认策略,用于限制网络服务(dhcpd,httpd,named,nscd,ntpd,portmap, snmpd,squid,以及 syslogd),对本机系统的限制极少

(2)-mls:多级安全保护策略,该策略限制更为严格

2.1.4. 安全上下文(Security Context)

所有进程、文件和目录都有自己的安全上下文

进程是否能够访问文件或目录,就要其安全上下文是否匹配

例:找对象时,男人看作主体,女人就是目标,男人是否可以追到女人(主体是否可以访问目标),主要看两人的性格是否合适(主体和目标的安全上下文是否匹配),但两个人的性格是否合适,是需要靠生活习惯、为人处世、家庭环境等具体的条件来进行判断的(安全上下文是否匹配是需要通过策略中的规则来确定的)

关系图:

解释:

当主体(进程)访问目标(文件)时,首先和 SELinux 中定义好的策略进行匹配

若符合定义的规则,且主体的安全上下文和目标的安全上下文匹配则允许访问文件

若安全上下文比较失败,则拒绝访问,并通过 AVC(Access Vector Cache,访问向量缓存,主要用于记录所有和 SELinux 相关的访问统计信息)生成拒绝访问信息

注意:最终是否可以访问到目标文件,还要匹配产生进程(主体)的用户是否对目标文件拥有合理的rwx权限

2.2. 文件安全上下文查看

2.2.1. 先启用selinux

# 安装所需软件
[root@server ~]# yum install selinux-policy selinux-policy-targeted -y
# 编辑selinux配置文件
[root@server ~]# vim /etc/selinux/config # 先转为临时模式
SELINUX=permissive
[root@server ~]# touch /.autorelabel # 重建文件
[root@server ~]# reboot
[root@server ~]# vim /etc/selinux/config # 改为强制模式
SELINUX=enforcing
[root@server ~]# reboot

open启动方法

2.2.2. 命令:

[root@server ~]# ls -Z
system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
[root@server ~]# ll -Z
总用量 4
-rw-------. 1 root root system_u:object_r:admin_home_t:s0 1231 11月 15 12:00
anaconda-ks.cfg

2.2.3. 分析

重点为:system_u:object_r:admin_home_t:s0

安全上下文用冒号分为四个字段

身份标识(Identify):相当于账号方面的身份标识,有三种类型:

(1)root:安全上下文的身份是 root,默认会映射为unconfined_u

(2)system_u:系统用户身份,其中“_u”代表 user

(3)注意:user 字段只用于标识数据或进程被哪个身份所拥有,系统数据的 user 字段是 system_u,用户数据 user 字段是 user_u

(4)seinfo 命令

作用:查询身份、角色等信息,需要安装才可使用

[root@server ~]# yum install setools-console -y

格式:seinfo -参数

参数:

-u: 列出SELinux中所有的身份(user);
-r: 列出SELinux中所有的角色(role);
-t: 列出SELinux中所有的类型(type);
-b: 列出所有的布尔值(也就是策略中的具体规则名称);
-x: 显示更多的信息;

角色(role):表示此数据是进程还是文件或目录包含(了解就行)

(1)object_r:代表该数据是文件或目录,r代表 role(角色的意思)

(2)system_r:进程r代表 role

类型(type):

(1)

[root@server ~]# seinfo -t | more # 4991个类型

(2)最重要,进程是否可以访问文件,主要就是看进程的安全上下文类型字段是否和文件的安全上下文类型字段相匹配

(3)在默认的targeted策略中

(4)类型字段在主体(进程)的安全上下文中被称作域(domain)

(5)类型字段在目标(文件或目录)的安全上下文中被称作类型(type)

(6)进程的域与文件的类型是否匹配需要查询策略规则

灵敏度:用 s0s1s2 来命名,数字为灵敏度分级,数值越大,灵敏度越高

例:查看之前http的默认网页文件信息

[root@server ~]# yum install nginx -y
[root@server ~]# systemctl start nginx

[root@server ~]# ls -Zd /usr/share/nginx/html
system_u:object_r:httpd_sys_content_t:s0 /usr/share/nginx/html

3. SELinux的启动、关闭与查看

3.1. 三种配置模式

enforcing:强制模式,启用SELinux,将拦截服务的不合法请求

permissive:宽容模式,启用SELinux,遇到服务越权访问时,只发出警告而不强制拦截

disabled:关闭模式,SELinux没有运行

3.2. 原理图:

3.3. 模式管理

3.3.1. 查看当前模式

[root@server ~]# getenforce

3.3.2. 临时开启/关闭

[root@server ~]# setenforce 0 # 临时关闭selinux,转为宽容模式,重启系统失效
[root@server ~]# getenforce
Permissive

[root@server ~]# setenforce 1 # 临时开启selinux,转为强制模式,重启失效
[root@server ~]# getenforce
Enforcing

3.3.3. 永久关闭

[root@server ~]# vim /etc/selinux/config

SELINUX=disabled

[root@server ~]# reboot

3.3.4. 注意

enforcing与permissive之间切换时,需要重启系统

enforcing、permissive与disabled之间切换时,必须重启系统才会生效

3.4. selinux的状态

3.4.1. 命令

[root@server ~]# sestatus

3.4.2. 分析

[root@server ~]# sestatus 
SELinux status: enabled # 是否启用
SELinuxfs mount: /sys/fs/selinux # selinux临时文件系统的挂载点
SELinux root directory: /etc/selinux # 启动目录,配置文件位置
Loaded policy name: targeted # 当前加载的策略类型
										# 策略类型
										# targeted:只保护目标进行,默认
										# minimum:少数选定进程进行保护
										# mls:多级安全保护,最高级
Current mode: enforcing # 执行的模式,重要
Mode from config file: enforcing # 配置文件的模式
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 33

3.5. selinux配置文件

[root@server ~]# vim /etc/selinux/config

SELINUX=enforcing # 设置模式

SELINUXTYPE=targeted # 设置策略类型

# 注意:/etc/sysconfig/selinux文件与上述配置问价内容相同,选择一个配置即可

4. 修改安全上下文

4.1. chcon命令

4.1.1. 作用

手动修改目标的上下文策略

4.1.2. 格式

# 方法1
chcon [-R] [-t type] [-u user] [-r role] 文件名
-R:递归修改,当前目录及目录下的所有文件都同时设置
-t:后面接安全上下文件的类型字段(重要)
-u:后面接身份标识
-r:后面接角色
-v:显示变动结果
# 方法2:
chcon -R --reference=范例文件 文件名

4.1.3. 示例

例1:单独修改

[root@server ~]# touch test
[root@server ~]# ls -Z test
unconfined_u:object_r:admin_home_t:s0 test
[root@server ~]# ls -Z /etc/hosts
system_u:object_r:net_conf_t:s0 /etc/hosts
[root@server ~]# chcon -v -t net_conf_t ~/test
正在更改 '/root/test' 的安全上下文
[root@server ~]# ls -Z test
unconfined_u:object_r:net_conf_t:s0 test

例2:按照范例文件修改

[root@server ~]# touch temp
[root@server ~]# ls -Z temp
unconfined_u:object_r:admin_home_t:s0 temp

[root@server ~]# ls -Z /etc/passwd
system_u:object_r:passwd_file_t:s0 /etc/passwd

[root@server ~]# chcon -v --reference=/etc/passwd ~/temp
正在更改 '/root/temp' 的安全上下文
[root@server ~]# ls -Z temp
system_u:object_r:passwd_file_t:s0 temp

4.2. restorecon命令

4.2.1. 作用

让文件的SELinux类型恢复为默认的SELinux类型默认的SELinux类型与semanage命令有关,其参考semanage命令所查询的默认SELinux类型

4.2.2. 格式:

restorecon [-Rv] 文件或目录
-R:连同子目录一起修改;
-v:将过程显示到屏幕上

例1:接上例,将~/test 恢复默认类型

[root@server ~]# cd ~
[root@server ~]# ls -Z /root
[root@server ~]# ls -Z ~/test
[root@server ~]# restorecon -Rv ~/test
[root@server ~]# ls -Z ~/test

4.3. semanage命令

4.3.1. 作用

用于管理 SELinux 的策略,查询/修改/增加/删除文件的默认SELinux安全上下文,管理网络端口、消息接口等

4.3.2. 安装

[root@server ~]# yum install policycoreutils-python-utils  -y

4.3.3. 格式1:

semanage 选项 参数 文件

选项:login|user|port|interface|fcontext|translation|boolean ,注意:fcontext查询默认安全上下文(重要)

参数

-l :查询;
-a :添加
-m :修改
-d :删除
-D :全部删除
-t :类型
-r :角色
-s :用户
-f :文件

文件:设置对象文件或目录

4.3.4. 常用命令组

查询文件的默认安全上下文

[root@server ~]# semanage fcontext -l | grep 文件名

[root@server ~]# semanage fcontext -l | grep /etc/passwd
/etc/passwd[-\+]? regular file system_u:object_r:passwd_file_t:s0
/etc/passwd\.OLD regular file system_u:object_r:passwd_file_t:s0
/etc/passwd\.adjunct.* regular file system_u:object_r:passwd_file_t:s0
/etc/passwd\.lock regular file system_u:object_r:passwd_file_t:s0

查看允许访问的端口

[root@server ~]# semanage port -l | grep 协议
[root@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@server ~]# semanage port -l | grep dns
dns_port_t 		tcp 53, 853
dns_port_t 		udp 53, 853
dnssec_port_t 	tcp 8955

4.3.5. 布尔值的查询与修改:

作用:布尔值可以作为文件规则的开关来控制权限的给予:放行/阻塞

常用命令:

getsebool -a # 列出目前系统上面的所有布尔值条款
getsebool 规则名
setsebool -P 规则名=1|0 # 设置写入文件

4.4. 实验

4.4.1. 实验1

使用nginx服务演示安全上下文值的设定

服务端操作

# 恢复快照

# 开启selinux
[root@server ~]# vim /etc/selinux/config
SELINUX=enforcing

[root@server ~]# reboot

# 查看模式
[root@server ~]# getenforce
Enforcing

# nginx软件安装
[root@server ~]# yum install nginx -y

# 新建存储网页的目录
[root@server ~]# mkdir -p /www/zy

# 使用xftp将zy网站数据文件上传到/www/zy目录中

# 编辑nginx主配置文件
[root@server ~]# vim /etc/nginx/nginx.conf
				root 	/www/zy;
# 重启服务
[root@server ~]# systemctl restart nginx

# 测试,返回403,说明selinux对/www/zy的安全上下文件检测未通过

# 将/www/zy的策略类型改为已知可以访问的策略
[root@server ~]# ls -Zd /usr/share/nginx/html/
system_u:object_r:httpd_sys_content_t:s0 /usr/share/nginx/html/

[root@server ~]# ls -Zd /www/zy
unconfined_u:object_r:default_t:s0 /www/zy
[root@server ~]# chcon -Rv -t httpd_sys_content_t /www/zy

# 注意:chcon命令也可以使用参照范例文件修改来实现访问
[root@server ~]# chcon -R --reference=/usr/share/nginx/html/ /www/zy
[root@server ~]# ls -Zd /www/zy
system_u:object_r:httpd_sys_content_t:s0 /www/zy

# 浏览器中重新测试

4.4.2. 实验2

使用nginx服务的端口号修改演示selinux的设定

# 基于上例
# 检查selinux的状态
[root@server ~]# getenforce
Enforcing
# 编辑httpd的主配置文件修改监听端口号
[root@server ~]# vim /etc/nginx/nginx.conf
		server {
				listen 7777;

# 重启服务失败,selinux拦截端口的修改
[root@server ~]# systemctl restart nginx
Job for nginx.service failed because the control process exited with error code.
See "systemctl status nginx.service" and "journalctl -xeu nginx.service" for
details.

# 查看selinux允许的端口号
[root@server ~]# semanage port -l | grep http_port_t
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988

# 使用semanage命令将7777端口号添加到http_port_t类型列表中
[root@server ~]# semanage port -a -t http_port_t -p tcp 7777
[root@server ~]# semanage port -l | grep http_port_t

# 重启服务
[root@server ~]# systemctl restart nginx

# 测试,浏览器输入:192.168.223.129:7777

4.4.3. 实验3

演示ssh端口号修改的selinux设定

[root@server ~]# vim /etc/ssh/sshd_config # 修改ssh的端口号为2222
Port 2222

[root@server ~]# 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@server ~]# semanage port -l | grep ssh_port_t # 查看ssh的的端口号策略
ssh_port_t tcp 22
[root@server ~]# semanage port -a -t ssh_port_t -p tcp 2222 # 策略中添加新端口
[root@server ~]# semanage port -l | grep ssh_port_t
ssh_port_t 			tcp 			2222, 22
[root@server ~]# systemctl restart sshd

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

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

相关文章

河南省考后天网上确认,请提前准备证件照哦

✔报名时间:2024年1月18号一1月24号 ✔报名确认和缴费:2024年1月 31号一2月4号 ✔准考证打印:2024年3月12号一3月17号 ✔笔试时间:2024年3月16日-2024年3月17日。 ✔面试时间:面试时间拟安排在2024年5月中旬 报名网址&…

ChatGPT学python: 用json文件传参

目录 json语法最简陋版python解析语法小结 json语法最简陋版 param.json [{"Table_name": "table1","Event_name_colum": 4,"update_colum": 9},{"Table_name": "table2","Event_name_colum": 3,&quo…

快速掌握,制作可发送上课通知小程序的秘籍

对于教育培训机构来说,及时通知学生上课时间、地点等重要信息是至关重要的。而现在,通过小程序,我们可以更加便捷地实现这一目标。下面将为你介绍如何制作一个可发送上课通知的小程序。 首先,通过百度搜索“乔拓云”,并…

NFS 网络文件系统

1. NFS简介 NFS(Network File System 网络文件系统),是一种用于在计算机网络上共享文件的协议。它允许一个计算机系统通过网络将其文件和存储设备共享给其他计算机系统,使得这些系统可以像访问本地文件一样访问网络共享的文件。 N…

excel中提取一串数字中的某几个数字

excel中提取一串数字中的某几个数字 提取一串数字中的某几个数字,使用公式函数截取数据 LEFT函数:用于截取单元格左边的字符,例如“LEFT(A1,5)”会返回A1单元格中的前5个字符。RIGHT函数:用于截取单元格右边的字符,例…

如何設置動態住宅IP代理管理工具SwitchySharp插件

動態住宅IP代理管理工具SwitchySharp擴展程式專為Chrome設計,可讓用戶更輕鬆地管理代理設置,並以其簡單性和靈活性著稱。本文我們將討論SwitchySharp插件的功能、優點、如何設置。 Proxy SwitchySharp插件具體有什麼用? 此工具是專為Chrome設…

汽车软件开发模式的5个特点

汽车软件开发属于较为复杂的系统工程,经常让来自不同知识背景的工程师在观点交锋时出现分歧。在解决复杂性和对齐讨论基准时,可以通过勾勒出讨论对象最关键的几个特征来树立典型概念。本文旨在通过5个典型特点的抽取,来勾勒出汽车软件开发模式…

Flask 入门2:路由

1. 前言 在上一节中&#xff0c;我们使用到了静态路由&#xff0c;即一个路由规则对应一个 URL。而在实际应用中&#xff0c;更多使用的则是动态路由&#xff0c;它的 URL是可变的。 2. 定义一个很常见的路由地址 app.route(/user/<username>) def user(username):ret…

STM32 IIC电量计LTC2944

1 描述 LTC2944 可在便携式产品应用中测量电池充电状态、电池电压、电池电流及其自身温度。宽输入电压范围允许使用高达 60V 的多节电池。精密库仑反向积分电流通过电池正极端子与负载或充电器之间的检测电阻器。 电压、电流和温度由内部 14 位无延迟 ΔΣ™ ADC 测量。测量结…

GBASE南大通用数据库对与例程相关联的对象的权限

数据库服务器检查是否存在任何被引用的对象&#xff0c;并验证调用该例程的用户是否拥有访问被引用的对象的必要权限。 由例程引用的对象可包括&#xff1a; • 表和列 • 序列对象 • 用户定义的数据类型 • 由该例程执行的其他例程 当例程运行时&#xff0c;定义有效的权…

第六篇:express路由拆分(模块化)

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! ​ 目录 &#x1f4d8; 引言&#xff1a; &#x…

elasticsearch的基本使用

使用postman进行测试 如下图所示&#xff1a; 需要进行验证&#xff0c;请选择Authorization中的basic auth,填写账号以及密码。 添加ik中文分词 安装 IK 分词器插件&#xff1a; 下载 IK 分词器插件&#xff0c;可以从 GitHub 上的 elasticsearch-analysis-ik 页面下载最好…

学习使用vite+vue3的所遇问题总结

组件中使用<script>标签忘记加 setup 这会导致Navbar 没有暴露出来&#xff0c;导致使用不了&#xff0c;出现以下报错 这是因为&#xff0c;如果不用setup&#xff0c;就得使用 export default …… setup 是后者的语法糖 在Vue.js中&#xff0c;你可以通过route对象…

Python学习--一个逻辑推理的猜数字的游戏

修订Pico Fermi Bagels猜数字游戏代码&#xff0c;仅用于学习Python。 运行界面如下&#xff1a; 修订的代码如下&#xff1a; # // # 提升逻辑思维猜数字小游戏 # BY&#xff1a;Al Sweigart alinventwithpython.com # 翻译&#xff1a;诚外无物 # 说明&#xff1a;一个逻辑…

微信小程序之下拉刷新事件、上拉触底事件和案例

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

Android systemui 编译

目录 简介&#xff1a; 一、步骤 二、下载源码 三、环境配置 四、确定好需要编译版本 五、编译SystemUI 步骤1&#xff1a;进入源代码目录 步骤2&#xff1a;初始化编译环境 步骤3&#xff1a;选择目标设备 步骤4&#xff1a;编译SystemUI 步骤5&#xff1a;查找生成…

kubeadm安装K8S_v1.28.x容器使用docker

一&#xff0e;环境部署 1.1 基础环境配置&#xff08;只有1台服务器&#xff0c;作为masrer&#xff0c;也作为node使用&#xff09; [rootecs-cf5e ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootecs-cf5e ~]# uname -a Linux ecs-cf5e 3.10.0-11…

全志R128基础组件开发——显示与屏幕驱动①

RTOS 提供了一套完整的屏幕驱动&#xff0c;支持 RGB, i8080, SPI, DBI 格式的屏幕。 &#xff08;1&#xff09;RGB 接口 RGB接口在全志平台又称HV接口&#xff08;Horizontal同步和Vertical同步&#xff09;。有些LCD屏支持高级的功能比如 gamma&#xff0c;像素格式的设置…

【哈希】哈希表|除留取余法|哈希冲突(拉链法interv)|一致性哈希|虚拟节点

哈希 hash 散列函数&#xff08;将非常大范围的输入&#xff0c;通过一定的函数&#xff0c;可以转换到小规模的输出&#xff09; 什么是哈希&#xff1f; 广义上是一种思想&#xff0c;不是一个特定的东西&#xff0c;只要算法设计中使用到了哈希思想&#xff0c;就可以叫…

怎样选择多线程多进程和多协程?

有这么多可以实现并发的方式方法,那么,我们怎么确定在合适的时机采用合适的实现方法呢?这就需要我们对各个实现并发的方式方法有一个全面的概念性的理解,以及他们的内在执行逻辑优缺点有一个清晰的认识! 如下图所示,首先我们需要对单进程、多进程、多线程及多协程之间有…