【Linux基础】SELinux

2024-04-02 09:08
文章标签 基础 linux selinux

本文主要是介绍【Linux基础】SELinux,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录:
一,目前系统文件权限的管理有两种:DAC(传统的) 和 MAC(SELINUX) 1
1,传统的文件权限与帐号关系:自主式存取控制, DAC(DISCRETIONARY ACCESS CONTROL, DAC) 1
2,以政策规则订定特定程序读取特定文件:委任式存取控制, MAC 1
【理解】 2
二,SELINUX 的运作模式      2
1,【重要原理】SELINUX 是透过 MAC 的方式来控管程序, 2
2,查看安全性上下文的命令 2
【重点】在预设的 TARGETED 政策中, IDENTIFY 与 ROLE 栏位基本上是不重要的! 3
三、SELINUX 的启动、关闭与查看     3
1,并非所有的 LINUX DISTRIBUTIONS 都支持 SELINUX 的 3
2,查看SELINUX的模式 3
3,查看 SELINUX 的政策 (POLICY)? 3
4,通过配置文件调整SELINUX的参数 3
5,SELINUX 的启动与关闭 4
6,查看已启动程序的TYPE设定 4
 
正文:

 

SELinux是Security Enhanced Linux的缩写,强化网络安全和权限管理
一,目前系统文件权限的管理有两种:DAC(传统的) 和 MAC(SELinux)
总结:DAC是以用户为出发点来管理权限的
      MAC是以程序为出发点来管理权限的
1,传统的文件权限与帐号关系:自主式存取控制, DAC(Discretionary Access Control, DAC)
简单理解DAC就是rwx!因此,当某个程序想要对文件进行存取时, 系统就会根据该程序的拥有者/群组,并比对文件的权限,若通过权限检查,就可以存取该文件了。
【注意】:各种权限设定对 root 是无效的。
DAC的缺点:
· root 具有最高的权限:如果不小心某个程序被它人取得, 且该程序属于 root 的权限,那么这支程序就可以在系统上进行任何资源的存取!真是要命!
·使用者可以取得程序来变更文件资源的存取权限:如果你不小心将某个目录的权限设定为 777 ,由于对任何人的权限会变成 rwx ,因此该目录就会被任何人所任意存取!
这些问题是非常严重的!尤其是当你的系统是被某些漫不经心的系统管理员所掌控时!她们甚至觉得目录权限调为 777 也没有什么了不起的危险哩...
2,以政策规则订定特定程序读取特定文件:委任式存取控制, MAC
委任式存取控制 (MAC) :他可以针对特定的程序与特定的文件资源来进行权限的控管! 也就是说,即使你是 root ,那么在使用不同的程序时,你所能取得的权限并不一定是 root ,而得要看当时该程序的设定而定。如此一来,我们针对控制的『主体』变成了『程序』而不是使用者喔! 此外,这个主体程序也不能任意使用系统文件资源,因为每个文件资源也有针对该主体程序设定可取用的权限! 如此一来,控制项目就细的多了!但整个系统程序那么多、文件那么多,一项一项控制可就没完没了! 所以 SELinux 也提供一些预设的 政策 (Policy) ,并在该政策内提供多个规则 (rule) ,让你可以选择是否启用该控制规则!
在委任式存取控制的设定下,我们的程序能够活动的空间就变小了! 举例来说, WWW 伺服器软体的达成程序为 httpd 这支程式, 而预设情况下, httpd 仅能在 /var/www/ 这个目录底下存取文件,如果 httpd 这个程序想要到其他目录去存取资料时, 除了规则设定要开放外,目标目录也得要设定成 httpd 可读取的模式 (type) 才行喔!限制非常多! 所以,即使不小心 httpd 被 cracker 取得了控制权,他也无权浏览 /etc/shadow 等重要的设定档喔!
【理解】
以前:root--->启动httpd---->httpd可以访问系统任何文件
现在:root--->启动httpd---->httpd只能访问/var/www/目录(这是MAC)规则的约束
如果httpd想要访问其他目录,那么必须满足两个条件:DAC的rwx + MAC的规则
二,SELinux 的运作模式
1,【重要原理】SELinux 是透过 MAC 的方式来控管程序,
他控制的 主体httpd), 而目标是文件(该程序欲访问的文件)程序
·主体 (Subject):SELinux 主要想要管理的就是程序, 主体= process
·目标 (Object):主体程序将访问的文件, 目标=文件
·政策 (Policy):由于程序与文件数量庞大,因此 SELinux 依据服务来制订基本的存取安全性政策。这些政策内 包含有详细的 规则 (rule) 来指定不同的服务开放某些资源的存取与否。在目前的 CentOS 5.x 里面仅有提供两个主要的政策,分别是:
【重点】
targeted:针对网路服务限制较多,针对本机限制较少, 是预设的政策
strict:完整的 SELinux 限制,限制方面较为严格。
建议:使用预设的 targeted 政策即可。
·安全性上下文 (security context):
我们刚刚谈到了主体、目标与政策面,但是主体能不能存取目标除了政策指定之外,主体与目标的 安全性文本必须一致才能够顺利存取。 这个 安全性文本 (security context) 有点 类似文件系统的 rwx !安全性文本的内容与设定是非常重要的! 如果设定错误,你的某些服务(主体程序)就无法存取文件系统(目标资源),当然就会一直出现 『权限不符』的错误讯息了!
CentOS 5.x 已经帮我们制订好非常多的规则了,这部份你 只要知道如何开启/关闭某项规则的放行与否即可。
2,查看安全性上下文的命令
# ls –Z
-rw-r--r-- root root root:object_r:user_home_t   install.log.syslo
Identify:role:type
身份识别:角色:类型
关于这三个参数的说明:
·身份识别 (Identify):
相当于帐号方面的身份识别!
root:表示 root 的帐号身份
system_u:表示系统程序方面的识别,通常就是程序;
user_u:代表的是一般使用者帐号相关的身份。
·角色 (Role):
通过角色栏,我们可以知道这个资料是属于 程序文件资料还是代表 使用者。一般的角色有:
object_r:代表的是 文件或者 目录
system_r:代表的就是 程序或者 一般使用者也会被指定成为 system_r !
【重点】在预设的 targeted 政策中, Identify 与 Role 栏位基本上是不重要的!
重要的在于这个 类型 (type) 栏位! 基本上,一个主体程序能不能读取到这个文件资源,与类型栏位有关!而类型栏位在文件与程序的定义不太相同。
·类型(type)很重要,它有两种叫法,但实为同一物!
type:在文件资源 (Object) 上面称为类型 (Type); DAC中的rwx
domain:在主体程序 (Subject) 则称为领域 (domain) 了! MAC中的权限

【重要】domain 需要与 type 搭配,则该程序才能够顺利的读取文件资源啦!
[root@master oracle]# ll -Zd /usr/sbin/httpd
-rwxr-xr-x root root system_u:object_r: httpd_exec_t /usr/sbin/httpd
【说明】:既然说type很重要,/usr/sbin/httpd的type是什么呢?就是httpd_exec_t 这 说明httpd程序对该文件有执行权限!相当于文件上的x权限!!
三、SELinux 的启动、关闭与查看
1,并非所有的 Linux distributions 都支持 SELinux 的
目前 SELinux 支持三种模式,分别如下:
·enforcing:强制模式,代表 SELinux 运作中,且已经正确的开始限制 domain/type 了;
·permissive:宽容模式:代表 SELinux 运作中,不过仅会有警告讯息并不会实际限制 domain/type 的存取。这种模式可以运来作为 SELinux 的 debug 之用;
·disabled:关闭,SELinux 并没有实际运作。
2,查看SELinux的模式
# getenforce
Enforcing   <==就显示出目前的模式为 Enforcing
3,查看 SELinux 的政策 (Policy)?
[root@master oracle]# sestatus
SELinux status: enabled    <==是否启动 SELinux
SELinuxfs mount: /selinux <==SELinux 的相关文件资料挂载点
Current mode: enforcing <==目前的模式
Mode from config file: enforcing  <==设定档指定的模式
Policy version: 21
Policy from config file: targeted  <==目前的政策为何?
4,通过配置文件调整SELinux的参数

 

[root@www ~]# vi /etc/selinux/config

 

SELINUX=enforcing     <==调整 enforcing|disabled|permissive

 

SELINUXTYPE=targeted  <==目前仅有 targeted 与 strict
5,SELinux 的启动与关闭
【重要常识】上面是预设的政策与启动的模式!你要注意的是,如果改变了政策则需要重新开机;如果由 enforcing 或 permissive 改成 disabled ,或由 disabled 改成其他两个,那也 必须要重新开机。这是因为 SELinux 是整合到核心里面去的, 你只可以在 SELinux 运作下切换成为强制 (enforcing) 或宽容 (permissive) 模式,不能够直接关闭 SELinux 的!
同时,由 SELinux 关闭 (disable) 的状态到开启的状态也需要重新开机啦!所以,如果刚刚你发现 getenforce 出现 disabled 时, 请到上述文件修改成为 enforcing 吧!
【重点】如果要启动SELinux必须满足以下两个点:
所以,如果你要启动 SELinux 的话,请将上述的 SELINUX=enforcing 设定妥当,并且指定 SELINUXTYPE=targeted 这一个设定, 并且到 /boot/grub/menu.lst 这个文件去,看看核心有无关闭 SELinux 了呢?
[root@www ~]# vi /boot/grub/menu.lst
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS ( 2.6.18-92.el5)
root (hd0,0)
kernel /vmlinuz- 2.6.18-92.el5 ro root=LABEL=/1 rhgb quiet selinux=0
initrd /initrd- 2.6.18-92.el5.img
# 如果要启动 SELinux ,则不可以出现 selinux=0 的字样在 kernel 后面!
【问题】通过上面的学习我们知道,如果将启动着的SELinux改为禁用,需要重启电脑,我们不想重启电脑又不想开启SELinux该怎么办呢?
【答案】将强制模式改为宽松模!
[root@www ~]# setenforce [0|1]
选项与参数:
0 :转成 permissive 宽容模式;
1 :转成 Enforcing 强制模式
范例一:将 SELinux 在 Enforcing 与 permissive 之间切换与查看
[root@www ~]# setenforce 0
[root@www ~]# getenforce
Permissive
[root@www ~]# setenforce 1
[root@www ~]# getenforce
Enforcing
6,查看已启动程序的type设定
[root@master oracle]# ps aux -Z
LABEL USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
system_u:system_r: init_t       root         1 0.0 0.4   2060   520 ?        Ss   May07   0:02 init [5
system_u:system_r: kernel_t      root         2 0.0 0.0      0     0 ?        S<   May07   0:00 [migra]
system_u:system_r: kernel_t      root        11 0.0 0.0      0     0 ?        S<   May07   0:00 [kacpi]
system_u:system_r: auditd_t      root      4022 0.0 0.4 12128   560 ?        S<sl May07   0:01 auditd
system_u:system_r: auditd_t      root      4024 0.0 0.4 13072   628 ?        S<sl May07   0:00 /sbin/a
system_u:system_r: restorecond_t root      4040 0.0 4.4 10284 5556 ?        Ss   May07   0:00 /usr/sb
说明:其实这些东西我们都不用管,都是SELinux内置的。只要学会在强制和宽松模式间转换就行了

这篇关于【Linux基础】SELinux的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/869562

相关文章

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

Linux安装MySQL的教程

《Linux安装MySQL的教程》:本文主要介绍Linux安装MySQL的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux安装mysql1.Mysql官网2.我的存放路径3.解压mysql文件到当前目录4.重命名一下5.创建mysql用户组和用户并修

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用