我对我正在开发的程序进行了一些更改,并将 Java 从 Java 6 更新到了 Java 7。
我在 CentOS 5.8 32 位虚拟机上运行该程序。
在 Java 更新之前,它运行良好。
现在该过程未开始并出现错误:
[root@CentOS-58-i-0 bin]# ./agent.sh start
Starting Agent.....d. running (23442).
Error: dl failure on line 864
Error: failed /agent/jre/lib/i386/client/libjvm.so,
because /agent/jre/lib/i386/client/libjvm.so:
cannot restore segment prot after reloc: Permission denied
我已经在线检查过,解决方案/解决方法是运行命令:
setenforce 0
它会起作用的。
阅读有关的文档setenforce
命令,我不明白它的作用以及它是如何解决问题的。
所以我的问题是:
- 什么可能导致阻止我启动进程的错误?
- 为什么
setenforce
命令解决吗?
- 请简短解释一下是什么
setenforce
一般情况下确实如此。
1)什么可能导致阻止我启动进程的错误?
此问题是由 SELinux 强制执行访问策略引起的,该策略禁止应用程序更改内存段的内存保护属性
CentOS、Fedora、Scientific Linux 和 RedHat Entrprise Linux 默认将 SELinux 设置为“强制”模式。
2)为什么setenforce命令可以解决这个问题?
3) setenforce 一般用途的简短解释
Running setenforce 0
正在将 SELinux 切换到“宽容”模式。
这“解决”了问题,但如果您的系统暴露的话,这不是一个好主意。 SELinux 有针对性的访问策略的想法是通过限制暴露的服务可以执行的操作来保护您的系统……例如,如果它们被黑客攻击。您刚刚关闭了该保护。
更好的方法是:
- 检查安全/审核日志,
- 弄清楚到底是什么触发了 AVC 警报
- 确定服务执行其正在执行的操作是否确实安全
- 使用找出临时修复
chcon
更改相关的安全上下文或标志。
- 通过添加本地策略覆盖来实施永久修复。
但您需要一些 SELinux 技能/知识才能实现这一目标。
在这种特殊情况下,另一种(并且危险性明显降低)“快速修复”是运行以下命令:
# chcon -t textrel_shlib_t /agent/jre/lib/i386/client/libjvm.so
但请注意,临时安全上下文更改使用chcon
如果您需要执行以下操作,则可能会被撤消restorecon
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)