У меня есть интересная проблема, в которой я не уверен, что есть решение для.
Мне нужно разрешить определенному пользователю выполнять Java-программу (jar), но не копировать (читать) ее. Проблема в том, что если я даю только execute разрешение на jar, JVM не может его запустить, потому что ему необходимо прочитать его в первую очередь. Но если я дам read разрешение на файл, тогда пользователь сможет его скопировать в другое место.
Любые идеи о том, как я могу достичь желаемого результата?
ADDITONAL INFO ПОСЛЕ ЧТЕНИЯ КОММЕНТАРИИ
В комментарии 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 как другой пользователь