Eu tenho um problema interessante que não tenho certeza se existe uma solução para isso.
Eu preciso permitir que um usuário específico execute um programa Java (jar), mas não copie (leia). O problema é que, se eu der apenas a permissão execute
para o jar
, a JVM não poderá executá-lo, porque ele precisa lê-lo em primeiro lugar. Mas se eu der a permissão read
no arquivo, o usuário poderá copiá-lo em outro lugar.
Alguma idéia de como eu posso alcançar o resultado desejado?
INFORMAÇÕES ADICIONAIS APÓS REITORIA
Por Rinzwind
comment, criei um wrapper C e o compilei. Aqui está a fonte do wrapper:
#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;
}
Aqui estão as permissões atuais do jar
e 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*
Como você vê, há um usuário com read
e execute
permissões de test.jar
. E o SUID está ativado para o binário wrapper
.
Mas ainda recebo o erro:
Error: Unable to access jarfile test.jar
quando executo o wrapper
como outro usuário