Answers:
RedHat默认情况下会打开SELinux,因为它更安全。几乎每个使用Redhat衍生产品的供应商都将SELinux 关闭,因为他们不想花时间(因此也就花钱)弄清楚为什么事情不起作用。Redhat / Fedora人员投入了大量时间和精力,使SELinux在企业版中成为更可行的选择,但是没有其他许多组织真正关心您的安全性。(他们关心自己的安全性和产品的安全性声誉,这是完全不同的事情。)
如果您可以使其工作,那就去做。如果您做不到,那就不要指望那里的供应商会提供很多帮助。您可能可以从Redhat / Fedora团队,selinux邮件列表和freenode上的#selinux频道获得帮助。但是从像Oracle这样的公司那里-SELinux并没有真正考虑他们的业务计划。
通常,最好不要在Permissive中运行SELinux,而不是完全禁用它。然后,您可以audit2why
在一段时间后检查(通过),查看在常规使用期间会拒绝哪些类型的违规行为,并通过设置audit2allow
这些“违规行为”是否为假阳性来构建自定义策略。
我发现默认情况下,在非Fedora派生系统上的SELinux行为比典型的Fedora / RHEL系统具有明显的触动性。
如果您还没有看过它,您可能会发现《Fedora SELinux用户指南》具有教育意义。
的原因:
反对的理由:
就是说,如果您正在考虑SELinux,我建议您阅读《SELinux by Example》一书。
我曾在一家在每个系统上都以强制模式启用SELinux 的公司工作。对我们来说,关键是理解和使用audit2allow程序,该程序可用于创建新的上下文规则。
首先,我们将使用audit2allow生成一个模板,然后使用脚本来构建它,如下所示:
export NAME="my_serviced"
sudo audit2allow -m "${NAME}" -i /var/log/audit/audit.log > ${NAME}.te
sudo setup_semodule ${NAME}
setup_semodule脚本:
#!/bin/sh
# Where to store selinux related files
SOURCE=/etc/selinux/local
BUILD=/etc/selinux/local
NAME=$1
/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
这将从模板(.te文件)构建模块,生成程序包,然后加载模块。
我们将Puppet用于我们的配置管理系统,并且为Puppet编写了配置以管理所有这些。
SELinux Puppet模块:
将其关闭的原因是调试可能很麻烦。
但是,我们现在不关闭它。我们几乎总是保持运行。我偶尔会关闭它,以快速验证SElinux是否存在问题。
现在调试起来要容易得多,尤其是如果您使自己成为audit2allow的忠实用户。您实际上并不需要用audit2allow来理解它,但是有时您最终可能会打开比使用audit2allow想象的要薄的地方。话虽如此,有些SELinux总比没有好。
我绝不是SELinux专家,仅使用了几年。我仍然不太了解基础知识,但是我知道足够多的知识来使应用程序运行,包括那些由'net的发行版和随机版本中包含的应用程序。
我不得不使用的主要事情是ls -lZ
(演出的SELinux) ,audit2allow
,chcon
,,semodule
和布尔值。使用这些工具,我设法获得了在SELinux下运行所需的每个应用程序。getenforce
setenforce
我发现他是调试SELinux问题的主要问题之一,当我有其他不可思议的问题时,只是想重新检查SELinux问题。通常,我要花点时间去“ h!检查SELinux !!”。
根据bind手册页,SELinux比在chroot监狱中运行bind安全得多。许多其他线索远比我建议的线索还多的人,所以我现在盲目运行。并且尽管偶尔出现问题,但还是值得怀疑。
我为AppArmor禁用了SELinux ,我发现它比SELinux更友好,更易于维护。
当您可以在宽松模式下运行它时,没有理由将其关闭。它不会干扰正在运行的应用程序,并且仍将提供有用的安全日志记录。唯一的例外是有关用户上下文的信息:如果要在生活在chroot中运行的另一个linux实例中的不同用户之间进行切换,则可能会遇到问题。