【问题标题】:SELinux: cannot restore segment prot after reloc: Permission deniedSELinux:reloc 后无法恢复段 prot:权限被拒绝
【发布时间】:2013-10-13 23:23:39
【问题描述】:

我们正在 SELinux 环境中测试我们的应用程序。现在,我们收到以下错误:

dlopen failed to load libFoo.so -libFoo.so: cannot restore segment prot after reloc: Permission denied

据我从my searches 了解到,这与共享库中.text 部分中的重定位有关。据我所知,我们已经在所有共享库中使用-fPIC。虽然可能有一些静态库也链接到这些共享库中。

如何找出导致此错误弹出的重定位/符号?我应该在共享库的nmobjdump -rR 输出中寻找什么?

或者我是否在寻找错误的信息,而问题出在共享库中生成的重定位之外的其他地方?

【问题讨论】:

标签: c++ linux selinux relocation


【解决方案1】:

我发现了这个:http://akkadia.org/drepper/textrelocs.html,这基本上归结为使用eu-findtextrel 来查看确实存在哪些文本重定位的建议。使用-fPIC 重新编译受影响的库即可解决问题。

【讨论】:

    【解决方案2】:

    我认为这是一个很好的建议,因为它没有将 SELinux 设置为许可模式。

    您也可以来自here

    chcon -t texrel_shlib_t <lib>
    

    例如

    chcon -t texrel_shlib_t libmylib.so
    

    但是,这仍然在 SELinux 中流行,所以 -fPIC 是实现它的方法。我遇到了一些问题,因为我错误地将 -fPIC 放入了链接器标志中。 -fPIC 是一个编译器选项!

    【讨论】:

      猜你喜欢
      • 2015-09-29
      • 2020-05-31
      • 2018-10-24
      • 2014-10-19
      • 2015-12-16
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多