selinux 基础知识

目录

概念

作用

SELinux与传统的权限区别

SELinux工作原理

名词解释

主体(Subject)

目标(Object)

策略(Policy)

安全上下文(Security Context)

文件安全上下文查看

先启用selinux

命令

分析

SELinux的启动、关闭于查看

三种配置模式

原理图:

模式管理

查看当前模式

临时开启/关闭

永久关闭

注意

SElinux的状态

命令

SELinux配置文件

修改安全上下文

chcon命令

作用

格式

示例

restorecon命令

作用

格式

semanage命令

作用

安装

格式

常用命令组

布尔值的查询于修改

实验

实验1

实验2

实验3

概念

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

  • 例如,电脑上下载了一个美图软件,当你使用的时候,你却不知道,它在后台默默监听这浏览器中输入密码信息

作用

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

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

SELinux与传统的权限区别

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

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

SELinux工作原理

名词解释

主体(Subject)
  • 主题就是访问文件或目录资源得==进程==

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

  • 自主访问控制系统中(Linux默认权限中),靠权限控制得主题使用户

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

目标(Object)
  • 目标就是需要访问得文件或目录资源

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

  • 2个默认策略

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

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

安全上下文(Security Context)
  • 所有进程、文件和目录都有自己的安全上下文

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

  • 关系图:

    img

  • 解释

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

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

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

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

文件安全上下文查看

先启用selinux
  • 安装

    # 安装所需软件
    [root@server ~]# dnf install selinux-policy selinux-policy-targeted -y
    [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

命令
  • 命令

    [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

分析
  • 重点为:system_u:object_r:admin_home_t:s0

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

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

    • root:安全上下文的身份时root,默认会映射为unconfined_u

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

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

    • seinfo命令

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

      • [root@server ~]# dnf install setools-console -y
      • 格式:seinfo -参数

      • 参数

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

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

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

    • system_r:进程r代表role

  • 类型

    • [root@server ~]# seinfo -t | more    # 4991个类型
    • 最重要,进程是否可以访问文件,主要就是看进程的安全上下文类型字段是否和文件的安全上下文类型字段相匹配

    • 在默认的targeted策略中

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

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

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

  • 灵敏度:用 s0、s1、s2 来命名,数字为灵敏度分级,数值越大,灵敏度越高

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

    [root@server ~]# dnf 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

SELinux的启动、关闭于查看

三种配置模式

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

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

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

原理图:

  • img

模式管理

查看当前模式
  • getenforce

    [root@server ~]# getenforce
临时开启/关闭
  • 临时

    [root@server ~]# setenforce 0 # 临时关闭selinux,转为宽容模式,重启系统失败
    [root@server ~]# getenforce
    permissive
    [root@server ~]# setenforce 1 # 临时开启selinux,转为强制模式,重启失败
    [root@server ~]# getenforce
    Enforcing

永久关闭
  • 配置文件修改

注意
  • enforcing于permissive之间切换时,需要重启系统

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

SElinux的状态

命令
  • 查看

    [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

SELinux配置文件

  • /etc/selinux/config

    [root@server ~]# vim /etc/selinux/config
    SELINUX=enforcing         # 设置模式
    ​
    SELINUXTYPE=targeted      # 设置策略类型
    ​
    # 注意:/etc/sysconfig/selinux文件与上述配置问价内容相同,选择一个配置即可

修改安全上下文

chcon命令

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

格式
  • 参数

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

restorecon命令

作用
  • 让文件的SELinux类型恢复为默认的selinux类型

  • 默认的selinux类型于semanage命令有关,其参考semanage命令所查询的默认seliunx类型

格式
  • 参数

    restorecon  [-Rv]  文件或目录
    -R:连同子目录一起修改;
    -v:将过程显示到屏幕上
  • 例:街上例,将test恢复默认类型

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

semanage命令

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

安装
  • dnf 安装

    [root@server ~]# dnf install policycoreutils-python-utils -y
格式
  • 参数

    semanage   选项    参数   文件-l :查询;-a :添加-m :修改-d :删除-D :全部删除-t :类型-r :角色-s :用户-f :文件
  • 选项:login|user|port|interface|==fcontext==|translation|boolean ,注意:fcontext查询默认安全上下文(重要)

常用命令组
  • 查询文件的默认安全上下文

    [root@server ~]# semanage fcontext -l | grep # 文件名
    [root@server ~]# semanage fcontext -l | grep e/tc/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 gttp
    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
布尔值的查询于修改
  • 作用:布尔值可以作为文件规则的开关来控制权限的给予,放行,阻塞

  • 常用命令

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

实验

实验1
  • 使用nginx服务演示安全上下文值得设定

  • 服务端操作

    # 恢复快照
    ​
    
    # 开启selinux
    [root@server ~]# vim /etc/selinux/config
    SELINUX=enforcing
    ​
    [root@server ~]# reboot
    [root@server ~]# getenforce
    Enforcing
    [root@server ~]# dnf install nginx -y
    [root@server ~]# mkdir /www/zy
    [root@server ~]# vim /etc/nginx/nginx.confroot /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
    ​
    [root@server ~]# systemctl restart nginx
    # 测试
实验2
  • 使用nginx服务的端口号修改演示selinux的设定

    # 基于上例
    ​
    # 检查selinux的状态
    [root@server ~]# getenforce
    Enforcing
    ​
    [root@server ~]# vim /etc/nginx/nginx.confserver {listen 7777;}
    # 重启失败
    [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 prot -a -t http_port_t -t tcp 7777
    [root@server ~]# systemctl restart nginx
    # 测试
实验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.mzph.cn/news/830925.shtml

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

相关文章

如何解决网络应用运行中的审核问题【系列研究预告】

目前互联网是非常发达的,但是随着技术的发展,有些问题逐渐变得严重。对于一般企业而言,一个比较重要的问题就是审核准确性和成本问题。 比如知乎的审判官,我本人是最早的一批审判官,然而多年下来的经历却很让人感到无…

数据结构—C语言实现双向链表

目录 1.双向带头循环链表 2.自定义头文件: 3.List.cpp 文件 3.1 newnode()函数讲解 3.2 init() 函数 初始化 3.3 pushback()函数 尾插 3.4 pushfront()函数 头插 3.5 popback() 尾删 3.6 popfront() 函数 头删 3.7 insert()函数 在pos之后插入 3.8 popbac…

uniapp 对接 Apple 登录

由于苹果要求App使用第三方登录必须要求接入Apple登录 不然审核不过 所以: 一、勾选苹果登录 二、 设置AppId Sign In Apple 设置完成重新生成描述文件 !!!!证书没关系 示例代码: async appleLogin…

Delta lake with Java--将数据保存到Minio

今天看了之前发的文章,居然有1条评论,看到我写的东西还是有点用。 今天要解决的问题是如何将 Delta产生的数据保存到Minio里面。 1、安装Minio,去官网下载最新版本的Minio,进入下载目录,运行如下命令,曾经…

Co-assistant Networks for Label Correction论文速读

文章目录 Co-assistant Networks for Label Correction摘要方法Noise DetectorNoise Cleaner损失函数 实验结果 Co-assistant Networks for Label Correction 摘要 问题描述: 描述医学图像数据集中存在损坏标签的问题。强调损坏标签对深度神经网络性能的影响。 提…

SpringBoot指标监控

一.SpringBoot指标监控_添加Actuator功能 Spring Boot Actuator可以帮助程序员监控和管理SpringBoot应用,比如健康检查、内存使用情况统计、线程使用情况统计等。我 们在SpringBoot项目中添加Actuator功能,即可使用Actuator监控 项目,用法如…

使用YALMIP定义LMI,SEDUMI求解矩阵方程

YALMIP(Yet Another MATLAB Package for Modeling and Optimization)是一个MATLAB工具箱,用于定义和求解优化问题,包括线性矩阵不等式(LMI)问题。SEDUMI是一个用于求解LMI问题的求解器,它可以与…

Vitis HLS 学习笔记--S_AXILITE 寄存器及驱动

目录 1. 简介 2. S_AXILITE Registers 寄存器详解 2.1 “隐式”优势 2.2 驱动程序文件 2.3 硬件头文件 2.4 硬件头文件中 SC/COR/TOW/COH 的解释 2.5 驱动控制过程 3. 总结 1. 简介 回顾此博文《Vitis HLS 学习笔记--Syn Report解读(1)-CSDN博…

瘦身秘籍:如何使用 PyInstaller 打造超小型 Python 可执行文件

你是否曾经尝试过将你的 Python 程序打包成一个可执行文件,却发现生成的文件大得惊人?别担心,本文将教你如何使用 PyInstaller 尽可能减小生成的 onefile 大小,让你的程序轻盈如风! 1. 使用虚拟环境 首先&#xff0c…

Python 与 TensorFlow2 生成式 AI(二)

原文:zh.annas-archive.org/md5/d06d282ea0d9c23c57f0ce31225acf76 译者:飞龙 协议:CC BY-NC-SA 4.0 第四章:教授网络生成数字 在前一章中,我们涵盖了神经网络模型的构建基块。在这一章中,我们的第一个项目…

电商技术揭秘四十一:电商平台的营销系统浅析

相关系列文章 电商技术揭秘相关系列文章合集(1) 电商技术揭秘相关系列文章合集(2) 电商技术揭秘相关系列文章合集(3) 文章目录 引言一、用户画像与精准营销用户画像与精准营销的概念用户画像在精准营销中…

正则表达式.java

目录 1.1 正则表达式的概念及演示 正则表达式的作用: 1.2 正则表达式-字符类 1.3 正则表达式-逻辑运算符 1.4 正则表达式-预定义字符 1.5 正则表达式-数量词 1.6 正则表达式练习1 1.7 正则表达式练习2 小结 : ①可以校验字符串是否满足一定的规…

免费通配符证书的申请指南——从申请到启动https

如果您的网站拥有众多二级子域名,那么通配符证书证书是最好的选择。 免费通配符申请流程如下: 1 创建证书服务商账号 首先选择一个提供免费通配符的服务商,打开国产服务商JoySSL官网,创建一个账号(注册账号时填写注册…

Android创建快捷方式到桌面

效果图 参考 https://blog.51cto.com/u_16175498/8811197https://blog.51cto.com/u_16175498/8811197 权限 <uses-permission android:name"com.android.launcher.permission.INSTALL_SHORTCUT" /> 实现 if (Build.VERSION.SDK_INT > Build.VERSION_C…

GPG的使用

这里写自定义目录标题 安装加密程序生成加密密钥怎么备份自己的密钥就可以使用公钥加密邮件信息了 安装加密程序 下载gpg4win&#xff1a; https://www.gpg4win.org/index.html 免费的&#xff0c;如果使用的是苹果电脑&#xff0c;使用https://gpgtools.org/。 如果是linux&a…

Python 与 TensorFlow2 生成式 AI(四)

原文&#xff1a;zh.annas-archive.org/md5/d06d282ea0d9c23c57f0ce31225acf76 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第九章&#xff1a;文本生成方法的崛起 在前几章中&#xff0c;我们讨论了不同的方法和技术来开发和训练生成模型。特别是在第六章“使用 …

vue3 依赖-组件tablepage-vue3 项目公共配置封装

github求⭐ 可通过github 地址和npm 地址查看全部内容 vue3 依赖-组件tablepage-vue3说明文档&#xff0c;列表页快速开发&#xff0c;使用思路及范例-汇总 vue3 依赖-组件tablepage-vue3说明文档&#xff0c;列表页快速开发&#xff0c;使用思路及范例&#xff08;Ⅰ&#…

【C++】匿名对象超详细详解(什么是匿名对象?对象可以是哪些类型呢?)

目录 一、前言 二、匿名对象的概念详解 &#x1f95d; 语法结构 &#x1f34d;概念理解 三、匿名对象的对象类型 四、匿名对象的使用 &#x1f347;简单场景的使用 &#x1f349;复杂场景的使用 五、总结 六、共勉 一、前言 在C中&#xff0c;匿名对象&#xff08;Ano…

一文解决ArcGIS生成点和管段 含案例讲解

背景 在工作中&#xff0c;我们经常遇到要将坐标数据导入 GIS&#xff0c;生成点位&#xff0c;若是地理坐标系&#xff08;经纬度&#xff09;&#xff0c;那么直接用 arcgis或者QGIS 导入数据就行了&#xff0c;可实际中总会遇到各种问题&#xff1a; 坐标数据集为大地 200…

如何使用Go语言进行基准测试(benchmark)?

文章目录 一、基准测试的基本概念二、编写基准测试函数三、运行基准测试四、优化代码性能五、注意事项总结 在Go语言中&#xff0c;基准测试&#xff08;benchmark&#xff09;是一种评估代码性能的有效方式。通过基准测试&#xff0c;我们可以测量代码执行的时间、内存使用情况…