chcon 无法修复 RHEL6 下的“无法根据共享对象需要启用可执行堆栈”错误

chcon 无法修复 RHEL6 下的“无法根据共享对象需要启用可执行堆栈”错误

我在工作中测试了一个应用程序,在启用 SELinux 的系统上安装总是失败。我们发布的解决方法涉及对故障中心的库文件发出 chcon 命令。

chcon -t textrel_shlib_t /usr/lib/ourfile.so.1.0.20

在 RHEL5 中,这对我们有用,并且允许应用程序正常运行,而无需完全禁用 SELinux。

在 RHEL6 下,chcon 命令没有给出错误,但是当我们的应用程序作为守护进程启动时,我们仍然看到相同的错误,通过/etc/init.d/ourapp

我主要关心的是找出更新的解决方法(有问题的应用程序库已提交给外部认证流程,并且在 6 个月内无法更改),但我也很好奇这是否表明有意从 RHEL5 更改为RHEL6。

答案1

非官方 SELinux FAQ 贡献这个解决方法

这是由名为 Linux 的扩展引起的执行盾。它可以防止程序在堆栈上执行代码,从而减轻堆栈粉碎攻击

大多数共享库不需要可执行堆栈,因此您应该通过以下方式将库标记为不需要可执行堆栈:

execstack -c /usr/lib/ourfile.so.1.0.20

使用后执行堆栈,测试程序以确保它仍然运行。如果其中有一些错误的代码实际上尝试在堆栈上执行代码,它就会崩溃。

相关内容