第 3 章 目标策略
targeted 策略是 Red Hat Enterprise Linux 中使用的默认 SELinux 策略。使用 targeted 策略时,目标在受限域中运行的进程以及不是目标的进程在未限制的域中运行。例如,默认情况下,登录的用户在
unconfined_t 域中运行,由 init 启动的系统进程在 unconfined_service_t 域中运行;这两个域都没有限制。
可执行和可写入的内存检查可能同时适用于受限制和不受限制的域。但是,默认情况下,在不受限制的域中运行的进程可以分配可写入内存并执行它。这些内存检查可以通过设置布尔值来启用,这将允许在运行时修改 SELinux 策略。稍后将探讨布尔值配置。
3.1. 受限制的进程 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
几乎在侦听网络(如
sshd 或 httpd )的每个服务都限制在 Red Hat Enterprise Linux 中。此外,以 root 用户身份运行并为用户执行任务的大多数进程(如 passwd 实用程序)都受限制。当进程受限制时,它会在其自己的域中运行,如 httpd _t 域中运行的 httpd 进程。如果一个受攻击者限制的进程受到 SELinux 策略配置的影响,攻击者对资源的访问权限和可能受到的破坏会受到限制。
完成这个步骤以确保启用 SELinux,并准备执行以下示例:
过程 3.1. 如何验证 SELinux 状态
- 确认 SELinux 已启用,正在以强制模式运行,并且正在使用 targeted 策略。正确的输出应类似如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关更改 SELinux 模式的详情,请查看 第 4.4 节 “SELinux 状态和模式中的永久性更改”。 - 以 root 用户身份,在
/var/www/html/目录中创建一个文件:touch /var/www/html/testfile
~]# touch /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 输入以下命令查看新创建的文件的 SELinux 上下文:
ls -Z /var/www/html/testfile
~]$ ls -Z /var/www/html/testfile -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,Linux 用户在 Red Hat Enterprise Linux 中运行 unconfined,这就是为什么testfile文件使用 SELinuxunconfined_u用户标记的原因。RBAC 用于进程,而非文件。角色对文件没有意义;object_r角色是用于文件的通用角色(持久性存储和网络文件系统)。在/proc目录下,与进程相关的文件可以使用system_r角色。httpd_sys_content_t类型允许httpd进程访问此文件。
下面的例子演示了 SELinux 如何阻止 Apache HTTP 服务器(
httpd)读取未正确标记的文件,如 Samba 要使用的文件。这是个示例,不应在生产环境中使用。它假定已安装了 httpd 和 wget 软件包,使用了 SELinux 目标策略,并且 SELinux 处于强制模式。
过程 3.2. 受限进程示例
- 以 root 用户身份,启动
httpd守护进程:systemctl start httpd.service
~]# systemctl start httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确认 服务正在运行。输出中应包括以下信息(只有时间戳有所不同):systemctl status httpd.service
~]$ systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: active (running) since Mon 2013-08-05 14:00:55 CEST; 8s agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 更改到 Linux 用户对其具有写入权限的目录,并输入以下命令。除非对默认配置进行了更改,否则这个命令会成功:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - chcon 命令重新标记文件,当文件系统重新标记时,这些标签更改不会保留。对于文件系统重新标记生存的永久更改,请使用
semanage实用程序,稍后会对此进行讨论。以 root 用户身份,输入以下命令将类型更改为 Samba 使用的类型:chcon -t samba_share_t /var/www/html/testfile
~]# chcon -t samba_share_t /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令查看更改:ls -Z /var/www/html/testfile
~]$ ls -Z /var/www/html/testfile -rw-r--r-- root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 请注意,当前的 DAC 权限允许
httpd进程访问testfile。更改到您的用户具有写入访问权限的目录,并输入以下命令。除非对默认配置进行了更改,否则这个命令会失败:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 以 root 用户身份,删除
testfile:rm -i /var/www/html/testfile
~]# rm -i /var/www/html/testfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果您不需要
httpd运行,请以 root 用户身份输入以下命令,请输入以下命令来停止它:systemctl stop httpd.service
~]# systemctl stop httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
这个示例演示了 SELinux 增加的额外安全性。虽然 DAC 规则允许
httpd 进程访问第 2 步中的 testfile,因为该文件使用了 httpd 进程无法访问的类型,SELinux 会拒绝访问。
如果
auditd 守护进程正在运行,类似于以下内容的错误会被记录到 /var/log/audit/audit.log :
type=AVC msg=audit(1220706212.937:70): avc: denied { getattr } for pid=1904 comm="httpd" path="/var/www/html/testfile" dev=sda5 ino=247576 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1220706212.937:70): arch=40000003 syscall=196 success=no exit=-13 a0=b9e21da0 a1=bf9581dc a2=555ff4 a3=2008171 items=0 ppid=1902 pid=1904 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1220706212.937:70): avc: denied { getattr } for pid=1904 comm="httpd" path="/var/www/html/testfile" dev=sda5 ino=247576 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1220706212.937:70): arch=40000003 syscall=196 success=no exit=-13 a0=b9e21da0 a1=bf9581dc a2=555ff4 a3=2008171 items=0 ppid=1902 pid=1904 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
另外,类似以下内容的错误被记录到
/var/log/httpd/error_log :
[Wed May 06 23:00:54 2009] [error] [client 127.0.0.1] (13)Permission denied: access to /testfile denied
[Wed May 06 23:00:54 2009] [error] [client 127.0.0.1] (13)Permission denied: access to /testfile denied