使用 java 运行“selinux sandbox”时出现问题

使用 java 运行“selinux sandbox”时出现问题

我正在尝试使用 selinux 沙箱对 java 应用程序进行沙箱处理。

系统详情:红帽6 | x86_64 | x86_64没有安装 x 服务器 | jdk7来自oracle tar.gz版本| cgred 和 cgconfig 已停止

cmd(以 root 身份运行)

 sandbox /root/jdk/bin/java -version

上面的命令失败了

 /root/jdk/bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory

挖掘后发现“libjli.so”是RPATH共享库。所以我认为可以,因为沙箱正在将我的 bin/java 复制到 /tmp/sandbox_random 因此不会找到硬编码路径。

然后我使用“”实用程序更改 RPATHchrpath并将其更改为硬编码值但它仍然显示相同的错误。

然后我使用沙箱的 -M -i 选项并运行以下命令(我包含了它抱怨的所有 .so 文件):

sandbox -M -i /root/jdk/lib/amd64/jli/libjli.so -i /root/jdk/jre/lib/amd64/libjava.so -i /root/jdk/jre/lib/amd64/jvm.cfg -i /root/jdk/jre/lib/amd64/server/libjvm.so -i    /root/jdk/jre/lib/amd64/libverify.so -i /root/jdk/jre/lib/amd64/libzip.so /root/jdk/bin/java  -version

以下命令导致此错误:

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007fb039000000, 2555904, 1) failed; error='Permission denied' (errno=13)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 2555904 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /root/hs_err_pid1270.log

现在我使用 strace 来查看发生了什么并打印 strace(小部分)

clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fb15b6359d0) = 8268
close(4)                                = 0
read(3, "", 1048576)                    = 0
close(3)                                = 0
wait4(8268, Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f4579000000, 2555904, 1) failed; error='Permission denied' (errno=13)

我肯定有足够的空间

你们能指出可能出了什么问题吗?

答案1

问题已解决。事实证明,在我的redhat 6系统中,与java相关的文件(openjdk和oracle java)的标签不正确。
当我从 redhat 6 升级到 redhat 7 时,它开始工作得很好,即 sandbox java -version工作完美,没有任何问题。

在我的 redhat 7 系统中,.so 和其他 java 相关文件被标记为以下之一:

system_u:object_r:textrel_shlib_t:s0
system_u:object_r:lib_t:s0

在我之前的机器(即 redhat 6)中,所有文件都被标记为不同的内容,因此我遇到了这个问题。

相关内容