selinux简介

发布时间:2024年01月18日

Selinux使用详解

注:redhat selinux使用说明文档:使用 SELinux Red?Hat Enterprise?Linux 8 | Red Hat Customer Portal

1、说明

selinux(security enhanced linux安全性增强的linux)

由美国安全局nsa(national security agency)开发,构建与kernel之上,拥有灵活的强制性访问控制结构,主要用在提高linux的安全性,提高强健的安全保证,可以防御未知攻击,据称相当于B1级军事安全性能(信息安全评估标准)!

信息安全评估标准:4类(D,C,B,A),7个级别:D,C1,C2,B1,B2,B3,A。

?????? selinux已经整合到了linux2.6的kernel以上的版本中。

?????? 传统的linux在没有selinux保护的时候,倘若运行于之上的服务器被黑客攻陷,其服务器最高权限就可能会随之丧失,但是倘若有了selinux的保护,如今的也只有服务本身,整个服务器的最高权限依然健在。

?????? 一句话熟悉selinux的作用:增强linux系统安全性。一个例子:如果运行的apache服务器被入侵,也只是入侵到了httpd这个服务,可以把它禁锢到这里(相当于整个服务器运行了httpd,入侵了httpd而已),而系统的整个权限依然正常!

?????? 注:请注意,对selinux策略规则的检查是在DAC规则后进行的。如果dac规则已拒绝了访问,则不会使用selinux策略规则。这意味着,如果传统的DAC规则已组织了访问,则不会在selinux中记录拒绝信息。

??????

2、selinux的三种策略:(默认为targeted)

Target 策略(默认)

Target 策略主要对系统中的服务进程进程访问控制,同时,它还可以限制其他进程和用户。服务进程都被放入沙盒,在此环境中,服务进程会被严格限制,以便使通过此类进程所引发的恶意攻击不会影响到其他服务或 Linux 系统。

沙盒(sandbox)是一种环境,在此环境中的进程可以运行,但对其他进程或资源的访问会被严格控制。换句话说,位于沙盒中的各个进程,都只是运行在自己的域(进程所运行的区域被称为“域”)内,它们无法访问其他进程或资源(除非被授予特殊的权限)。

通过使用此策略,可以更加安全地共享打印服务器、文件服务器、Web 服务器或其他服务,同时降低因访问这些服务而对系统中其他资源造成不利影响的风险。

MLS 策略

MLS,是 Multi-Level Security 的缩写,该策略会对系统中的所有进程进行控制。启用 MLS 之后,用户即便执行最简单的指令(如 ls),都会报错。

Minimum 策略

Minimum 策略的意思是“最小限制”,该策略最初是针对低内存计算机或者设备(比如智能手机)而创建的。

从本质上来说,Minimun 和 Target 类似,不同之处在于,它仅使用基本的策略规则包。对于低内存设备来说,Minumun 策略允许 SELinux 在不消耗过多资源的情况下运行。

3、selinux的三种模式:

Enforcing:强制模式。代表SELinux在运行中,且已经开始限制domain/type之间的验证关系

Permissive:宽容模式。代表SELinux在运行中,不过不会限制domain/type之间的验证关系,即使验证不正确,进程仍可以对文件进行操作。不过如果验证不正确会发出警告

Disabled:关闭模式。SELinux并没有实际运行

相关命令:selinux的配置文件/etc/selinux/config

?????????????? ?查看selinux启动模式:getenforce

?????????????? ?临时修改selinux启动模式:setenforce [1|0] [enforcing|premissive]

?????????????? ?查看selinux启动的详细信息:sestatus/seinfo

4、selinux安全上下文详解:

可通过ps -eZ | grep httpd查看进程安全上下文

system_u:system_r:httpd_t:s0?????? 1435 ???????? 00:00:03 httpd

可通过ls -aZ | grep /var/www/ht ml/index.html查看文档安全上下文

unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/index.html

可通过ls -dZ | grep /var/www/html/查看目录安全上下文

system_u:object_r:httpd_sys_content_t:s0 /var/www/html

可通过id -Z username查看操作系统用户安全上下文,继承自selinux user

可通过

可见安全上下文四个属性组成:userroletype?level? 用户,角色,类型、安全等级

? ? ? ?4.1、selinux用户(user)

??????? 除了普通的linux用户之外,还有selinux用户。

selinux用户是selinux政策的一部分。

该策略被授权用于一组特定的角色和特定的mls(多级安全)范围

作为策略的一部分,每个linux用户都映射到一个selinux用户。

这允许linux用户继承selinux用户的限制和安全规则和机制

为了定义他们可以进入的角色和级别,映射的selinux用户身份在selinux上下文中用于该会话中的进程。

我们可以从命令行查看selinux和linux用户账户之间的映射列表:

semanage login -l

? ? ? ?4.2、角色(role)

??????? 角色是基于角色的访问控制(rbac)安全模型的一个属性。

该角色充当域和selinux用户之间的中介。

selinux用户获得角色授权,角色获得域授权,进程在各自独立的域中运行。

角色决定了我们可以输入哪些域,并最终确定我们可以访问哪些文件。

? ? ? ?4.3、类型(type)

??????? 类型是类型强制(TE)的一个属性。

类型定义了文件的类型,并定义了进程的域。

进程通过在各自的域中运行而彼此分离。

这种分离防止进程访问其他进程使用的文件,以及防止进程访问其他进程。

selinux策略规则定义了类型如何相互访问,无论是域访问类型,还是与访问另一个域。

? ? ? ?4.4、等级(level)

????????????? Level 是 MLS 和 MCS 的一个属性。

MLS 范围是一对级别,如果级别不同,则写为 lowlevelhighlevel,如果级别相同(s0-s0 与 s0 相同),则写为 lowlevel。

每个级别都是一个敏感类别对,类别是可选的。

如果有类别,则级别写为灵敏度:类别集。

如果没有类别,则写为敏感度。

如果类别集是连续的系列,则可以缩写。

例如,c0.c3 与 c0,c1,c2,c3 相同。

/etc/selinux/targeted/setrans.conf 文件是 SELinux 的多类别安全转换表,并将级别映射到人类可读的形式,例如 s0:c0.c1023=SystemHigh。

不要用文本编辑器编辑这个文件;使用 semanage 命令进行更改。

使用 chcon 命令更改文件的 SELinux 上下文。

使用 chcon 命令所做的更改不会在文件系统重新标记或者执行 restorecon 命令后继续存在。

使用 chcon 时,提供全部或者部分 SELinux 上下文以进行更改。

selinuxtype=targeted时,默认不开启安全等级。无需关注。

注:这四个属性的关系,boolean限制domain对type/domain的访问,进程由osuer创建,携带osuer的普通权限,开启selinux之后,osuser会映射到一个selinux user,osuser继承selinux用户的限制和安全规则和机制。selinux可以获取role的授权,而role可以获得domain的授权,进程则可以在被授权的domain中运行。而boolean规定了domain对type/domaind的访问规则。selinux的安全等级(mls和mcs)默认都不开启。

5、启用mls

5.1、安装selinux-policy-mls软件包

??????? yum install selinux-policy-mls

5.2、在启用mls策略之前,必须使用mls标签重新标记文件系统的每个文件。重新标记文件系统时,可能会拒绝访问受限域,这可能会妨碍系统正确启动。要防止这种情况发生,请在/etc/selinux/config文件中配置selinux=permissive。另外通过配置selinuxtype=mls来启用msl策略。如下:

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

#?????? enforcing - SELinux security policy is enforced.

#?????? permissive - SELinux prints warnings instead of enforcing.

#?????? disabled - No SELinux policy is loaded.

SELINUX=permissive

# SELINUXTYPE= can take one of these two values:

#?????? targeted - Targeted processes are protected,

#?????? mls - Multi Level Security protection.

SELINUXTYPE=mls

5.3、确保selinux以permissive模式运行:

setenforce 0

getenforce? ——> permissive

5.4、使用fixfiles脚本创建包含-F选项的/.autorelabel文件,以确保在下次重启时重新标记文件:

fixfiles -F onboot

5.5、重启你的系统。在下一次启动期间,将根据mls策略重新标记所有文件系统。标签进程使用适当的selinux上下文标记所有文件:

*** Warning -- SELinux mls policy relabel is required.

*** Relabeling could take a very long time, depending on file

*** system size and speed of hard drives.

***********

底部行中的每个 *(星 号)字符表示 1000 个已标记的文件。在上面的示例中,十一 * 字符代表 11000 个已标记的文件。标记所有文件所需的时间取决于系统上的文件数量以及硬盘驱动器的速度。在现代系统中,此过程只需 10 分钟。标签过程完成后,系统将自动重新引导。

5.6、在permissive模式中,selinux策略不会被强制实施,但是仍会记录在enforcing模式运行时会被拒绝的操作。在更改为enforcing模式之前,以root身份输入以下命令,已确认selinux在上一次启动期间没有拒绝操作。如果在上一次启动期间selinux没有拒绝操作,这个命令不会返回任何输出。

grep “SELinux is preventing” /var/log/messages

5.7、如果/var/log/messages文件中没有拒绝信息,或者你已解决所有现有的拒绝,请在/etc/selinux/config文件中配置selinux=enforcing:

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

#?????? enforcing - SELinux security policy is enforced.

#?????? permissive - SELinux prints warnings instead of enforcing.

#?????? disabled - No SELinux policy is loaded.

SELINUX=enforcing

# SELINUXTYPE= can take one of these two values:

#?????? targeted - Targeted processes are protected,

#?????? mls - Multi Level Security protection.

SELINUXTYPE=mls

5.8、重启系统并确保selinux以enforcing模式运行:

getenforce ———>enforcing

启用了mls策略:

sestatus | grep mls

policy from config file: mls

6、selinux受限用户

linux用户默认映射到selinux_default登录,即映射到selinux unconfiged_u用户。

但是,selinux可以通过linux用户映射到selinux用户来限制Linux用户,以利用应用于他们的安全规则和机制。

selinux政策中存在许多受限的selinux用户

以下是受限selinux用户及其关联域的列表:

·guest_u:用户的域是guest_t

·staff_u:用户的域是staff_t

·user_u:用户的域是user_t

·xguest_x:用户的域是xguest_t

仅当selinux策略允许(例如passwd)时,guest_t,xguest_t和user_t域中的linxu用户才能运行set user id(setuid)应用程序。

他们不能运行su和sudo setuid应用程序来成为root用户。

guest_t域中的linux用户没有网络访问权限,只能从终端登录

他们可以使用ssh登录,但不能使用ssh连接到另一个系统

xguest_u域中的linux用户的唯一网络访问权限是用于连接网页的firefox

xguest_t\user_t和staff_t域中的linux用户可以使用x windows系统和终端登录

默认情况下,staff_t 域中的 Linux 用户无权使用 sudo 命令执行应用程序。

默认情况下,guest_t 和 xguest_t 域中的 Linux 用户无法在其主目录或者 /tmp 中执行应用程序,从而阻止他们在具有写入权限的目录中执行应用程序。
这有助于防止有缺陷或者恶意的应用程序修改用户拥有的文件。

默认情况下,user_t 和 staff_t 域中的 Linux 用户可以在其主目录和 /tmp 中执行应用程序。

7、将linux用户映射到selinux用户

使用semanage login -a命令将linux用户映射到selinux用户。

例如,将linux用户john映射到selinux user_u用户,运行如下命令:

semanage login -a -s user_u john

其中-a选项为添加新纪录,-s选项指定selinux用户,最后一个参数newuser是我们要映射到指定selinux用户的linux用户。

用户执行应用程序的布尔值

在主目录和 /tmp 中运行应用程序时,一些布尔值可用于更改用户行为。
使用“setsebool -P [boolean] on|off”命令:

允许 guest_t 域中的 Linux 用户在其主目录和 /tmp 中执行应用程序:

# setsebool -P guest_exec_content on

允许 xguest_t 域中的 Linux 用户在其主目录和 /tmp 中执行应用程序:

# setsebool -P xguest_exec_content on

要防止 user_t 域中的 Linux 用户在其主目录和 /tmp 中执行应用程序:

# setsebool -P user_exec_content off

防止staff_t 域中的Linux 用户在其主目录和/tmp 中执行应用程序:

# setsebool -P staff_exec_content off

注:理解:传统的linux是以用户登录服务器,使用相应用户启动服务器,那么启动的这个服务,会拥有启动服务器用户所有的权限。如果以root用户启动,则被启动服务会拥有整个服务器的最高权限。而selinux安全机制是针对进程和资源的,对于每个运行的服务进程给与一定的标签属性,给与所有目录文档相应的标签属性,通过规则规定什么标签属性的进程能访问什么标签属性的资源。自此就算是用root启动的服务,也不能访问所有的资源。

selinux大致作用就是回答:<主体>是否可以针对<对象>进行<操作>?例如:一个web服务器是否可以对用户目录中的文件进行访问?

8、selinux的优点:

所有进程和文件都被标记。selinux策略规定定义了进程如何与文件交互,以及进程如何相互访问。只有存在明确允许的selinux策略规则时,才能允许访问。

精细访问控制。传统的unix通过用户的授权、基于linux的用户和组进行控制。而selinux的访问基于所有可用信息,如selinux用户、角色、类型以及可选的安全级别。

selinux策略由系统管理员进行定义,并在系统范围内强制执行。

改进了权限升级攻击的缓解方案。进程在域中运行,因此是相互分离的。selinux策略规定定义了如何处理访问文件和其他进程。如果某个进程被破坏,攻击者只能访问该进程的正常功能,而且只能访问已被配置为可以被该进程访问的文件。例如:如果apache http服务器被破坏,攻击者无法使用该及昵称读取用户主目录中的文件,除非添加或者配置了特定的selinux策略规则允许这类访问。

selinux可以用来强制实施数据机密性和完整性,同时保护进程不受不可信输入影响。

但是,selinux本身并不是防毒软件、用来替换密码、防火墙和其他安全系统、多合一的安全解决方案。selinux旨在增强现有的安全解决方案,而不是替换它们。即使运行selinux,仍需要遵循好的安全实践,如保持软件更新、使用安全的密码、使用防火墙。

9、selinux特点:

mac(mandator access control)对访问控制彻底化,对所有的文件,目录,端口的访问,都是基于策略设定的,这些策略都是由管理员设定的,一般用户无权限管理和更改。

rbac(role base access control)对用户值赋予最小权限,对于用户来说,被划分一些role,即使是root用户,你要是不在sysadm_r里,也不能实行sysadm_t的管理操作。

TE(type enforcement)对进程只赋予最小运行权限,te的概念在selinux中非常重要,其特点是对文件赋予一个叫type的标签类型,对进程赋予一个叫domain的标签,可以规定某个标签进程只能执行某类文件。例如:

我们熟悉的apache服务器,httpd进程只能在httpd_t里运行,这个httpd_t的domain能执行的操作,比如能读网页内容文件赋予http_port_t进行操作的话,apache启动都启动不了。反过来说,我们只允许80端口,只允许读取被标为httpd_sys_content_t的文件,httpd_t就不能用别的端口,也不能更改哪些被标为httpd_sys_content_t的文件(read only)。

一句话:selinux系统比起通常的linux系统来,安全性能要高的多,它通过对于用户,进程权限的最小化,即使受到了攻击,进程或者用户权限被夺取,也不会对整个系统造成重大影响。(这个进程只能执行某些标签的操作,你有了这个用户权限,也只能干这个标签的事儿)。

10、selinux工作原理:

首先有系统策略,subject去访问object的时候,也会去看系统策略。

当一个subject(如:一个应用)试图访问一个object(如:一个文件),kernel中的策略执行服务器将检查AVC(access vector cache),在AVC中,subject和object的权限被缓存(cached),如果基于AVC中的数据不能作出决定,则请求安全服务器,安全服务器在一个矩阵中查找“应用+文件”的安全环境。然后根据查询结果允许或拒绝访问,拒绝消息细节位于/var/log/messaves中。

当你的系统策略和selinux的策略都通过时,才能正常访问。

selinux是一个内置在linux内核中的linux安全模块(LSM)。内核中的selinux子系统由安全策略驱动,该策略由管理员控制并在引导时载入。系统中所有域安全性相关的、内核级别的访问操作都会被selinux截取,并在加载的安全策略上下文中检查。如果载入的策略允许操作,他将继续进行。否则,操作会被阻断,进程会受到一个错误。

11、selinux相关命令:

查看boolean含义:semanage Boolean -l

查看boolean允许哪个domain访问哪种type:sesearch -A | grep Boolean_name

切换用户的role:newrole,例:newrole -r unconfiged_r

SELinux策略规则搜索工具:sesearch

更改文件的安全上下文:chcon

恢复文件的安全上下文:restorecon

selinux策略信息工具:seinfo

selinux状态查看工具:sestatus

查看boolean值:getsebool

设置boolean值:setsebool

查看selinux开启的策略:getenforce

临时设置selinux开启的策略setenforce

文章来源:https://blog.csdn.net/zdd56789/article/details/135659087
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。