首页 > 系统相关 >SELinux初探

SELinux初探

时间:2022-12-20 09:01:12浏览次数:36  
标签:文件 SELinux study 初探 类型 上下文 root

SELinux初探

自己总结出来的SELinux部分,仅供参考。

SELinux是一个内核模块。

SELinux的运行模式

  • 主体:SELinux主要管理的就是进程,你可以将【主体】跟进程划上等号。
  • 目标:主体进程能否读写的【目标资源】一般就是文件系统。
  • 策略:由于进程与文件数量庞大,因此SELinux会依据某些服务来制定基本的读写安全性策略,这些策略内还会有详细的规则来指定不同的服务是否开放某些资源的读写。目前流行的是三个策略:
    1. targeted:针对网络服务限制较多,针对本机限制较少。是默认的策略。
    2. minimum:由target自定义而来,仅针对选择的进程来保护。
    3. mls,完整的SELinux限制,限制方面较为严格。
  • 使用默认的即可

主体与目标的安全上下文必须一致才能够顺利读写。这个安全上下文有点类似于文件系统的rwx。

顺序:主体程序 -> SELinux(分析策略规则) -> 安全上下文比对 -> 目标数据存取(但能否存取,最终要参考rwx的权限设置)

安全上下文是放在inode内的。

SELinux中三个字段的意义

  • 身份识别

    • unconfined_u:不受限的用户,也就是说,文件来自于不受限的进程。
    • system_u:系统用户,大部分就是系统自己产生的文件。
  • 角色
    通过角色字段,我们可以知道这个数据属于进程文件资源还是代表用户,一般的角色有:

    • object_r:代表的文件或目录等资源,这应该是最常见的。
    • system_r:代表的就是进程,不过,一般用户也会被指定为system_r。

    你也会发现角色的字段最后面使用的是【_r】来结尾,因为是role的意思。

  • 类型【最重要】

    在默认的targeted策略中,前两个基本是不重要的,重要的是这个类型字段。基本上,能不能读取得到就是与这个字段有关了。

    而类型字段在文件与进程方面的定义又不太相同,分别是:

    • type:在文件资源(Object)上面称为类型(Type)。
    • domain:在主体进程(Subject)则称为域(Domain)。

执行的大致顺序

  1. 首先,我们触发一个可执行的文件目标,即具有 cron_exec_t 的这个类型的 /usr/sbin/crond 文件。
  2. 该文件的类型会让这个文件所产生的主体程序(运行在内存中的程序)具有crond这个(Domain),我们的策略针对这个域已经制定了许多规则其中包括这个域可以读取的目标资源类型
  3. 由于crond domain被设置为可读取 system_cron_spool_t 这个类型的目标文件(Object),因此你的配置文件放到 /etc/cron.d/ 目录下,就能够被 crond 那个进程所读取了。
  4. 但最终能不能读取,还要看rwx的具体设置。

SELinux_3种模式的启动、关闭与查看

  • Enforcing:强制模式,代表SELinux运行中,而且已经正确开始限制domain/type。
  • Permissive:宽容模式,代表SELinux运行中,不过仅会提醒而不会阻止。适合用于debug时使用。
  • Disabled:关闭模式,SELinux并没有实际运行。

查看现在的模式
getenforce:就显示出目前的模式为何。


sestatus [-vb]

-v: 检查列于/etc/sestatus.conf内的文件与进程的安全上下文内容。

-b: 将目前策略的规则布尔值列出,亦即某些规则是否要启动之意。

或许可以这样修改

vim /etc/selinux/config里面可以修改策略和目前的启动状态。

如何临时切换状态


setenforce [0|1]

0: 转成Permissive模式

1: 转成Enforcing模式

Enforcing与Disabled的互相转换是需要重启和大量的时间的,但是Enforcing和Permissive就不需要。

SELinux策略内的规则管理

查看SELinux各个规则的布尔值

getsebool [-a] [规则的名称]

-a: 列出目前系统上所有SELinux规则的布尔值状态

例子:[root@study ~]# getsebool -a:查询本系统内所有SELinux规则的布尔值状态。

需要安装setools-console

yum install setools-console


seinfo [-Atrub]

-A: 列出SELinux的状态、规则布尔值、身份识别、角色、类型等所有信息。

-u: 列出SELinux的所有身份识别种类

-r: 列出SELinux的所有角色种类

-t: 列出SELinux的所有类型种类

-b: 列出所有规则的种类(布尔值)

如果你想查询目前所有的身份识别与角色,使用 seinfo -useinfo -r 就知道了。

至于简单的统计数据,直接输入seinfo即可。


sesearch [-A] [-s 主体类型(主题类型就是进程的意思)] [-t 目标类型] [-b 布尔值]

-A: 列出后面数据中,允许【读取或放行】的相关信息

-s: 进程

-t: 后面要接类型,例如 -t httpd_t

-b: 后面还要接SELinux的规则,例如 -b httpd_enable_ftp_server

修改SELinux规则的布尔值

setsebool [-P] [规则名称] [0|1]

-P: 直接将设置的值写入配置文件,该设置信息未来会生效的。

例子

[root@study ~]# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> off
[root@study ~]# setsebool -P httpd_enable_homedirs 1
[root@study ~]# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> on

一定要记的,setsebool要加上-P选项,因这样才能将此设置写入设置文件,这是非常棒的工具。

你一定要知道如何使用getseboolsetsebool才行。

SELinux安全上下文的修改

开始对比SELinux的类型

使用chcon手动修改文件的SELinux属性


chcon [-R] [-t type] [-u user] [-r role] [文件名称]

-R: 连同该目录下的子目录也同时修改

-t: 后面链接安全上下文的类型栏目,例如 httpd_sys_content_t

-u: 后面接身份识别,例如system_u(不重要)

-r: 后面接角色,例如system_r(不重要)

-v: 若有变化成功,请将变动结果列出来

--reference=范例文件:拿某个文件当范例来修改后续接的文件的类型

例子

[root@study ~]# chcon -v -t net_conf_t /etc/cron.d/checktime
changing security context of '/etc/cron.d/checktime'
[root@study ~]# chcon -v --reference=/etc/shadow /etc/cron.d/checktime

restorecon [-Rv] [文件或目录]

-R:连同子目录一起修改

-v:将过程显示到目录

[root@study ~]# restorecon -Rv /etc/cron.d

restorecon可以自动的恢复默认的SELinux类型。

semanage默认目录的安全上下文查询与修改

为什么restorecon可以【恢复】原本的SELinux类型呢,肯定是有一个地方在记录每一个文件、目录的SELinux类型

  1. 如何查询默认的SELinux的类型
  2. 如何增加 修改 删除默认的SELinux类型呢

很简单,通过semanage即可。

[root@study ~]# semanage {login|user|port|interface|fcontext|translation} -l
[root@study ~]# semanage fcontext -{a|d|m} [-frst] file_spec
fcontext:	主要用于安全上下文方面的用途,-l为查询的意思
-a:增加的意思,你可以添加一些目录的默认安全上下文类型设置
-m:修改的意思
-d:删除的意思
[root@study ~]# semanage fcontext -a -t system_cron_spool_t "/srv/mycron(/.*)?"
[root@study ~]# restorecon -Rv /srv/mycron

其他

其他类似于修改端口的条件,也可以用semanage来修改。

[root@study ~]# semanage port -a -t ftp_port_t -p tcp 555

标签:文件,SELinux,study,初探,类型,上下文,root
From: https://www.cnblogs.com/qiantaosama/p/16993519.html

相关文章

  • 数论笔记【2】素数分布初探
    基于欧几里得的证明定义2.1定义函数\(\pi(x)\)为小于等于\(x\)的素数的个数,即\[\pi(x)=\left|\{p|p\lex,p\in\mathbb{P}\}\right|\]这个函数可以反映素数的分......
  • 初探oceanbase和newsql数据库
    为什么是分布式数据库?互联网时代,数据已经成为企业运营的命脉。作为聚合支付的领军企业之一,李俶2021年受理交易金额3500亿,覆盖全国600+城市,服务110万+线下商户,日交易量2300......
  • 初探富文本之编辑器引擎
    初探富文本之编辑器引擎在前文中我们介绍了富文本的基础概念,以及富文本的基本发展历程,那么在本文中将会介绍当前主流开源的富文本编辑器引擎。当前使用最广泛的富文本编辑......
  • 百度map 3.0初探
    1.简介    在使用百度地图SDK为您提供的各种LBS能力之前,您需要获取百度地图移动版的开发密钥,该密钥与您的百度账户相关联。因此,您必须先有百度帐户,才能获得开发密钥。并......
  • 离线语音识别与语音转写初探
    这里写自定义目录标题​​语音离线SDK​​​​科大讯飞​​​​测试结果​​​​百度云​​​​录音环境要求​​​​吵杂的环境​​​​阿里云​​​​腾讯云​​​​有道......
  • Spring Cloud Gateway初探
    Zuul和Gateway的恩怨情仇1.1背景Zuul是Netflix开源的一个项目,Spring只是将Zuul集成在了SpringCloud中。而SpringCloudGateway是SpringCloud的一个子项目。还有一个版本......
  • 【JUC】并发编程初探
    目录1、Java——天生的多线程1.1main:主线程1.2ReferenceHandle1.3Finalizer1.4SignalDispatcher1.5AttachListenner1.6MonitorCtrl-Break1.7线程1.7.1查看线程......
  • 数据化运营初探
    最近在研读《数据化运营系统方法与实践案例》,特在此做信息记录。先明确这次分析到底需要达成什么目的,在了解业务的基础上,明确应该从什么角度去切入,应该从哪些指标......
  • 如何关闭selinux权限
    前言有时为了测试方便和其他目的需要关闭掉selinux权限,但是这样做是非常危险的一件事,google也是不推荐这样做的,本文章是使用Android10,来做的测试。实现部分代码路径:syste......
  • 初探极限符号表示形式之优劣
    对于数列极限定义1,其中我们着重来看$\lim_{n\rightarrow\infty}\mspace{2mu}a_{n}=a$,这是大多数教材通常采用的对极限现象的符号代表形式,为了进一步了解极限的性质及......