简洁版本: 允许 Java 7 在(使用?)SELinux 上运行的最安全方法是什么?
长版:
如果我使用了不正确的术语,请提前抱歉。我实际上只是一名 Java 开发人员,对 Linux 技能知之甚少。
我刚刚在 CentOS 版本 5.3(最终版本)上安装了 Java 7,该版本显然具有安全增强型 Linux。安装完成后(我通过从 Oracle 中解压 tar.gz 文件来“安装” /usr/java/jdk/jdk1.7.0_25
),我运行java -version
并收到此错误:
Error: dl failure on line 864
Error: failed /usr/java/jdk1.7.0_25/jre/lib/i386/server/libjvm.so,
because /usr/java/jdk1.7.0_25/jre/lib/i386/server/libjvm.so:
cannot restore segment prot after reloc: Permission denied`
我发现一些文章指出这可能是由于 SELinux 造成的,并尝试setenforce 0
看看问题是否消失。我运行了该命令,Java 工作了。但这些文章说,留setenforce 0
在连接互联网的主机上是危险的,而我的主机已连接到互联网。
还有其他文章建议采用下一种方法,但也说它可能很危险,所以我还没有尝试过。
chcon -t textrel_shlib_t /usr/jre1.7.0_10/lib/i386/client/libjvm.so
...在上面的命令中,命令末尾的路径被替换为我的 JDK 的路径。
我找不到的是关于如何在(使用?)SELinux 上安全运行 Java 7 的“官方”内容(这可能意味着很多事情)。有人有任何信息给我吗?
编辑: 我发现一篇文章提到编辑/etc/selinux/config
。我已设置如下例所示。这允许 Java 运行,但我认为我现在有一些安全漏洞。
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=permissive
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted
答案1
清理当前安装
下载 RPM 文件(http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html)
yum -y localinstall /path/to/downloaded-java.rpm
休息会得到照顾。