Gestione centralizzata di Java Virtual Machine in ambienti distribuiti e con l’utilizzo delle Group Policy Preferences

Dalla versione 1.7 di java le impostazioni di sicurezza sono cambiate rispetto alle versioni precedenti e questa modalità di gestione è stata mantenuta anche nella successiva versione 1.8.

In un’ambiente distribuito, con alcune centinaia di client la gestione della Java Virtual Machine può essere un problema, in termini di tempo e di efficacia delle soluzioni adottate.

Le Group Policy possono aiutare in modo significativo, ma non risolvono il problema, senza considerare il fatto che, dal punto di vista della sicurezza, è bene che l’amministratore di rete possa definire con precisione i confini delle “eccezioni” con cui l’ambiente Java dovrà operare.

Non esistono strumenti dedicati alla configurazione distribuita di Java, è possibile “confezionare” pacchetti installabili in rete già preconfigurati, ma, le successive modifiche di impostazione, risultano difficoltose e dispendiose in termini di tempo.

In questo articolo riporto la soluzione che ho adottato per la gestione della JVM sui client operanti in rete, ho avuto modo di approfondire le varie opzioni di gestione e di identificare quella che nel mio caso è risultata essere la più efficace, più avanti cerco di evidenziare alcune caratteristiche di JVM che se utilizzate al meglio posso risultare molto utili in proprio nella sua configurazione centralizzata.

Descrizione della struttura dell’ambiente Java

Essendo un’ambiente che è in grado di essere utilizzato su vari sistemi operativi, Jvm utilizza poco le chiavi del registry ed ha le proprie configurazioni archiviate all’interno di una serie di file di configurazione.

Per quanto riguarda il registro, in ambiente Windows Java archivia le informazioni in:

HKLM\SOFTWARE\Javasoft\

Utilizzando le impostazioni di registro è possibile, come si vedrà più avanti, disattivare l’aggiornamento automatico dell’ambiente Java.

La maggior parte delle configurazioni ed impostazioni sono però archiviate in alcuni file di configurazione, normalmente, tutto l’ambiente si trova all’interno del profilo utente nel percorso: “%userprofile%\AppData\LocalLow\Sun\Java\Deployment

le impostazioni possono quindi variare da profilo a profilo sullo stesso pc.

Tuttavia è possibile operare in modo che si utilizzi una configurazione basata su macchina in modo che ogni utente che accede recepisca le stesse impostazioni.

In ambienti gestiti può essere necessario che le impostazioni, in particolare quelle di sicurezza, siano uniformi e soprattutto non modificabili dagli utilizzatori.

Java utilizza principalmente 3 file per la definizione delle impostazioni

  • Deployment.config
  • Deployment.properties
  • Exception.sites

Il primo file deployment.config imposta l’intero ambiente in modo da operare secondo una logica di macchina piuttosto che di utente.

Il file deployment.properties contiene le Informazioni per reperire il file exception.sites che a sua volta riporta le indicazioni per I siti trusted.

  • Su sistemi Windows queste configurazioni si trovano di solito in:
    • <Windows Directory>\Sun\Java\Deployment\

In realtà il solo file deployment.config deve essere in questo percorso i restanti file possono essere tranquillamente posizionati in altre zone del disco. Il fatto di utilizzare una cartella in un percorso protetto, come è quello della directory di sistema, permette una maggior protezione dei file, non essendo modificabili se non da utenti amministratori.

Struttura dei file di configurazione

Deployment.config

Come già detto prima la presenza di questo file fa sì che java passi ad una impostazione di sistema escludendo le singole impostazioni utente, almeno per le impostazioni dichiarate.

All’interno devono essere presenti due valori:

  • deployment.system.config

  • deployment.system.config.mandatory

Il primo configura l’ambiente per ricercare il file Deployment.properties e deve contenere in percorso completo per raggiungere il file.

Il secondo è un valore vero/falso se impostato a “true” fa si che java debba obbligatoriamente raggiungere e leggere il file di configurazione Deployment.config altrimenti non è consentito l’utilizzo dell’ambiente Java.

Se l’impostazione è “false” viene effettuata la ricerca del file nel percorso dichiarato e, se presente viene utilizzato questo, altrimenti vengono ignorate le impostazioni e l’esecuzione segue le impostazioni di default.

Esempio di file deployment.config

deployment.system.config.mandatory=true

deployment.system.config=file:///C:/Windows/Sun/Java/Deployment/deployment.properties

l’impostazione del percorso per il file deployment.properties DEVE seguire la struttura riportata sopra.

Deployment.properties

È il file che contiene e regola il comportamento di tutto l’ambiente java, si può comporre di molte impostazioni, che vanno dalla gestione degli aggiornamenti alla gestione ed impostazione della cache locale a java etc.

In generale ogni valore impostato ha un suo corrispondente che lo integra definendolo come non modificabile tramite l’impostazione grafica, p.es.

deployment.webjava.enabled=true

deployment.webjava.enabled.locked

abilita il plugin java all’interno del browser ed il secondo valore, terminante con .locked lo blocca.

È possibile anche introdurre commenti all’interno del file a patto che la riga contenente il commento inizi con #

deployment.security.level=MEDIUM

è utile per impostare il valore della security generale della JVM

Esempio di file deployment.properties

# Esclusione Aggiornamenti Java

deployment.javaws.autodownload=never

deployment.expiration.check.enabled=false

deployment.expiration.decision=never

deployment.expiration.decision.suppression=true

# Abilitazione Plugin nel Browser

deployment.webjava.enabled=true

deployment.webjava.enabled.locked

# Impostazioni di sicurezza e dichiarazione del File di esclusioni

deployment.security.level=MEDIUM

deployment.security.level.locked

deployment.user.security.exception.sites=c:\\windows\\sun\\java\\deployment\\exception.sites

Exception.sites

Questo file è un puro elenco di URL, piuttosto che di indirizzi IP che necessitano di eccezioni nella gestione della sicurezza, in questo post è descritta la struttura del file e le opzioni di modifica.

Esempio di file di eccezione

http://host.dominio.loc/cartella/

http://host.dominio.loc/

http://portale.dominio.loc:8080/

Figura 1: Impostazioni di sicurezza bloccate

le due immagini riportano la stessa configurazione di sicurezza della JVM con l’impostazione dei valori deployment.security.level=MEDIUM deployment.webjava.enabled=TRUE

Figura 2: Impostazioni di sicurezza sbloccate

a destra con la dichiarazione del valore. locked presente a sinistra senza la riga che ne dichiara il blocco

Gestione della sicurezza di JVM con l’ambiente di Group Policy

Abbinando le funzioni disponibili tramite l’ambiente GPO è possibile eseguire la configurazione centralizzata di JVM in un’ambiente distribuito.

Java utilizza anche alcune chiavi di registro, ad esempio è possibile bloccare l’accesso alla configurazione degli aggiornamenti con l’impostazione della chiave di registro EnableJavaUpdate a 0

la chiave è contenuta in: HKLM\SOFTWARE\JavaSoft\Java Update\Policy

in questo caso non viene visualizzato il tab di aggiornamento.

I file di gestione dell’ambiente possono essere creati sulle varie postazioni tramite l’impiego di una GPO Preference che copia il contenuto da una posizione di rete al percorso locale.

Java potrebbe anche essere configurato per “leggere” le impostazioni direttamente da una share di rete, ma questa soluzione, nel caso in cui non sia disponibile la share stessa, renderebbe le postazioni non funzionanti.


impostazioni di GPO preference che copia i tre file di configurazione analizzati in precedenza da una posizione in lan alla cartella di sistema della postazione

Per approfondimenti:

Spiegazione in dettaglio per le opzioni configurabili nel file deployment.properties

Java 8

https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/properties.html

Java 7

http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/jcp/properties.html