如何在 Fedora 14 上禁用 Apache httpd 的 SELinux?

如何在 Fedora 14 上禁用 Apache httpd 的 SELinux?

依照指示此链接我能够从 Fedora 14 中完全关闭 SELinux。但我想知道如何才能仅为 httpd 守护进程禁用 SELinux?我没有安装 system-config-selinux,并且由于公司防火墙政策,我必须从中搜索 RPMpkgs.org才能安装任何软件包。那么有没有办法解决这个问题呢?

编辑:

Summary:

SELinux is preventing /opt/ibm/cognos/c10/cgi-bin/cognos.cgi "execute" access to
/opt/ibm/cognos/c10/cgi-bin/libIBJStreamsDLL.so.

Detailed Description:

SELinux denied access requested by /opt/ibm/cognos/c10/cgi-bin/cognos.cgi.
/opt/ibm/cognos/c10/cgi-bin/cognos.cgi is mislabeled.
/opt/ibm/cognos/c10/cgi-bin/cognos.cgi default SELinux type is bin_t, but its
current type is bin_t. Changing this file back to the default type, may fix your
problem.

If you believe this is a bug, please file a bug report against this package.

Allowing Access:

You can restore the default system context to this file by executing the
restorecon command. restorecon '/opt/ibm/cognos/c10/cgi-bin/cognos.cgi'.

Fix Command:

/sbin/restorecon '/opt/ibm/cognos/c10/cgi-bin/cognos.cgi'

Additional Information:

Source Context                unconfined_u:system_r:httpd_t:s0
Target Context                unconfined_u:object_r:usr_t:s0
Target Objects                /opt/ibm/cognos/c10/cgi-bin/libIBJStreamsDLL.so [
                              file ]
Source                        cognos.cgi
Source Path                   /opt/ibm/cognos/c10/cgi-bin/cognos.cgi
Port                          <Unknown>
Host                          mm2fedora.syd.cog
Source RPM Packages           
Target RPM Packages           
Policy RPM                    selinux-policy-3.9.7-3.fc14
Selinux Enabled               True
Policy Type                   targeted
Enforcing Mode                Enforcing
Plugin Name                   restore_source_context
Host Name                     mm2fedora.syd.cog
Platform                      Linux mm2fedora.syd.cog 2.6.35.6-45.fc14.i686 #1
                              SMP Mon Oct 18 23:56:17 UTC 2010 i686 i686
Alert Count                   18
First Seen                    Fri 15 Apr 2011 02:12:44 PM EST
Last Seen                     Fri 15 Apr 2011 02:33:11 PM EST
Local ID                      409e250f-049f-49c0-89f6-7155e4643868
Line Numbers                  

Raw Audit Messages            

node=mm2fedora.syd.cog type=AVC msg=audit(1302841991.999:22392): avc:  denied  { execute } for  pid=28242 comm="cognos.cgi" path="/opt/ibm/cognos/c10/cgi-bin/libIBJStreamsDLL.so" dev=dm-0 ino=138263 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:usr_t:s0 tclass=file

node=mm2fedora.syd.cog type=SYSCALL msg=audit(1302841991.999:22392): arch=40000003 syscall=192 success=no exit=-13 a0=0 a1=1bc08 a2=5 a3=802 items=0 ppid=27923 pid=28242 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm="cognos.cgi" exe="/opt/ibm/cognos/c10/cgi-bin/cognos.cgi" subj=unconfined_u:system_r:httpd_t:s0 key=(null)

根据建议,我多次运行建议的修复命令:/sbin/restorecon '/opt/ibm/cognos/c10/cgi-bin/cognos.cgi'但不幸的是。通过完全禁用 SELinux,我可以看到这个 Web 应用程序正常运行。我现在正在研究这个主题,比如如何全局启用 SELinux,同时仅为 httpd 禁用它。这肯定不是最好的方法,但由于这只是一个测试用例,所以对我和我的团队来说没问题。

我从 Fedora 13 中得到的提示SELinux 常见问题解答所以我个人相信有一种方法可以使用 system-config-selinux,只是我不知道细节...

答案1

将我之前的评论转换成答案,以满足大众的需求;)

来自您每天学习一些东西的部门:我昨天看到 Dan Walsh 做了一个演讲,他在演讲中解释了在较新版本的 Fedora 和 EL6 中禁用应用程序限制的新方法。您不再设置布尔值来禁用转换(这有时会导致布尔值级联,需要设置布尔值才能使所有内容正常工作),而是将某种类型置于宽容模式。您可以通过运行“semanage permissive -a TYPE”命令(在您的例子中为“semanage permissive -a httpd_t”)来执行此操作。这会让 SELinux 对 httpd_t 保持打开状态,但处于宽容模式。– wzzrd 2011 年 5 月 20 日 8:45

答案2

对于 Fedora 14,就像在 el6 中一样,我认为你可以卸载 http SELinux 模块,方法是运行

semodule -r httpd

这可能会使 httpd 作为initrc_t或运行unconfined_t

如果 F14 不起作用,您可以关闭 SELinux 布尔值(来自 el5 的“旧”方法),如下所示:

setsebool httpd_disable_trans 1

并使用

setsebool -P httpd_disable_trans 1

使之永久化

答案3

我不确定如何关闭单个服务的 SELinux - 我怀疑你不能。

但是您可以使用 runco​​n 将 apache 进程设置为在不受约束的上下文中运行。

您可以将 runco​​n 视为 selinux 的 sudoers。它允许您指定在什么上下文中运行进程。

您需要修改 apache 启动脚本,添加类似以下内容:

runcon unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

进入实际调用 apache 的 httpd 启动脚本部分。

在我的 Fedora FC14 主机上我将更改此行:

LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS

阅读如下内容:

LANG=$HTTPD_LANG daemon --pidfile=${pidfile} runcon unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 $httpd $OPTIONS

PS 我实际上还没有在我的 apache 启动脚本中测试过这一点,所以上面只是猜测我需要把它放在哪里,但我之前肯定使用过 runco​​n 来允许进程不受约束地运行,所以它会起作用,你只需要找到正确的位置。

答案4

问题并不完全清楚 - 您的意图究竟是什么?
我假设您没有尝试打开 HTTP 端口,因为这将通过防火墙而不是 Selinux 本身来完成。
因此,也许您想允许 httpd 守护进程写入不在通常文档根目录下的某个目录?
如果是这样,那么您需要阅读 Selinux 权限并为您想要访问的目录设置它们。
这里有一个地方可以阅读它:
http://wiki.centos.org/HowTos/SELinux

这很有意义,因为 Fedora 和 Centos 都与 Red Hat 相关,所以这可能会有所帮助。

[编辑]
请尝试这个:
chcon -t textrel_shlib_t ThePathToTheFile

PabloTwo 在这篇文章中建议:
http://www.fedoraforum.org/forum/showthread.php?t=252552

IBM 也在这篇文章中提出了建议:
https://www-304.ibm.com/support/docview.wss?uid=swg21454550

相关内容