![允许用户执行 jar 文件,但不允许复制(读取)它](https://linux22.com/image/1090307/%E5%85%81%E8%AE%B8%E7%94%A8%E6%88%B7%E6%89%A7%E8%A1%8C%20jar%20%E6%96%87%E4%BB%B6%EF%BC%8C%E4%BD%86%E4%B8%8D%E5%85%81%E8%AE%B8%E5%A4%8D%E5%88%B6%EF%BC%88%E8%AF%BB%E5%8F%96%EF%BC%89%E5%AE%83.png)
我有一个有趣的问题,但我不确定是否有解决方案。
我需要允许特定用户执行 Java 程序 (jar),但不允许复制 (读取) 它。问题是,如果我只授予execute
权限jar
,JVM 就无法运行它,因为它首先需要读取它。但如果我授予read
该文件的权限,那么用户将能够将其复制到其他地方。
有什么想法可以让我达到预期的结果吗?
阅读评论后附加信息
根据Rinzwind
评论,我创建了一个 C 包装器并对其进行了编译。以下是包装器的源代码:
#include <stdio.h>
#include <unistd.h>
int main() {
execl("/usr/bin/java",
"/usr/bin/java",
"-jar",
"test.jar",
(char*)0
);
/* If we get here, the exec didn't work */
perror("Failed to execute /path/to/java");
return 1;
}
jar
以下是和的当前权限compiled wrapper
:
-r-x------ 1 jrunner jrunner 23365202 авг 6 17:01 test.jar*
-r-s--x--x 1 jrunner jrunner 8656 авг 9 23:54 wrapper*
如您所见,有一个用户具有read
和execute
权限test.jar
。并且二进制文件已启用 SUID wrapper
。
但我仍然收到错误:
Error: Unable to access jarfile test.jar
当我wrapper
以其他用户身份运行时