博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
管理SELinux策略:优化故障排除及访问控制
阅读量:5823 次
发布时间:2019-06-18

本文共 2900 字,大约阅读时间需要 9 分钟。

如果您的新部署的SaaS应用程序或任何您刚刚开发的系统或服务由于SELinux而无法运行,最好的办法是在允许模式(Permissive)下进行故障排除。

SELinux在日志事件记录方面的SELinux模式分为不同的三类——增强(Enforcing)、允许(Permissive)以及禁用(Disabled)——这也展示了管理员在SELinux系统内部如何能够确保应用程序安全并排除故障。

安全增强型Linux是具有先进的访问控制机制,内置于大多数现代Linux发行版。随着安全增强型Linux的到位,管理员使用策略可以实现更好的安全管理。

但这些策略不仅是系统安全的关键,也是其功能实现的关键。例如,安全增强型Linux(Security-Enhanced Linux)允许应用程序查询策略;管理员控制流程的初始化、继承并执行程序;同时管理员管理文件、文件系统、目录、套接字,打开文件描述符、通讯接口和网络接口。其也同样允许已发生策略的调整,具备更改SELinux策略而不需要重新启动系统的能力。

SELinux通过实施强制访问控制(Mandatory Access Control,MAC)基础上的自主访问控制(Discretionary Access Control,DAC)来实现防止系统被入侵。DAC限制访问对象或资源,如文件、套接字、管道或网络接口,基于主题或流程的特定身份,和/或主题所属于的群组。MAC限制主题访问对象或在对象或目标上运行的某种操作的能力。

SELinux模式

SELinux可设置为三种不同的模式:

增强(Enforcing):SELinux基于SELinux的策略拒绝访问;

允许(Permissive):SELinux不拒绝访问,但会记录所有拒绝行为;以及

禁用(Disabled):SELinux不可用状态。

并不推荐将SELinux设置为禁用模式。某些时候,管理员使用此模式是因为SELinux系统复杂,如果管理不善,可以轻易造成对应用程序功能的影响。例如,管理员可能会推出软件即服务(SaaS)类型的应用程序,随后发现它没有正确地运行。在迅速地查看过日志文件后,管理员发现SELinux是罪魁祸首,因此将其关闭——但这会使强大的安全工具失去作用。

利用SELinux进行故障排除

工作很扎实。这是管理员在出现问题时应该始终最先关注的内容。默认情况下,SELinux会将所有内容记录在/var/log/audit/audit.log中。当某一应用程序的功能出错——假设您很确定问题不是出在应用程序的代码——那么SELinux日志文件是您排除故障首先要关注的内容。标准的用户必须使用su命令来获得查看SELinux日志的权限(如图A)。

CentOS 7服务器上的SELinux的日志文件

梳理审计日志的过程可能会很繁琐,但它可以帮助了解究竟发生了什么问题。具体查看显示拒绝的条目。这些条目将列出诸如进程ID、用户ID、请求的权限、进程命令和目标名称等信息。有了这些信息,您会发现为什么SELinux无法与您的应用程序/服务协同工作。

GUI的替代

如果碰巧运行的服务器上具有GUI(图形化用户界面),SELinux Alert Browser是一件必备的工具。当SELinux发现了某项问题,将会进行报警。点击报警信息,输入您的root用户密码,同时SELinux警告浏览器就会出现。

在初期,SELinux应该被设置为增强模式。如果SELinux在您的应用程序或服务中发现了问题,它便会拒绝其运行。您可以将默认策略从增强模式更改为允许模式,这样SELinux会允许服务运行,同时记录下所有用于排除问题的日志内容。当您遇到这样的问题时,您可以按照以下步骤从增强模式切换到允许模式:

1.打开终端窗口;

2.输入sudo nano /etc/sysconfig/selinux命令;

3.将SELINUX=enforcing更改为SELINUX=permissive;

4.保存并关闭文件;

5.重新启动服务器;

为确保状态已发生变化,输入命令sestatus。这个命令会告诉您一切您需要知道的关于SELinux的当前状态(如图B)。

SELinux已经被切换为允许模式。

在当前状态下,您的应用程序将会运行,并且SELinux将记录所有拒绝行为,以便您能够定位问题所在。

更改SELinux策略

举例来说,您有一个SaaS的应用程序,想通过Apache服务器运行,这是不正常的。

假设Apache已经从某一可变换的文档root运行网站服务,这就很可能是SELinux遇到问题的原因。我们例子中可变换的文档root所在位置是/srv/www/。您在Apache上设置的所有内容都是正确的,但是网站无法从可变换的文档root中启动运行。您通过/var/log/audit/audit.log日志文件发现SELinux是罪魁祸首。问题是,SELinux并不了解可变换的文档root。

首先,找出某一合法的文件上的诸多细节,我们将使用/var/www/html/ index.html——从标准文档root目录就可以调整相应的替代文件root。要查找此信息,请输入以下命令:

ls -lZ /var/www/html/index.html

该命令的输出结果如图C中显示的那样。

该命令的输出结果是“ls -lZ /var/www/html/index.html”。

使用命令emanage fcontext -l | grep '/var/www'Kauai展示所有的fcontext条目,或者使用命令/var/www/ folder来展示所有文件内容,将返回同样的内容类型,即例子中的httpd_sys_content_t。随后,通过SELinux使这种类型的文件能够在/srv/www/service.com/html目录中启用。为此,使用semanage命令帮助完成策略变更:

semanage fcontext -a -t httpd_sys_content_t '/srv/www(/.*)?'

上述的命令指示semanage添加新的httpd_sys_content_t类型fcontext,并将其应用到目录/srv/www中,同样适用于任何子目录和文件。此时,输入命令semanage fcontext -l | grep '/srv/www'来查看您/srv/www目录中的文件,并验证httpd_sys_content_t内容是否生效。现在输入命令restorecon -Rv /srv/www,这将为/srv/www目录重新标记设置适当的安全内容,新修订的SELinux策略也同样适用于任何子目录和文件。

现在,Apache能够在/srv/www目录下提供服务内容而不会遭到SELinux的零星打断。当您的问题解决完成,使用和SELinux从增强模式调整成允许模式同样的方法,将SELinux从允许模式调整回增强模式。

本文转自d1net(转载)

你可能感兴趣的文章
Flask 源码流程,上下文管理
查看>>
stream classdesc serialVersionUID = -7218828885279815404, local class serialVersionUID = 1.
查看>>
ZAB与Paxos算法的联系与区别
查看>>
java 读取本地的json文件
查看>>
Breaking parallel loops in .NET C# using the Stop method z
查看>>
Android Content Provider Guides
查看>>
修改故障转移群集心跳时间
查看>>
[轉]redis;mongodb;memcache三者的性能比較
查看>>
微软职位内部推荐-Sr DEV
查看>>
用计算器计算“异或CRC”
查看>>
让你的WPF程序在Win7下呈现Win8风格主题
查看>>
JDBC二查询(web基础学习笔记八)
查看>>
监听器(web基础学习笔记二十二)
查看>>
802.11 学习笔记
查看>>
Leetcode-Database-176-Second Highest Salary-Easy(转)
查看>>
构建Docker Compose服务堆栈
查看>>
最小角回归 LARS算法包的用法以及模型参数的选择(R语言 )
查看>>
Hadoop生态圈-Kafka常用命令总结
查看>>
如何基于Redis Replication设计并实现Redis-replicator?
查看>>
Linux 环境下 PHP 扩展的编译与安装 以 mysqli 为例
查看>>