"setenforce 0"如何以及为什么允许Java 7运行?

Nim*_*007 3 java linux selinux java-7

我对正在进行的程序进行了一些更改,并且我已经将Java从Java 6更新为Java 7.

我在CentOS 5.8 32位VM上运行程序.

在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
Run Code Online (Sandbox Code Playgroud)

我已经在线检查过,解决方案/解决方法就是运行命令:

   setenforce 0
Run Code Online (Sandbox Code Playgroud)

它会起作用.

阅读setenforce命令的文档,我不明白它的作用以及它是如何解决问题的.

所以我的问题是:

  1. 什么可能导致错误阻止我启动我的过程?
  2. 为什么setenforce命令会解决它?
  3. 请简要说明setenforce一般情况.

Ste*_*n C 9

1)什么可能导致错误阻止我启动我的过程?

此问题是由SELinux强制执行访问策略引起的,该访问策略禁止该应用程序更改内存段的内存保护属性

CentOS,Fedora,Scientific Linux和RedHat Entrprise Linux默认情况下SELinux设置为"Enforcing"模式.

2)为什么setenforce命令解决了它?

3)对setenforce一般做什么的简短解释

正在运行setenforce 0将SELinux切换到"Permissive"模式.

这"修复"了这个问题,但是如果你的系统暴露出来并不是一个好主意.SELinux目标访问策略的想法是通过限制您的公开服务可以做的事情来保护您的系统......例如,如果它们被黑客攻击.你刚关闭了这个保护措施.

更好的方法是:

  • 检查安全/审核日志,
  • 弄清楚触发AVC警报的确切原因
  • 决定服务是否真的可以安全地执行它正在做的事情
  • 找出chcon用于更改相关安全上下文或标志的临时修复.
  • 通过添加本地策略覆盖来实现永久性修复.

但是你需要一些SELinux技能/知识来解决这个问题.

在这种特殊情况下,另一种(并且明显不那么危险)的"快速修复"就是运行它:

# chcon -t textrel_shlib_t /agent/jre/lib/i386/client/libjvm.so
Run Code Online (Sandbox Code Playgroud)

但请注意,chcon如果您需要执行操作,则使用的临时安全上下文更改可能会被撤消restorecon.