红帽SELinux资料-翻译(持续更新中。。。)

发布时间 2023-05-23 11:36:36作者: 94那抹微笑

 

 

 

 

红帽企业 Linux 7 SELinux

用户和管理员指南

 

 

翻译者:李天聪       


 

 

第一章     介绍

安全性增强型 Linux (SELinux) 提供了额外的系统安全层。SELinux从根本上回答了这个问题:“<subject>可以对<object>做<action>吗?”,例如:“一个网络用户主 可以 访问 服务器目录中的文件吗?

基于用户、组和其他权限的标准访问策略,称为“自由裁量”访问控制(DAC),它不能使系统管理员创建全面、精粒度的安全策略,例如将特定应用程序限制为仅能够查看日志文件,同时允许其他应用程序将新数据写入到日志文件。

SELinux 实现了强制访问控制 (MAC)。每个进程和系统资源都有一个称为 SELinux 上下文(context)的特殊安全标签。SELinux 上下文,有时称为 SELinux标签,是一个标识符,它抽象出系统级的细节并专注于安全性实体的属性。这不仅提供了一种一致的方式来引用SELinux 策略,但它也消除了在其他识别方法中可能存在的的任何歧义;例如,一个文件在使用绑定装载的系统上可以有多个有效的路径名。

SELinux 策略在一系列规则中使用这些上下文,这些规则定义了进程如何与彼此和各种系统资源进行交互。默认情况下,该策略不允许任何交互,除非规则显式授予访问权限。

需要注意的一点是:SELinux规则是在DAC规则之后被检查的,如果DAC规则拒绝了一个操作,就不会再使用SELinux策略规则。这意味着,如果DAC规则阻止了访问,则不会有SELinux日志产生。

       SELinux 上下文有几个字段:用户(user)、角色(role)、类型(type)和安全级别(security level)。

对于 SELinux 策略,SELinux 类型也许是最重要的。最常见的策略规则,仅使用 SELinux 类型(而不是完整的 SELinux 上下文)定义进程和系统资源之间允许的交互。

SELinux 类型通常以 _t 结尾。例如,Web服务的域为httpd_t。在 /var/www/html/ 中的文件和目录的类型通常是httpd_sys_content_t。在 /tmp 和 /var/tmp/ 中的文件和目录的类型通常是tmp_t。Web 服务端口的类型上下文是http_port_t。

例如,有一个策略规则允许 Apache(以 httpd_t 域运行的Web服务进程)去访问/var/www/html/目录和其他 Web 服务目录(在这些目录下文件的类型通常是httpd_sys_content_t)。由于策略中没有规则允许httpd_t对/tmp 和 /var/tmp/中的文件进行访问,因此这两个目录是不允许访问的。因此,由于有SELinux的存在,即使Apache遭到入侵,并且恶意脚本获得了访问权限,但它仍然无法访问 /tmp 目录。

 

图1.1 SELinux允许以httpd_t域运行的 Apache 进程访问 /var/www/html/目录,但禁止这个进程访问 /data/mysql/ 目录,因为没有httpd_t和mysqld_db_t类型上下文的允许规则)。另一方面,mysqld_t域运行的MariaDB 进程能够访问 /data/mysql/ 目录,并且 SELinux 也正确的拒绝了mysqld_t域的进程去访问标记为httpd_sys_content_t的/var/www/html/目录。

其他资源

有关详细信息,请参阅以下文档:

  • selinux(8)手册页和由 apropos selinux 命令列出的手册页。
  • 安装selinux-policy-doc package,然后用“man -k _selinux”命令查看手册。有关更多信息,请参见第 11.3.3 节 “服务手册页”。
  • SELinux 图画书(https://people.redhat.com/duffy/selinux/selinux-coloring-book_A4-Stapled.pdf)
  • SELinux Wiki FAQ

 

1.1 运行 SELINUX 的好处

SELinux 具有以下优点:

  • 所有进程和文件都已标记。

SELinux 策略规则定义进程如何与文件交互,以及进程之间如何相互作用。仅当存在专门的允许规则时,SELinux才允许访问。

  • 精细访问控制。

超越的传统UNIX那一套基于Linux用户和组ID的权限控制,SELinux 访问决策基于所有可用信息,例如 SELinux 用户、角色、类型以及(可选)安全级别。

  • SELinux 策略是管理定义的,并在系统范围内强制执行。

这句话原文是:“SELinux policy is administratively-defined and enforced system-wide”,翻译可能不准确。

  • 改进了对权限升级攻击的缓解措施。

进程在域中运行,并且因此彼此分离。SELinux 策略规则定义进程如何访问文件以及其他进程。如果进程遭到入侵,攻击者只能访问该进程的正常功能,以及此进程有权访问的文件。例如,如果Apache HTTP服务遭到入侵,则攻击者无法使用该进程读取用户主目录中的文件,除非添加或配置了特定的 SELinux 策略规则以允许此类访问。

  • SELinux可用于加强数据机密性和完整性,以及保护进程防止来自不可信的输入。

 

然而,SELinux不是:

  • 杀毒软件,
  • 密码转换、防火墙或其他安全系统,
  • 一体化安全解决方案

SELinux 旨在增强现有的安全解决方案,而不是取代它们。即使在SELinux运行的时候,依然是需要继续遵循良好的安全规范,例如持续更新软件,使用难以猜测的密码或使用防火墙。

 

1.2 例子

以下示例演示了 SELinux 如何提高安全性:

  • 默认操作为“拒绝”。

如果不存在允许访问的 SELinux 策略规则,例如一个试图打开文件的进程,访问被拒绝。

  • SELinux可以限制Linux用户。

SELinux 策略中存在许多受限的 SELinux 用户。Linux 用户可以映射到受限的 SELinux 用户以将有利于安全的规则和机制应用与他们。例如,将一个Linux 用户映射到 SELinux的user_u用户,会导致 Linux 用户无法运行(除非另有配置)设置用户ID(setuid)应用程序,例如sudo和su,以及阻止它们执行家目录中的应用程序。如果已配置,这将阻止用户执行家目录中的恶意文件。请参见第 3.3 节 “受限和不受限制的用户”了解更多信息。

  • 增加了进程和数据分离的机制。

进程运行在其自己的域中,从而阻止进程访问其他进程使用的文件,以及阻止进程访问其他进程。例如,在运行 SELinux 时,除非另有配置,否则攻击者无法在破坏了Samba服务器后,将这个Samba服务器用作攻击向量来读取或写入其他进程使用的文件,例如 MariaDB 数据库。

  • SELinux 有助于减轻配置错误造成的损害。

域名解析服务器(DNS)通常在所谓的域传送(zone transfer)中相互复制信息。攻击者可以使用域传机制送来更新具有虚假信息的DNS服务器。当在Red Hat Enterprise Linux上将伯克利互联网名称域(BIND)作为 DNS 服务器运行时,即使管理员忘记限制哪些服务器可以执行域传送,默认的 SELinux 策略也会阻止区域文件(包含 DNS 服务器使用的信息(如主机名到 IP 地址映射)的文本文件)被由BIND命名的守护程序本身或其他进程 利用域传送机制进行更新。

原文是“the default SELinux policy prevents zone files from being updated using zone transfers, by the BIND named daemon itself, and by other processes”,翻译可能不是很贴切。

请参阅文章:

NetworkWorld.com

http://www.networkworld.com/article/2283723/lan-wan/a-seatbelt-for-server-software--selinux-blocks-real-world-exploits.html),

服务器软件的安全带:SELinux 阻止现实世界漏洞利用

http://www.networkworld.com/article/2283723/lan-wan/a-seatbelt-for-server-software--selinux-blocks-real-world-exploits.html ),有关 SELinux 的背景信息,以及利用SELinux 阻止过的各种漏洞的信息。

 

1.3 SELINUX架构

SELinux 是内置在Linux内核中的Linux安全模块(LSM)。内核中的SELinux子系统由安全策略驱动,该策略由管理员控制并在引导时加载。系统上所有与安全相关的内核级访问操作都将被SELinux截获,并在加载的安全策略的上下文中进行检查。如果加载的策略允许该操作,则继续。否则,操作将被阻止,并且进程会收到错误。

SELinux 决策(例如允许或不允许访问)被缓存。此缓存称为访问矢量缓存 (AVC)。由于使用了这些缓存决策,较少需要检查 SELinux 策略规则,这提高了性能。请记住,如果DAC规则首先拒绝了访问,将不会用到SELinux 策略规则。

1.4 SELINUX 状态和模式

SELinux可以在以下三种模式之一下运行:disabled、 permissive、enforcing。

  • Disabled模式

强烈建议不要使用disabled模式;系统不仅不执行 SELinux 策略,而且还不在标记任何持久对象(如文件),使得将来难以启用 SELinux。

原文是:“not only does the system avoid enforcing the SELinux policy, it also avoids labeling any persistent objects such as files, making it difficult to enable SELinux in the future.”,这跟我们实际上选择disabled模式之后的现象是不符的,文件的安全标记(安全上下文)还是有的,而且将来要开启selinux时,也没有很“难”。

  • Permissive模式

在permissive模式下,系统的行为就像 SELinux 正在执行加载的安全策略一样,包括标记对象和在日志中记录访问拒绝日志,但它实际上并不会阻止任何操作。虽然不建议用于生产环境,但permissive模式对于SELinux 策略的开发工作很有用。

  • Enforcing模式

Enforcing模式是默认和推荐的操作模式;在Enforcing模式下SELinux正常运行,在整个系统上强制实施加载的安全策略。

使用 setenforce 命令可以在enforcing模式和permissive模式之间进行切换。所做的更改设置强制在重新启动后不会保留。要更改为enforcing模式,请以linux的root用户输入“setenforce 1”命令。要更改为permissive模式,请输入 “setenforce 0” 命令。getenforce命令用于查看当前 SELinux 模式:

 

在红帽企业 Linux 中,您可以在系统运行时将单个域设置为enforcing模式或permissive模式。例如,要将httpd_t域改为permissive:

有关更多信息,请参见第 11.3.4 节 “许可域”。

注意:持久状态和模式的更改在第 4.4 节 “永久更改SELinux 状态和模式”。

1.5 附加资源

红帽身份管理 (IdM) 提供了一个集中式解决方案来定义 SELinux 用户映射。更多详细信息,请参阅 《Linux域身份、身份验证和策略指南中的定义SELinux 用户映射》(https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Linux_Domain_Identity_Authentication_and_Policy_Guide/selinux-mapping.html)。

第二章     SELinux安全上下文

进程和文件标有包含附加信息的SELinux上下文,例如SELinux 用户、角色、类型以及级别(可选)。运行 SELinux 时,所有这些信息都用于做出访问控制决策。在红帽企业Linux中,SELinux 提供了基于角色的访问控制(RBAC)类型强制(TE)多级安全性(MLS)(可选)。

下面是一个展示SELinux上下文的示例。SELinux 上下文用于进程、Linux用户和文件,在运行SELinux的Linux操作系统上。可以使用以下命令查看文件和目录的 SELinux 上下文:

 

SELinux 上下文遵循 SELinux user:role:type:level 语法。字段如下:

  • SELinux user

SELinux用户身份是策略已知的身份,它被授权用于一组特定的角色,以及特定的MLS/MCS 范围。基于SELinux策略,每个Linux用户都映射到一个 SELinux 用户,这允许Linux用户继承对 SELinux 用户的限制。这个被映射的SELinux用户标识在SELinux上下文中用于该会话中的进程,以便定义他们可以进入的角色和级别。以root身份输入以下命令以查看SELinux和Linux用户帐户之间的映射(您需要安装policycoreutils-python软件包):

 

输出可能因系统而异:

  “Login Name”列,列出了 Linux 用户。

  “SELinux User”列,列出了Linux 用户映射到哪个SELinux用户。对进程来说,SELinux用户限制了可访问的角色和级别。

  “MLS/MCS Range”列,是多级安全性 (MLS) 和多类别安全 (MCS)。

  “Service”列,确定正确的SELinux上下文,其中Linux用户应该登录到系统。默认情况下,使用星号(*)字符,即代表任何服务。

原文为:“The Service column determines the correct SELinux context, in which the Linux user is supposed to be logged in to the system. By default, the asterisk (*) character is used, which stands for any service.”,翻译可能不准确。

  • Role

SELinux的一部分是基于角色的访问控制(RBAC)安全模型。角色是RBAC的一个属性。SELinux用户被授权使用角色,角色被授权用于域。角色服务作为域和SELinux用户之间的中介。可以进入哪个角色决定了可以进入哪些域;最终,这将控制可以访问哪些对象类型。这帮助减少权限升级攻击的漏洞。

  • Type

类型是类型强制的一个属性。类型定义进程的域,或文件的类型。SELinux策略规则定义了类型如何相互访问,无论是一个域访问一个类型,或一个域访问另一个域。仅当存在特定的允许SELinux策略规则时才允许访问。

  • Level

级别是MLS和MCS的属性。一个MLS范围是一对级别(也就是由开始级别到结束级别的一个范围),如果(开始和结束)级别不同,则写为“低级别-高级别”;如果(开始和结束)级别相同,则为“低级别”(或“高级别”,反正相同)( S0-S0 与 S0 相同)。每个级别是一个敏感度类别对,类别是可选的。

如果有类别,则级别为写为“敏感度:类别集”。如果没有类别,则写为“敏感度”。

如果类别集是连续集合,则可以缩写。例如,c0.c3 与C0,C1,C2,C3相同。/etc/selinux/targeted/setrans.conf文件将级别(s0:c0)映射为人类可读的表格(即公司机密)。在红帽企业Linux中,目标策略强制实施MCS,而在 MCS 中,只有一个灵敏度:s0。红帽企业Linux 中的 MCS 支持 1024 种不同的类别:C0 到 C1023。S0-S0:C0.C1023是灵敏度S0,授权用于所有类别。

MLS 强制执行Bell-La Padula强制访问模型,并用于标记安全性保护配置文件(LSPP)环境。要使用MLS限制,需要安装 “selinux-policy-mls”软件包,并将MLS配置为默认的SELinux策略。红帽企业Linux附带的MLS策略省略了许多不属于评估项的进程域,因此,桌面工作站上的MLS是不可用的(不支持 XWindow系统);但是,来自上游SELinux参考策略的MLS策略可以构建包括所有程序域。有关MLS配置的更多信息,请参见第4.13节,“多级安全性(MLS)”。

原文为:“however, an MLS policy from the upstream SELinux Reference Policy can be built that includes all program domains.”,翻译可能不准确。

2.1 域转换

一个域中的进程通过执行一个具有新域入口点(entrypoint)类型的应用来进入这个新的域。SELinux 策略中的入口点(entrypoint)许可用于控制哪些应用程序可以进入一个域。下面是一个域转换的例子:

  1. 一个用户想要更改密码。为此,他要运行passwd程序。/usr/bin/passwd 可执行文件被标记为passwd_exec_t类型:

 

              passwd程序会访问/etc/shadow文件,它被标记为shadow_t类型:

 

  1. SELinux策略规则规定允许在passwd_t域中运行的进程读取和写入被标记为 shadow_t 类型的文件。shadow_t类型仅适用于密码更改所需的文件,包括/etc/gshadow、/etc/shadow和他们的备份文件。
  2. SELinux策略规则声明passwd_t域拥有passwd_exec_t类型的入口点(entrypoint)权限
  3. 当用户运行passwd程序时,用户的shell进程将转换为passwd_t域。使用SELinux,由于默认操作是拒绝,并且存在策略允许(以及其他一些内容)在passwd_t域中运行的进程访问shadow_t类型的文件,所以passwd应用程序是被允许访问/etc/shadow,并更新用户密码的。

此示例并非详尽无遗,只是一个用作解释域转换的基本示例。虽然有一个实际的规则允许在passwd_t域中运行的进程访问标记为shadow_t类型的文件,但是在进程可以转换为新域之前,依然有一些其他的SELinux规则需要设置好。在此示例中,需要确保以下几条:

  • passwd_t域只能通过执行passwd_exec_t类型的程序来进入;只能从授权的共享库执行,例如lib_t类型;并且无法执行任何其他应用程序。
  • 只有被授权的域(如 passwd_t)才能写入类型为shadow_t的文件。即使其他进程以超级用户权限运行,只要它们不在passwd_t域中运行,这些进程也无法写入类型为shadow_t的文件。
  • 只有被授权的域才能转换到passwd_t域。例如,sendmail程序在sendmail_t域中运行,它没有正当理由去执行passwd,因此,它永远无法转换到passwd_t域。
  • 在passwd_t域中运行的进程只能读取和写入被授权类型,例如etc_t或shadow_t类型的文件。这可以防止passwd应用程序被诱骗读取或写入任意文件。

2.2 进程的SELinux安全上下文

用“ps -eZ”命令,可以查看进程的SELinux安全上下文,下面是一个例子:

  • 查看passwd进程的 SELinux 上下文

1)      打开一个终端。

2)      执行passwd程序,然后不要输入新密码。

 

3)      此时打开一个新的终端,然后输入下面的命令,输出将是下面这样:

 

4)      然后再回到第一个终端窗口,按下“Ctrl+C”来结束passwd进程。

在这个例子中,当我们执行passwd程序时(这个程序文件是被标记为passwd_exec_t类型的),用户的shell进程转换成了passwd_t域,值得注意的是:进程的type被称为“域”,文件的type被称为“类型”。

要看所有进程的SELinux安全上下文,只要执行“ps -eZ”即可。注意,下面是输出的一部分,并且可能跟你的系统上执行的结果不一样。

 

       其中的“system_r”是用于系统进程的,比如守护进程。类型强制(TE)会将每个域都分离开。

2.3 用户的SELinux安全上下文

运行下面的命令可以查看与你的linux用户相关的安全上下文:

 

       在红帽企业Linux中,Linux用户的运行不受限制。这条SELinux上下文表Linux用户映射到SELinux 用户unconfined_u,以unconfined_r角色运行,并且在unconfined_t域中运行。s0-s0是一个 MLS 范围,在本例中,它与s0相同。用户有权访问的类别由c0.c1023 定义,即所有类别(c0到c1023)。

第三章     Targeted策略

Targeted策略是红帽企业Linux的默认SELinux策略。当使用targeted策略时,目标进程运行在受限的域中,非目标进程运行在不受限的域中。例如,默认情况下,登录的用户运行在unconfined_t域,由init启动的系统进程运行在unconfined_service_t域;这两个域都是非受限的。

可执行和可写内存检查可能适用于受限域和非受限域。然而默认情况下,在不受限制的域中运行的主体可以分配可写内存并执行它。这些内存检查可以通过设置布尔值来启用,这允许 SELinux 策略在运行时修改。布尔配置将在后面讨论。

3.1 受限进程

在红帽企业Linux中,几乎所有在网络上侦听的服务,如sshd或httpd,都是受限的。此外,大多数以root用户身份运行并为用户执行任务的进程,例如 passwd程序,也是受限的。当进程被限制时,它会在自己的域中运行,例如在httpd_t域中运行的httpd进程。如果受限进程被攻击者破坏,由于SELinux策略配置,攻击者对资源的访问和可能造成的损害是有限的。

完成以下步骤以确保已启用SELinux,并且系统已准备好执行以下示例:

  如何验证SELinux状态

1)      确认SELinux已启用,运行在enforcing模式下,并且使用targeted策略。正确的输出应类似于下面的输出:

 

关于更改SELinux模式的详细信息,请参见第4.4节 “SELinux状态和模式的永久更改”。

2)      以root用户的身份,在/var/www/html目录下创建一个文件:

 

3)      输入下面的这条命令来查看这个新文件的SELinux安全上下文:

 

默认情况下,在红帽企业Linux中,Linux用户不受限制地运行,这就是testfile文件被标记为unconfined_u的原因。RBAC 用于进程,而不是文件。角色对文件来说没有意义;object_r角色是用于文件的(在持久存储和网络文件系统)。在/proc目录下,与进程相关的文件可能使用system_r角色。httpd_sys_content_t类型:允许httpd进程访问此文件。

下面的示例演示了SELinux如何防止Apache HTTP服务器 (httpd)读取未正确标记的文件,例如供Samba使用的文件。这是一个例子,并且不应在生产中使用。它假设安装了httpd和wget软件包,使用SELinux的targetd策略,并且 SELinux 在enforcing模式下运行。

例子:受限进程

1)      以root身份启动httpd守护进程:

 

确认服务正在运行。输出应包括以下信息(你电脑的打印应该仅时间戳不同):

 

2)      切换到您的Linux用户具有写入访问权限的目录,然后输入以下内容命令。除非对默认配置进行了更改,否则此命令将成功:

 

3)      chcon命令能够重新标记文件;但是,当系统重新标记时,此类标签更改不会继续存在。对于在文件系统重新标记后继续存在的永久更改,请使用semanage程序,稍后将讨论。现在以root身份输入以下命令把类型改为Samba使用的类型:

 

输入下面这条命令来查看更改的结果

 

4)      请注意,当前的DAC权限允许httpd进程访问testfile。现在进入一个你的linux用户有写权限的目录,然后输入以下命令。除非有更改默认配置时,此命令将失败:

 

5)      以root用户的身份删除testfile

 

6)      最后,如果你不需要用httpd,就用root账户输入下面的命令把它关掉

 

此示例演示了SELinux附加的安全性。尽管DAC规则允许httpd进程在步骤2中对testfile的访问,但是因为该文件被标记为httpd进程无权访问的tpye,SELinux拒绝了这个访问。

如果auditd的守护程序正在运行,则会在/var/log/audit/audit.log中记录类似于以下内容的错误:

 

       此外,类似于以下内容的错误将记录到/var/log/httpd/error_log:

 

3.2 非受限进程

非受限进程运行在不受约束的域中,例如,由init启动的非受限服务最终运行在unconfined_service_t域中,由内核执行的非受限服务最终运行在kernel_t域中,由非受限Linux用户执行的非受限服务最终运行在unconfined_t域中。对于非受限进程, SELinux策略规则被应用了,不过在非受限域中运行的进程几乎被允许访问所有的类。运行在非限域中的进程将回退到仅使用DAC规则的状态。如果一个非限制进程被攻击,SELinux不会阻止攻击者访问系统资源和数据,但是,当然了, DAC规则仍然在生效。SELinux是DAC规则之上的安全增强功能-而并不是把它替换掉了。

要确保SELinux启用了,并且系统已准备好执行以下示例,参考第3.1节 “受限进程”中所述的例子 “如何验证SELinux 状态”流程。

以下示例演示了Apache HTTP服务器(httpd)如何访问预期数据供Samba在不受限制的情况下使用。请注意,在红帽企业 Linux 中,httpd 进程默认情况下在受限httpd_t域中运行。这是一个示例,不应在生产中使用。它假设安装了httpd,wget,dbus和audit包,SELinux使用targeted策略,并且SELinux运行正在enforcing模式下。

  一个非限制进程的例子:

1)      以root用户输入下面的命令,将testfile改为Samba使用的类型:

 

查看修改的结果:

 

2)      输入以下命令来确认httpd进程有没有运行,如果打印与下面这个相同,则代表没有运行:

 

如果输出与上面这个图片不同,则执行下面的命令来把httpd程序停掉:

 

3)      要使httpd进程不受限制地运行,请以 root 身份输入以下命令以更/usr/sbin/httpd文件的类型,转换为不转换为受限域的类型:

 

4)      确保/usr/sbin/httpd被标记为bin_t;

 

5)      以root用户,启动httpd进程,并确认它成功的启动了:

 

 

6)      输入下面的命令,可以看到httpd运行在unconfined_service_t域:

 

7)      进入你的linux用户有写权限的目录,然后执行下面的命令。除非改过默认配置,否则这个命令应该能够成功执行:

 

尽管根据selinux策略httpd进程无法访问标有samba_share_t类型的文件,但是httpd在不受限制的unconfined_service_t域中运行,因此回退到只使用DAC规则的状态了,因此,wget命令能够成功执行。如果httpd一直运行在受控的httpd_t域中,wget 命令将失败。

8)      restorencon程序用于恢复文件的默认SELinux上下文。以root用户身份输入以下命令恢复/usr/sbin/httpd的默认SELinux上下文

 

确认/usr/sbin/httpd标记为httpd_exec_t类型:

 

9)      以root用户身份输入以下命令重新启动httpd。重新启动后,确认httpd是在受限域httpd_t中运行:

 

 

10)   以root用户身份,删掉testfile

 

11)   如果你不用httpd服务的话,以root用户身份,运行下面这条命令把它停掉:

 

这个例子展示了当受限进程被攻击后,数据能够被保护(受SELinux的保护),以及当非受限进程被攻击后,数据更容易被攻击者获取(不受SELinux保护)。

3.3 受限和非受限用户

基于SELinux策略,每一个linux用户都能够映射到一个SELinux用户,这就使得linux用户能够继承这个SELinux用户的限制。Linux用户与SELinux用户之间的映射关系,可以运行“semanage login -l”命令来查看(需要以root用户身份来运行):

 

     在红帽企业Linux中,Linux用户默认被映射到__default__,它会被映射到SELinux用户“unconfined_u”。下面这行定义了这个默认映射关系:

 

以下过程演示如何将新的Linux用户添加到系统以及如何映射该用户到 SELinux用户unconfined_u。它假设root用户不受限制地运行,就像在红帽企业Linux中默认情况下一样:

  将新的Linux用户映射到SELinux用户unconfined_u

1)      以root用户身份,执行下面这条命令,创建一个新的linux用户newuser:

 

2)      以root用户身份,运行下面这条命令,给新用户设置一个密码:

 

 

3)      注销当前会话,然后以新用户newuser登录,当你登录时,“pam_selinux”PAM模块会自动将Linux用户映射到SELinux用户(在这个例子中,是unconfined_u),并设置生成SELinux安全上下文。然后linux用户的shell基于这个安全上下文启动。输入下面这条命令来查看linux用户(shell)的安全上下文:

 

4)      如果你不需要newuser用户,先退出newuser的会话,然后登录你自己的账户,以root用户身份运行“userdel -r newuser”命令,这条命令将删除newuser用户,以及它的家目录。

受限和非受限Linux用户需要受制于可执行和可写内存检查,并且也受到MCS和MLS的限制。

运行下面这条命令可以查看所有可用的SELinux用户:

 

注意:seinfo命令由“setools-console package”包提供,这个包默认是不安装的。

       如果一个非受限的linux 用户执行了一个应用程序,这个应用程序被SELinux策略定义为可以从unconfined_t域转换为自己的受限域,那么这个非受限的linux用户则将依然受限与对这个受限域的限制。这样做的优势在于,即使一个linux用户运行在非受限状态,应用程序依然是受限的。一个应用的漏洞造成的危害能够被规则限制。