Sicurezza nella scrittura in una cartella

2

Mi piacerebbe correre con i programmi Runtime.exec () in Java (il codice dei programmi è in C e Java) - gli utenti stanno caricando il codice Java / C e la mia app li esegue. Il codice viene salvato in una cartella separata per ogni utente, così come i file di input e di output.

In caso di codice C, il codice di compilazione è il seguente:

compileCommand = pathToMinGW + "gcc " + pathToFile + fileName + ".c -o " + pathToFile + fileName

E il comando per eseguire:

executeCommand = pathToFile + fileName + ".exe"

Esecuzione del comando:

Runtime runtime = Runtime.getRuntime();
Process run = runtime.exec(executeCommand);

Come posso dare le autorizzazioni per la funzione exec (), per consentire di modificare i file di output dalla cartella in cui si trova il codice caricato, ma niente altro?

    
posta MMMM 05.07.2012 - 15:22
fonte

1 risposta

0

Prima crei un utente isolato (ad esempio senza gruppi su di esso) ed esegui un'altra istanza java dall'amministratore (tramite il servizio Windows, ad esempio), sei stato premuto i comandi in una coda e hai ricevuto una coda di errore codici, ad es DB SQL.

E in Linux, puoi anche eseguire Java da root e creare una coda di comandi (con i file nella cartella e SQL, e inviare i comandi e ricevere i risultati tramite un'altra coda).

E l'istanza Java che esegue exe deve essere eseguita da root o dall'amministratore, per poter eseguire un altro exe con utenti diversi, quindi non è necessario ricaricare java ogni volta. In Windows è necessario compilare un file binario facendo ciò utilizzando Windows Process, per avviare il comando esterno tramite un altro utente. In Linux puoi usare i comandi "su" o "sudo" per farlo, quindi puoi fare:

[root@abcdef ~]# su - test -c "/usr/bin/id"
uid=503(test) gid=503(test) groups=503(test) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Quindi java richiederebbe l'accesso all'SQL con la coda, quindi questo sarebbe il modo più semplice che suppongo, ho fatto in questo modo e non sono stato finora compromesso.

ps. La coda deve essere serializzata e con timeout per ogni esecuzione.

    
risposta data 05.07.2012 - 17:36
fonte

Leggi altre domande sui tag