selinux 基础知识

news2024/11/18 1:45:13

目录

概念

作用

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.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
    ​
    [root@server ~]# systemctl restart nginx
    # 测试
实验2
  • 使用nginx服务的端口号修改演示selinux的设定

    # 基于上例
    ​
    # 检查selinux的状态
    [root@server ~]# getenforce
    Enforcing
    ​
    [root@server ~]# vim /etc/nginx/nginx.conf
            server {
                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.coloradmin.cn/o/1637427.html

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

相关文章

【数据结构】二叉树(带图详解)

文章目录 1.树的概念1.2 树的结构孩子表示法孩子兄弟表示法 1.3 相关概念 2.二叉树的概念及结构2.1 二叉树的概念2.2 数据结构中的二叉树-五种形态2.3 特殊的二叉树2.4 二叉树的存储结构顺序存储链式存储 2.5 二叉树的性质 3. 堆3.1 堆的定义3.2 堆的实现堆的结构堆的插入向上调…

Android binder死亡通知机制

在Andorid 的binder系统中,当Bn端由于种种原因死亡时,需要通知Bp端,Bp端感知Bn端死亡后,做相应的处理。 使用 Bp需要先注册一个死亡通知,当Bn端死亡时,回调到Bp端。 1,java代码注册死亡通知 …

Springboot+Vue+小程序+基于微信小程序护农远程看护系统

开发平台为idea,maven管理工具,Mybatis操作数据库,根据市场数字化需要为农户打造小程序可远程查看农场的种植情况。项目是调试,讲解服务均可有偿获取,需要可在最下方QQ二维码处联系我。 SpringbootVue小程序&#xff…

Android --- 消息机制与异步任务

在Android中,只有在UIThread(主线程)中才能直接更新界面, 在Android中,长时间的工作联网都需要在workThread(分线程)中执行 在分线程中获取服务器数据后,需要立即到主线程中去更新UI来显示数据, 所以,如…

50. 【Android教程】xml 数据解析

xml 是一种标记扩展语言(Extension Mark-up Language),学到这里大家对 xml 语言一定不陌生,但是它在 Android 中的运用其实只是冰山一角。抛开 Android,XML 也被广泛运用于各种数据结构中。在运用 xml 编写 Android 布…

Docker创建镜像之--------------基于Dockerfile创建

目录 一、在编写 Dockerfile 时,有严格的格式需要遵循 二、Dockerfile 操作常用的指令 2.1ENTRYPOINT和CMD共存的情形 2.2ENTRYPOINT和CMD的区别 2.3ADD 与COPY的区别 三、Dockerfile案例 3.1构建apache镜像 3.1.1 创建镜像目录方便管理 3.1.2创建编写dock…

基于Springboot的音乐翻唱与分享平台

基于SpringbootVue的音乐翻唱与分享平台设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 音乐资讯 音乐翻唱 在线听歌 后台登录 后台首页 用户管理 音乐资讯管理…

基础安全:CSRF攻击原理与防范

CSRF的概念 CSRF(Cross-Site Request Forgery)中文名为“跨站请求伪造”。这是一种常见的网络攻击手段,攻击者通过构造恶意请求,诱骗已登录的合法用户在不知情的情况下执行非本意的操作。这种攻击方式利用了Web应用程序中用户身份验证的漏洞,即浏览器在用户完成登录后会自…

JavaEE 初阶篇-深入了解网络原理中传输层的端口号与 UDP 协议报文格式

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 端口号概述 1.1 端口号的作用 1.2 端口号不能重复被多个进程绑定 2.0 传输层协议 - UDP 2.1 UDP 的特性 2.2 UDP 的报文格式 1.0 端口号概述 端口号是计算机网络中…

进一步了解android studio 里 AGP,gradle等关系

目录 (1) gradle是什么 (2) 工程的jdk版本,及引用包的编译版本的关系 实践 问题与解决 编译成功与运行成功 编译成功 运行成功 (1) gradle是什么 Gradle是一个构建工具,它是…

1.6 Java全栈开发前端+后端(全栈工程师进阶之路)-前置课程Jdbc编程,使用Java通过Jdbc对数据库进行基础操作

原理图 用java代码实现连接数据库(mysql)的操作 因为数据库连接需要使用到API和URL,下面简单介绍下API和URL的概念, API: Application Programming Interface应用程序编程接口,就是一套类库 Java中的AP…

2024中国绿电制氢技术趋势分析报告

来源:ATC & 大东时代 国家级规划《氢能产业发展中长期规划(2021-2035)》出台 • 主要宗旨:明确“能源”的角色定位以及在绿色低碳转型中的作用,为产业发展构建清晰的蓝图。 • 阶段目标设立: • 2025/…

如何不使用代理服务从hugging face上下载大模型?

前言:中国大陆的朋友会发现hugging face经常无法访问了,特别是在服务器上下载大型模型/数据集,如果先在电脑上下载完再传输到服务器上,对于大模型来说会非常麻烦,这篇博客一共提供了三种有效的方法不使用代理服务从hug…

【Java】何为JShell?——有趣的Java学习小工具

前言:上一篇中我们已经看到了如何编译和运行一个Java程序。Java1.9(即Java9)中引入了另一种使用Java的方式。JShell(Java Shell)程序提供了一个“读取-计算-打印循环”(Read-Evaluate-Print Loop,REPL)。当你键入一个J…

【综述】多核处理器芯片

文章目录 前言 Infineon处理器 AURIX™系列 TC399XX-256F300S 典型应用 开发工具 参考资料 前言 见《【综述】DSP处理器芯片》 Infineon处理器 AURIX™系列,基于TriCore内核,用于汽车和工业领域。 XMC™系列,基于ARM Cortex-M内核&…

基于 Evan_song1234 开发,MoonSpaceCat 增补的2D 我的世界,增加双缓冲实现 cmd控制台窗口或 Powershell 流畅运行

游戏玩法: awsd移动 1234567890 各有功能 t 是命令行 q 是刷新 e 是重开 z 是挖 其他还没来及探索代码 代码来源 C我的世界2D控制台版_cminecraft-CSDN博客 其中解决颜色被双缓冲刷新没的方法 参考于自己的博客 用ReadConsoleOutput 解决双缓冲ReadConsol…

短视频素材哪个App最好?短视频素材哪里有免费的?

在数字媒体的黄金时代,富有创意的视频内容已成为吸引观众的关键。高质量的视频素材不仅能增强视觉效果,还能提升整体叙述的力度。以下列出了一系列全球顶尖的视频素材提供网站,它们将为你的广告制作、社交媒体或任何视频项目提供极具影响力的…

Python制作精美表格——plottable

plottable是一个基础matplotlib的绘制精美图形表格的库。他将表格内容美化并转为一张图片 使用前提: 1、原始数据数量较少,可以一屏展示。这个库会将原始表格的所有数据都放到一个图片里,数据太多展示效果较差。 2、pandas读取时会将index列…

vue3步骤条带边框点击切换高亮

如果是div使用clip-path: polygon(0% 0%, 92% 0%, 100% 50%, 92% 100%, 0% 100%, 8% 50%);进行裁剪加边框没实现成功。目前这个使用svg完成带边框的。 形状可自行更改path 标签里的 :d“[num ! 1 ? ‘M 0 0 L 160 0 L 176 18 L 160 38 L 0 38 L 15.5 18 Z’ : ‘M 0,0 L 160,0…

飞腾D2000+X100 TYPE6全国产核心板

飞腾D2000X100 TYPE6核心板 产品概述 飞腾D2000X100 TYPE6核心板为增强型自主控制器核心板,其核心芯片CPU采用飞腾D2000/8核工业版CPU、飞腾桥片X100、双通道DDR4L插槽、PHY芯片等。 产品特点 l 基于飞腾D2000X100桥片 l 丰富的PCIE扩展资源,一路PCIE…