rh135-12-管理selinux

管理 SELINUX
本单元涵盖的主题:
-> 复习基本 SELinux 概念
-> 显示和设置 SELinux 模式
-> 显示和设置 SELinux 文件上下文
-> 通过 SELinux 布尔值调整策略行为
-> 监控 SELinux 策略冲突情况

基本 SELinux 安全性概念
SELinux (安全增强型 Linux )是保护您的系统的另一种方法。
假设我们希望允许远程匿名访问 Web 服务器,我们必须通过防火墙打开端口。然而,这意味着恶意人员可以尝试利用安全漏洞以及,如果他们损坏 Web 服务器进程,获得 apache 用户和 apache 组的权限来强行进入系统。该用户 / 组具有 document root ( /var/www/html )等的读取权限以及 /tmp 、/var/tmp 和所有人均可写的任何其他文件 / 目录的写入权限。

SELinux 是一组可确定哪个进程能访问哪些文件、目录、端口等的安全规则。每个文件、进程、目录和端口都具有专门的安全标签,称为 SELinux 上下文。上下文只是一个名称, SELinux 策略使用它来确定某个进程是否能访问文件、目录或端口。默认情况下,该策略不允许任何交互,因此明确的规则授予访问权限。如果没有允许规则,则不允许访问。
SELinux 的目标之一是保护用户数据免受已泄漏的系统服务的威胁。

SELinux 模式
为了进行故障排除,我们可以临时禁用 SELinux 保护,使用 SELinux 模式。
在强制模式中, SELinux 主动拒绝访问尝试读取类型上下文为 tmp_t 的文件的 Web 服务器。在强制模式中, SELinux 不仅记录而且提供保护。
许可模式通常用于对问题进行故障排除。在许可模式中,即使没有明确规则, SELinux 也允许所有交互,并且记录所有被拒绝的交互。此模式可以用于确定您是否有 SELinux 问题。无需重新引导即可从强制模式转为许可模式,或再从许可模式转回强制模式。
第三个模式禁用,将完全禁用 SELinux 。您必须重新引导才能彻底禁用 SELinux ,或者从禁用模式转为强制模式或许可模式。

显示和修改 SELinux 模式
请注意, /etc/sysconfig/selinux 包含一些有用注释:
在引导时,使用 /etc/sysconfig/selinux 更改默认 SELinux 模式。在上面的示例中,设置为强制模式。
若要显示当前 SELinux 模式,请使用 getenforce 。若要修改当前 SELinux 模式,请使用 setenforce :

显示和修改 SELinux 文件上下文
许多处理文件的命令具有一个用于显示或设置 SELinux 上下文的选项(通常是 -Z )。例如, ps 、 ls 、cp 和 mkdir 都使用 -Z 选项显示或设置 SELinux 上下文。
什么确定文件的初始 SELinux 上下文?通常是父目录。将父目录的上下文指定给新创建的文件。这对 vim cp 和 touch 等命令其作用,但是,如果文件是在其他位置创建的并且保留了权限(与 mv 或 cp -a 一样)则还将保留 SELinux 上下文。

semanage fcontext 可用与显示或修改 restorrecon 用来设置默认文件上下文的规则。它使用扩展正则表达式来指定路径和文件名。 fcontext 规则中最常用的扩展正则表达式是 (/.*)?, 表示随意地匹配 / 后跟任何数量的字符。本质上,它将递归地与在表达式前面列出的目录以及该目录中的所有内容相匹配。
restorecon 是 policycoreutil 软件包的一部分, semanage 是 policycoreutil-python 软件包的一部分。

一下示例显示了如何使用 semanage 针对新目录添加上下文。
[root@serverX ~]# mkdir /virtual
[root@serverX ~]# touch /virtual/index.html
[root@serverX ~]# ls -Zd /virtual/
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /virtual/
[root@serverX ~]# ls -Z /virtual/
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html
[root@serverX ~]# semanage fcontext -a -f "" -t httpd_sys_content_t '/virtual(/.*)?'
[root@serverX ~]# restorecon -RFvv /virtual/
restorecon reset /virtual context system_u:object_r:default_t:s0-
>system_u:object_r:httpd_sys_content_t:s0
restorecon reset /virtual/index.html context system_u:object_r:default_t:s0-
>system_u:object_r:httpd_sys_content_t:s0
[root@serverX ~]# ls -Zd /virtual/
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /virtual/
[root@serverX ~]# ls -Z /virtual/
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 index.html

管理 SELinux 布尔值
SELinux 布尔值是更改 SELinux 策略行为的开关。 SELinux 布尔值是可以启用或禁用的规则。安全管理员可以使用 SELinux 布尔值来调整策略,以有选择地进行调整。许多软件包都具有 man page *_selinux(8), 其中详细说明了所使用的一些布尔值; man -k ‘_selinux’ 可以轻松地找到这些手册。
getsebool 用于显示布尔值, setsebool 用于修改布尔值。 setsebool -P 修改 SELinux 策略,以永久保留修改。 semanage boolean -l 将显示布尔值是否永久。
[root@serverX ~]# getsebool -a
abrt_anon_write --> off
.....
[root@serverX ~]# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> off
[root@serverX ~]# setsebool httpd_enable_homedirs on
[root@serverX ~]# semanage boolean -l |grep httpd_enable_homedirs
httpd_enable_homedirs
-> off Allow httpd to read home directories
[root@serverX ~]# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> on
[root@serverX ~]# setsebool -P httpd_enable_homedirs on
[root@serverX ~]# semanage boolean -l |grep httpd_enable_homedirs
httpd_enable_homedirs  -> on
Allow httpd to read home directories

监控 SELinux 冲突
必须安装 setroubleshoot-server 软件包,才能将 SELinux 消息发送至 /var/log/messages 。
setroubleshoot-server 侦听 /var/log/audit/audit.log 中的审核信息并将简短摘要发送至 /var/log/
messages 。摘要包括 SELinux 冲突的唯一标识符( UUIDs ),可用于收集更多信息。 Sealert -l UUID
用于生成特定事件的报告。 Sealert -a /var/log/audit/audit.log 用于在该文件中生成所有事件的报告。
示例:
[root@demo ~]# echo www.westos.org /root/file1
[root@demo ~]# mv /root/file1 /var/www/html/
[root@demo ~]# service httpd start
[root@demo ~]# elinks -dump http://localhost/file1
Forbidden
You don't have permission to access /file1 on this server.
[root@demo ~]# tail -1 /var/log/audit/audit.log
....
type=AVC msg=audit(1312818090.800:25721): avc: denied { getattr } for pid=29653 comm="httpd"
Path="/var/www/html/file1" dev=dm-1 ino=54309 scontext=unconfined_u:system_r:httpd_t:s0
tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
....

[root@demo ~]# tail /var/log/messages
.....
Aug 8 23:41:30 demo setroubleshoot: SELinux is preventing /usr/sbin/httpd "getattr" access to /var/www/html/file1.
For complete SELinux messages. run sealert -l bbb10235-7683-4387-977d-a34c141bba86
[root@demo ~]# sealert -l bbb10235-7683-4387-977d-a34c141bba86
Summary:
SELinux is preventing /usr/sbin/httpd "getattr" access to /var/www/html/file1.
Detailed Description:
SELinux denied access requested by httpd. /var/www/html/file1 may be a
mislabeled. /var/www/html/file1 default SELinux type is httpd_sys_content_t, but
its current type is admin_home_t. Changing this file back to the default type,
may fix your problem.
File contexts can be assigned to a file in the following ways.
* Files created in a directory receive the file context of the parent directory by default.
* The SELinux policy might override the default label inherited from the parent directory by specifying a process
running in context A which creates a file in a directory labeled B will instead create the file with label C. An
example of this would be the dhcp client running with the dhclient_t type and creating a file in the directory /etc.
This file would normally receive the etc_t type due to parental inheritance but instead the file is labeled with the
net_conf_t type because the SELinux policy specifies this.
* Users can change the file context on a file using tools such as chcon, or restorecon.
This file could have been mislabeled either by user error, or if an normally confined application was run under the
wrong domain.

However, this might also indicate a bug in SELinux because the file should not have been labeled with this type.
If you believe this is a bug, please file a bug report against this package.
Allowing Access:
You can restore the default system context to this file by executing the restorecon command. restorecon
'/var/www/html/file1', if this file is a directory, you can recursively restore using restorecon -R
'/var/www/html/file1'.
Fix Command:
/sbin/restorecon '/var/www/html/file1'
.....
执行事件报告中给出的解决命令:
[root@demo ~]# restorecon /var/www/html/file1
[root@demo ~]# elinks -dump http://localhost/file1
www.westos.org
问题解决!

也可以通过 setroubleshoot 图形工具来监控 SELinux 事件:
当你的操作触发了 SELinux 策略, setroubleshoot 会自动弹出警告:(在图形控制台)

你可能感兴趣的:(linux,职场,selinux,休闲)