一、未正确加载SELinux Policy (sepolicy)
SELinux是Linux的一个强制访问控制(MAC)系统。然而,有时候管理员会禁用SELinux机制,因为这需要更多的系统配置和管理工作以确保可靠性和安全性。当系统未正确加载SELinux Policy时,会导致各种问题,尤其是在运行需要特权(如root)用户的应用程序时。在这种情况下,应用程序可能会发现它无法访问必要的资源,例如文件、设备以及其他系统对象。
下面给出一个示例:
[root@localhost ~]# id uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [root@localhost ~]# getenforce Permissive
上述示例中的"Permissive"意味着SELinux并没有实施策略。 在这种情况下,可以使用以下命令复制默认的SELinux策略并加载它:
[root@localhost ~]# cp -p /etc/selinux/targeted/policy/policy.24 /etc/selinux/targeted/policy/policy.24_ORG [root@localhost ~]# setenforce 1
使用"setenforce 1"可以重新实施SELinux政策。
二、分析SELinux Policy (sepolicy) 中的文件结构
在SELinux policy文件中,规则采用不同的格式来表示。 这些规则是由文件 (type), 别名 (alias), 能力 (capability), 内核对象 (class), 和动作 (permission)组成的。其中,类型(type)是策略中最重要的组成部分之一。它们定义了一个对象的安全上下文。
类型(type)关系的例子:
# 我们需要保护foo.conf的以下几个属性 # - 文件内容 (content) # - 文件属性 (attributes) # - 文件目录 (directory) # - 文件执行 (execute) # - 文件写入 (write) # SELinux 文件类型是 “httpd_sys_content_t” type httpd_sys_content_t; # 定义httpd_sys_content_t规则之间的关系 allow httpd_sys_content_t content_t:file { read getattr open }; allow httpd_sys_content_t attributes_t:file { getattr }; allow httpd_sys_content_t directory_t:dir { search read getattr open }; allow httpd_sys_content_t exec_t:file { execute }; allow httpd_sys_content_t file_t:file { read create write getattr setattr append unlink link rename };
类型(type)用于定义进程的安全上下文。 它还定义了允许进程访问哪些对象;都是哪些操作。这里展示了一个更具体的类型定义,包括了若干个SELinux规则:
# SELinux 文件类型是 “httpd_sys_script_exec_t” type httpd_sys_script_exec_t; # 执行权限 type_transition httpd_t httpd_sys_exec_t : httpd_sys_script_exec_t; # 定义 “httpd_sys_script_exec_t” 对象允许操作的文件类型。 # httpd_sys_script_exec_t类型可以读取系统包含PHP脚本程序 allow httpd_sys_script_exec_t httpd_sys_content_t:file { execute_no_trans }; allow httpd_sys_script_exec_t usr_t:file execute;
三、测试并调试SELinux Policy (sepolicy) 文件
SELinux Policy通常由多个模块组成,每个模块代表一组规则或指令。 在Linux中,我们可以使用“semodule”命令创建,安装和卸载这些模块。 但在该模块安装之前,建议使用SETools库中的semodule_package命令在离线系统上构建模块。
yum install policycoreutils-python-utils semodule_package -o example.pp -m example.te semodule -i example.pp
一旦成功安装SELinux Policy,我们可以使用“semanage”工具查看并更改策略信息。以下是一些示例命令:
# 显示指定类型的SELinux规则信息 semanage fcontext -l -t httpd_sys_content_t | more # 获取SELinux用户的默认上下文 semanage login -l # 设定默认上下文 semanage login -m -s user_u test # 设定本地启动策略 semanage boolean -l | grep audit semanage boolean -D enableaudit off semanage boolean -D enableaudit on
四、调试SELinux Policy (sepolicy) 文件
在调试SELinux Policy文件时,有两个主要的方法:audit2allow和audit2why。
audit2allow 命令可以处理selinux audit日志,它分析日志文件并提供用于修复访问拒绝问题的 SELinux权限修补程序。下面给出一个示例:
# 查看/目录下是否存在文件 touch [root@localhost /]# touch /temp/hello.txt # /var/log/audit/audit.log现在肯定现实的是“type = AVC “和“denied”的日志消息 [root@localhost /]# ausearch -m avc -ts recent | audit2allow
audit2why 命令用于分析SELinux内核日志,以确定哪些规则阻止 SELinux 在处理特定动作时工作。以下是一个示例:
audit2why < /var/log/audit/audit.log
五、总结
本文讨论了在未正确加载SELinux Policy时会面临哪些问题,以及分析SELinux Policy文件时的文件结构和配置方法。此外,我们还介绍了如何测试和调试你的SELinux策略。谷粒提醒,必须正确设置SELinux Policy文件,以保护系统免受来自外部攻击的威胁。