为什么人们要禁用SELinux?

19
我想知道在这里的人们是否通常会在默认情况下禁用SELinux?如果是的话,你能解释一下为什么吗?是什么样的系统,等等?
我希望能获得尽可能多的意见。

2
这个应该迁移到unix.stackoverflow.com,或者至少是SuperUser上,这样才有意义。然后开放讨论。 - Milan Babuškov
15个回答

13

三四年前,当定义的策略存在许多缺陷且创建策略过于困难时,我做出了禁用SELinux的选择,因为我“没有时间”去学习。当然,这只是在非关键的计算机上。

现在,随着所有发行版都已经做好了合理的策略,并且存在着帮助您创建、修复和定义策略的工具和教程(如此处此处),没有任何借口来禁用SELinux。


8
我去年曾在一家公司工作,我们启用了 CentOS 5.x 系统上的“有针对性”的策略。它没有干扰开发人员工作的任何 Web 应用程序代码,因为 Apache 在默认策略中。但它确实给非 Red Hat(或 CentOS)软件包安装带来了一些挑战,但我们通过配置管理工具 Puppet 设法解决了这个问题。
我们使用 Puppet 的模板功能生成我们的策略。请参见SELinux Enhancements for Puppet,标题为“Future stuff”,项目为“Policy Generation”。
以下是我们实施此操作的基本步骤。请注意,除了 audit2allow 之外,这全部都是自动化的。
为名为 ${name} 的某个服务生成 SELinux 模板文件。
sudo audit2allow -m "${name}" -i /var/log/audit/audit.log > ${name}.te

创建一个脚本,名称为/etc/selinux/local/${name}-setup.sh
SOURCE=/etc/selinux/local
BUILD=/etc/selinux/local

/usr/bin/checkmodule -M -m -o ${BUILD}/${name}.mod ${SOURCE}/${name}.te
/usr/bin/semodule_package -o ${BUILD}/${name}.pp -m ${BUILD}/${name}.mod
/usr/sbin/semodule -i ${BUILD}/${name}.pp

/bin/rm ${BUILD}/${name}.mod ${BUILD}/${name}.pp

话虽如此,大多数人最好只是禁用SELinux,并通过其他通常被接受的共识性最佳实践来加固其系统,例如互联网安全中心基准(请注意,他们推荐使用SELinux :-)).


5
我的公司制作一种CMS/集成平台产品。许多客户仍在使用含有重要操作数据的旧第三方系统,并希望继续使用这些系统,因为它们很实用。所以我们连接我们的系统,通过多种方式提取数据以发布或报告等。每个服务器上运行的大量客户特定内容使得正确配置SELinux成为一项困难和代价高昂的任务。
许多客户最初想要最佳安全性保护,但当他们听到我们的集成解决方案的成本估算时,"禁用SELinux"这个词通常会迅速出现在项目计划中。
这很遗憾,因为深度防御是一个好主意。然而,SELinux并不是必需的安全措施,这似乎就是它的缺点。当客户问道:"那么,您能在不使用SELinux的情况下确保安全吗?"我们该怎么回答呢?"嗯... 我们不确定。"
我们可以并且会做到,但是如果地狱结冰,发现了新的漏洞,更新及时性无法得到保证,而你的系统恰好受到攻击......此时,SELinux可能会拯救你的生命。
但是这很困难。

你的意思是说,原来 Emacs 的 C-m M-c M-butterfly 命令同样可以针对远程机器的硬盘,就像本地硬盘一样? - Joshua

3

我曾经在一家大型计算机制造商工作,为该公司的服务器上运行的RedHat Linux(以及其他两种版本)提供第三级支持。在绝大多数情况下,我们关闭了SELinux。我的感觉是,如果你真的需要SeLinux,你会知道你需要它,并且可以明确说明为什么需要。当你不需要它,或者不能清楚地表达为什么需要时,并且它默认启用时,你很快就会意识到它很麻烦。跟随你的直觉。


2
SELinux需要用户关注和手动授权,每当您没有某个权限时就会出现这种情况。许多人发现它会妨碍他们的使用,因此关闭了它。
在最近的版本中,SELinux更加用户友好,甚至有人谈论着删除关闭它的可能性,或者隐藏它,只有熟悉的用户才知道如何操作——并且假定只有那些理解后果的用户才能这样做。
使用SELinux存在一个先有鸡还是先有蛋的问题:为了始终拥有它,作为用户的您需要向开发人员报告问题,以便他们改进它。但是,在它得到改进之前,用户不喜欢使用它,如果没有很多用户使用它,它就不会得到改进。
因此,默认情况下保持打开状态,希望大多数人在关闭它之前能够长时间使用它并报告至少一些问题。
最终,这取决于您的选择:您是寻找短期解决方案,还是寻求软件的长期改进,这将导致有一天不再需要问这样的问题。

2

我听说情况正在变得更好,但我仍然禁用它。对于服务器而言,除非你是ISP或大型企业想要在多个本地用户之间实施细粒度访问级别控制,否则这并没有什么意义。

在Web服务器上使用它,我遇到了很多Apache权限的问题。我不断地必须运行,

chcon -R -h -t httpd_sys_content_t /var/www/html 

在添加新文件时更新ACL。我相信这个问题现在已经解决了,但是启用SELinux对于标准Web站点部署的有限奖励来说是很痛苦的。


5
有限的奖励?在面向互联网的网站上?你住在哪个世界里? - Vinko Vrsalovic
4
我同意关于“有限的奖励?”问题。SELinux保护了我的Web服务器,防止由于httpd使用的软件包中存在安全漏洞而被攻击利用。 - Eddie

2
很遗憾,我大部分时间都关闭SELinux,因为像Oracle这样的第三方应用程序在SELinux开启时无法很好地工作和/或不支持运行SELinux的平台。请注意,Red Hat自己的Satellite产品也需要您关闭SELinux,这再次表明人们在启用SELinux的平台上运行复杂应用程序时遇到了很多困难。
使用提示可能对您有用,也可能没用:可以使用setenforce在运行时打开和关闭SELinux(使用getenforce检查当前状态)。restorecon在chcon繁琐的情况下可能会有所帮助,但效果因情况而异。

1

是的。它很蠢。它可能会导致标准守护程序出现故障,几乎不可能诊断。它还可以关闭一个门,但留下一个窗户开着。也就是说,在新的CentOS安装中,它阻止了从“/etc/init.d/smb”启动smbd。但是,当作为“sh /etc/init.d/smb”或“smbd -D”调用时,它没有阻止它启动,也没有将init.d/smb文件移动到另一个目录,从那里它可以很好地启动smbd。

所以,无论它认为自己在保护我们的系统方面做了什么-通过破坏它们-它甚至都没有一致地做到这一点。咨询一些严肃的CentOS大师,他们也不理解其行为的不一致性。它旨在让您感到安全。但这只是安全的幌子。这是锁定系统安全的真正工作的替代品。


你做错了。正确的方式是 run_init service <servicename> <command>。不要通过_移动_文件来搞乱标签;而应该复制它们。 - Michael Hampton

1

我在这里没有太多可以贡献的,但由于它没有得到答复,我想我会发表我的意见。

个人而言,在处理不重要的事情时,我会在开发框中禁用它。当我处理任何生产或需要更好安全性的事情时,我会将其打开并/或花时间调整它以按照我的需求处理事情。

无论您是否使用它,最终取决于您的需求,但是它是有原因被创建的,所以请考虑使用它而不是总是关闭它。


1

我没有禁用它,但是有一些问题。

有些应用程序与它不太兼容。

例如,我相信我启用了smartd来跟踪我的raid磁盘的s.m.a.r.t.状态,但是selinux会对引导时创建的新的/dev/sda*节点感到困惑(我认为这就是问题所在)

您必须下载规则源代码才能理解事情。

只需检查/var/log/messages中的“avc denied”消息,您就可以解码被拒绝的内容。

谷歌搜索“selinux faq”,您将找到一个fedora selinux faq,告诉您如何解决这些问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接