红帽SELinux资料-翻译---第三章-Targeted策略

 

 

 

 

红帽企业 Linux 7 SELinux

用户和管理员指南

 

 

翻译者:李天聪       


 

 

第三章     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用户运行在非受限状态,应用程序依然是受限的。一个应用的漏洞造成的危害能够被规则限制。

posted @ 2023-08-03 19:41  94那抹微笑  阅读(43)  评论(0编辑  收藏  举报