PDA

View Full Version : [JAVA]Creare regole di policy "automaticamente"


nucarote
13-01-2007, 19:32
E' possibile poter "costruire" un'elenco da dare in pasto alla VM a run time in modo da ottenere gli stessi effetti di un file policy?

PGI-Bis
13-01-2007, 20:14
Teoricamente puoi creare un'estensione di SecurityPolicy che garantisca i permessi da te scelti e impostarne un'istanza come gestore delle politiche di sicurezza con System.setSecurityManager.

Poichè la sostituzione è a sua volta sottoposta ad un controllo di sicurezza, la fattibilità dipende dalla sostituibilità delle politiche in uso.

In pratica nessun insieme di permessi di sicurezza consente la sua sostituzione con un altro insieme, quindi la praticabilità è limitata a casi scolastici.

nucarote
14-01-2007, 14:45
....
Poichè la sostituzione è a sua volta sottoposta ad un controllo di sicurezza, la fattibilità dipende dalla sostituibilità delle politiche in uso...

Da cosa dipenderebbere la sua sostituibilità?

PGI-Bis
14-01-2007, 14:56
Quando invochi il metodo statico:

System.setSecurityManager(aNewSecurityManager)

è eseguito un controllo preventivo del genere:

SecurityManager old= System.getSecurityManager();
if(old != null) {
old.checkPermission(new RuntimePermission("setSecurityManager"));
}

quel "check" rilascia un SecurityException se le politiche di sicurezza non consentano la loro sostituzione con altre politiche di sicurezza.

nucarote
14-01-2007, 18:33
Quando invochi il metodo statico:

System.setSecurityManager(aNewSecurityManager)

è eseguito un controllo preventivo del genere:

SecurityManager old= System.getSecurityManager();
if(old != null) {
old.checkPermission(new RuntimePermission("setSecurityManager"));
}

quel "check" rilascia un SecurityException se le politiche di sicurezza non consentano la loro sostituzione con altre politiche di sicurezza.

Quindi conviene sempre impostare un file di policy.In ogni caso come faccio a definire un codebase dipendente dal percorso della mia applicazione (insomma un'equivalente del System.getProperty(user.dir))?

PGI-Bis
14-01-2007, 19:53
Se intendi il l'attributo codebase che segue il grant, puoi ometterlo e significa "a prescindere da quale sia l'origine del codice".

grant {...}

Il risultato è equivalente a user.dir perchè in entrambi i casi si tratta di un valore non predeterminabile.

nucarote
14-01-2007, 23:22
Se intendi il l'attributo codebase che segue il grant, puoi ometterlo e significa "a prescindere da quale sia l'origine del codice".

grant {...}

Il risultato è equivalente a user.dir perchè in entrambi i casi si tratta di un valore non predeterminabile.

Si me ne sono accorto.;) Da quello che mi hai detto, scusa la mia gnuccaggine e che il sistema di passare l'indirizzo del file policy al parametro -Djava.security.policy usato per mandare in esecuzione i programma non è usabile nel mondo reale?E che quindi dovrei farei meglio a modificare il java.policy della VM?Spero vivamente di aver capito male. :rolleyes:

PGI-Bis
14-01-2007, 23:57
L'uso del file policy va benissimo.

Non è realistico pensare di sostituire al volo i permessi di sicurezza.

Vale a dire, se mi dai un'applicazione Java da eseguire non è che io prenda e bel bello dica:

java Applicazione

perchè tanto varrebbe farlo gridando "seppuku" mentre ci si infila la spada. Come tutti, scrivo:

java -Djava.security.manager Applicazione

Cioè uso quelle restrizioni standard che erodono le capacità nocive di un'applicazione.

[edit: ho premuto il pulsante sbagliato, continuo]
La tua applicazione Java deve sempre fare i conti con l'esistenza di restrizioni che possano impedirne in tutto o in parte il funzionamento. Per farlo è sufficente che all'avvio dell'applicazione tu esegua dei test preliminari sui permessi garantiti dall'utente. Qualora manchi questo o quel permesso necessario ad una certa funzione, disabiliti quella funzione. Se manca qualcosa di essenziale, lo notificherai con un cordiale messaggio di avviso: guarda che voglio leggere questo file, voglio scrivere quell'altro, voglio connettermi di qua eccetera. Sta poi all'utente decidere se si fida o no.

lovaz
15-01-2007, 11:13
Il percorso del policy può essere relativo, quindi puoi scrivere
-Djava.security.policy=app.policy
app.policy verrà cercato nella dir corrente.

Se usi ant puoi "giocare" con dir utente e altro, così
<java ...
<sysproperty key="java.security.policy" value="${user.dir}/user.policy"/>
...
</java>