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

标签 java linux java-7 selinux

<分区>

我对我正在处理的程序进行了一些更改,并将 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 命令的文档,我不明白它的作用以及它是如何解决问题的。

所以我的问题是:

  1. 是什么导致了阻止我启动流程的错误?
  2. 为什么setenforce命令可以解决?
  3. 请简要说明 setenforce 的一般作用。

最佳答案

1) what may cause the error that prevents me from starting my process ?

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

CentOS、Fedora、Scientific Linux 和 RedHat Entrprise Linux 将 SELinux 默认设置为“强制”模式。

2) why does setenforce command solves it ?

3) short explanation of what setenforce does in general

运行 setenforce 0 将 SELinux 切换到“许可”模式。

这“修复”了问题,但如果您的系统暴露在外,这不是一个好主意。 SELinux 有针对性的访问策略的想法是通过限制您公开的服务可以做的事情来保护您的系统……例如,如果它们被黑客入侵。您刚刚关闭了该保护。

更好的方法是:

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

但是您需要一些 SELinux 技能/知识才能实现这一目标。

在这种特殊情况下,另一种(并且危险性大大降低)“快速修复”是运行此命令:

# chcon -t textrel_shlib_t /agent/jre/lib/i386/client/libjvm.so

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

关于java - "setenforce 0"如何以及为什么允许 Java 7 运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14723474/

相关文章:

java - ItextPdf 宽度不会针对横向页面扩展

java - 在 Play Framework 2 上进行单元测试时出现错误

java - 将一个数组的元素分配给另一个数组

linux - 为什么打开字符设备文件时Python为什么执行 `TIOCGWINSZ` ioctl调用?

java - SocketChannel read() 行为 - 短读取

java - HTTP Status 400 客户端发送的请求在Spring中语法不正确

java - Windows 和 Linux 之间的行尾不同吗?

php - Eclipse PDT 不建议所有的php函数

Java swing应用程序框架支持

java - 启用nimbus时无法在JDK7中透明和未修饰的JFrame