3.2. 未限制的进程
无限制进程在无限制域中运行,例如,由
init 最终执行的无限制服务最终在 unconfined_service_t 域中运行,由内核执行的无限制服务最终在 kernel_t 域中运行,未限制的 Linux 用户最终在 unconfined_t 域中运行。对于不受限制的进程,会应用 SELinux 策略规则,但存在允许无限制域中运行的进程的策略规则几乎所有访问权限。在不受限制的域中运行的进程只能回退到使用 DAC 规则。如果不受限制的进程受到破坏,SELinux 不会阻止攻击者获得系统资源和数据的访问权限,当然,仍会使用 DAC 规则。SELinux 是 DAC 规则基础上的安全增强 - 它不会取代它们。
要确定启用了 SELinux 且系统已准备好执行以下示例,请完成 第 3.1 节 “受限制的进程” 所述的 过程 3.1, “如何验证 SELinux 状态”。
以下示例演示了在运行 unconfined 时,Apache HTTP 服务器(
httpd)如何访问 Samba 要使用的数据。请注意,在 Red Hat Enterprise Linux 中,httpd 进程默认在受限制的 httpd_t 域中运行。这是个示例,不应在生产环境中使用。它假定已安装了 httpd、wget、dbus 和 audit 软件包,使用了 SELinux targeted 策略,并且 SELinux 处于强制模式。
过程 3.3. Unconfined 进程示例
- 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 - 输入以下命令确认
httpd进程没有运行:systemctl status httpd.service
~]$ systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: inactive (dead)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果输出不同,请以 root 用户身份输入以下命令来停止httpd进程:systemctl stop httpd.service
~]# systemctl stop httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 要使
httpd进程运行没有限制,请以 root 用户身份输入以下命令,将/usr/sbin/httpd文件的类型改为不转换为受限域的类型:chcon -t bin_t /usr/sbin/httpd
~]# chcon -t bin_t /usr/sbin/httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 确认
/usr/sbin/httpd已使用bin_t类型进行标记:ls -Z /usr/sbin/httpd
~]$ ls -Z /usr/sbin/httpd -rwxr-xr-x. root root system_u:object_r:bin_t:s0 /usr/sbin/httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 以 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 Thu 2013-08-15 11:17:01 CEST; 5s agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 输入以下命令查看在
unconfined_service_t域中运行的httpd:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 更改到 Linux 用户对其具有写入权限的目录,并输入以下命令。除非对默认配置进行了更改,否则这个命令会成功:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 虽然httpd进程无法访问标有samba_share_t类型的文件,但httpd在 unconfinedunconfined_service_t域中运行,并且回退到使用 DAC 规则,因此 wget 命令会成功。在受限制的域中运行 httpd,wget 命令将失败。httpd_t restorecon实用程序恢复文件的默认 SELinux 上下文。以 root 用户身份,输入以下命令恢复/usr/sbin/httpd的默认 SELinux 上下文:restorecon -v /usr/sbin/httpd
~]# restorecon -v /usr/sbin/httpd restorecon reset /usr/sbin/httpd context system_u:object_r:unconfined_exec_t:s0->system_u:object_r:httpd_exec_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认/usr/sbin/httpd已使用httpd_exec_t类型标记:ls -Z /usr/sbin/httpd
~]$ ls -Z /usr/sbin/httpd -rwxr-xr-x root root system_u:object_r:httpd_exec_t:s0 /usr/sbin/httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 以 root 用户身份,输入以下命令来重新启动
httpd。重启后,确认httpd在受限制的httpd_t域中运行:systemctl restart httpd.service
~]# systemctl restart httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 以 root 用户身份,删除
testfile:rm -i /var/www/html/testfile
~]# rm -i /var/www/html/testfile rm: remove regular empty file `/var/www/html/testfile'? yCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果您不需要
httpd运行,请以 root 用户身份输入以下命令,请输入以下命令停止httpd:systemctl stop httpd.service
~]# systemctl stop httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
这些部分中的示例演示了如何保护数据不受被入侵限制进程的影响(由 SELinux 保护),以及攻击者如何更加轻松地访问数据免受损坏的非限制进程(不受 SELinux 保护)。