我正在运行 centos 6.2
最近我注意到 apache 在启用 selinux 的情况下运行
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=Permissive
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
我注意到这些错误出现在 dmesg 上
type=1400 audit(1354453732.704:9056368): avc: denied { name_connect } for pid=39006 comm="httpd" dest=11211 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:memcache_port_t:s0 tclass=tcp_socket
type=1400 audit(1354453735.777:9056369): avc: denied { name_connect } for pid=39046 comm="httpd" dest=6379 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:port_t:s0 tclass=tcp_socket
然后我启用
/usr/sbin/setsebool httpd_can_network_connect=1
这阻止了错误,网页也开始工作。
我的问题是,如果 selinux 处于宽容模式,selinuxtype=targeted 会强制执行任何策略吗?
如果不是,它是如何解决 apache 的问题的,因为 selinux 已经处于宽容模式?
在宽容模式下,SElinux 将记录在强制模式下会导致拒绝访问的项目,但实际上不会拒绝这些操作。所以不,它不会以宽容模式执行政策,但会参考这些政策。如果您处于强制模式,您将无法启动/使用 httpd,直到您发出 setsebool 命令,因为 SELinux 会阻止它与网络连接之间的链接。
正如 John 已经回答的那样,SELinux 只是记录错误,而不是阻止服务。
我们使用 SElinux 的场景是我们希望在将它们部署到生产环境之前对其进行测试,并希望了解所有可能出错的地方。
尽管您也可以在生产中进行相同的测试,并不断修复策略,直到您确定一切就绪,然后再将模式更改为目标模式。