详解SELinux故障排查和陷阱规避

网友投稿 530 2023-04-17

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

详解SELinux故障排查和陷阱规避

SELinux是一个标签系统,它告诉我们系统中的每个文件、目录或对象都有对应的标签(Label)。策略控制这些元素之间的交互关系,内核则执行这些规则。

两个最重要的概念是标签(文件、进程和端口等)和类型强制(根据进程的类型将进程彼此隔离开来)。

标签使用的格式为:user:role:type:level(可选)。

要找出当前配置,请运行getenforce和sestatus两个命令:

# getenforce Enforcing # sestatus SELinux status:                 enabled SELinuxfs mount:                /sys/fs/selinux SELinux root directory:         /etc/selinux Loaded policy name:             targeted Current mode:                   enforcing Mode from config file:          enforcing Policy MLS status:              enabled Policy deny_unknown status:     allowed Memory protection checking:     actual (secure) Max kernel policy version:      32

最佳实践告诉我们,我们测试一个新的第三方应用程序时,应该在许可模式下临时配置SELinux,以便确定哪些策略或布尔值(更改行为的简单字符串)必不可少。运行该命令:

# setenforce 0

查看日志,您可以找到SELinux使应用程序正常运行所需的条件。

SELinux试图告诉我什么?

SELinux中生成警报的错误只有四个主要原因:

标签。SELinux需要知道。SELinux策略及/或应用程序可能有错误。您的信息可能被泄露。

最后一种情况是由于对攻击漏洞进行了修改或避免了活动跟踪,不过在这两种情况下,都必须查看这些警报,这点暂且不介绍。

标签

标签问题:/srv/myweb中的文件未正确标记,因而无法访问。

SELinux为同一服务所涉及的每个元素分配一个标签:

解决方案:正确标记文件。

如果您知道正确的标签,请运行:

如果您知道拥有相等标签的文件,请运行:

针对这两种情况,恢复文件的默认上下文:

# restorecon -vR /srv/myweb

标签问题:如果某个文件被移动而不是被拷贝,它保留原始标签。

解决方案:正确标记文件。

将上下文更换成正确的标签:

更换拥有参考标签的上下文:

针对这两种情况,恢复文件的默认上下文:

SELinux需要知道

服务定制:Web服务器将在端口8585上侦听请求。

要把所需的端口添加到上下文,请运行:

为服务添加功能:Web服务器将能够发送电子邮件。

要启用邮件发送功能,开启布尔值,运行:

-P标志使变更在布尔值中具有持久性。

要获得所有布尔值,运行:

# getsebool -a

要检查布尔值的状态,运行:

# semanage boolean -l

策略故障排查

服务未运行:使用wicd而不是NetworkManager服务来处理无线连接。

检查audit.log文件,查找被拒绝的访问:

注意:上下文NetworkManager_t和etc_t所涉及的一些元素需要权限,需要访问不同的文件和套接字创建。

创建type enforcement (.te)文件,拥有策略的必要权限:

# vi my_wicd.te module my_wicd 1.0;   require {         type NetworkManager_t;         type etc_t;         class ipx_socket create;         class ax25_socket { create ioctl };         class appletalk_socket { create ioctl };         class file setattr; }   #============= NetworkManager_t ============== allow NetworkManager_t etc_t:file setattr; allow NetworkManager_t self:appletalk_socket { create ioctl }; allow NetworkManager_t self:ax25_socket { create ioctl }; allow NetworkManager_t self:ipx_socket create;

要编译策略,安装软件包selinux-policy-devel,并生成策略软件包:

# make -f /usr/share/selinux/devel/Makefile my_wicd.pp

要激活刚生成的模块,运行:

# semodule -i my_wicd.pp

策略错误信息:试图访问我的网站时,我在日志中看到了SELinux错误。

为SELinux错误信息排查故障时常见的陷阱之一是,根据发现的所有错误信息创建策略。在大多数情况下,如果setroubleshoot包已安装,同样的提醒会给出所有可能的变通选项,按最好到最差的顺序排列。

要查看今天生成的setroubleshoot提醒,运行:

在这里,最好的解决办法就是修复文件的标签。

小结

为SELinux排查故障可能很难,但如果运用这里介绍的几个概念,并了解服务的组成,您就可以处理它带来的各种难题。

切记:SELinux是一种标签系统。

原文标题:SELinux troubleshooting and pitfalls,作者:Alex Callejas

上一篇:这5种常用运维监控工具都不会用,还算什么运维人?
下一篇:如何实现数据中心采用清洁能源的目标
相关文章

 发表评论

暂时没有评论,来抢沙发吧~