Apache Tomcat - Windows

Tomcat: come gestire l’accesso a share esterne su Windows

Nelle infrastrutture, capita spesso che un’istanza di Apache Tomcat debba interagire con file residenti su uno storage di rete (NAS o File Server). Tuttavia, se Tomcat è installato come servizio Windows, ci si scontra quasi sempre con un problema di permessi: l’errore “Access Denied“.

Per impostazione predefinita, Tomcat viene spesso installato con l’account Local Service. Questo è un account di servizio con privilegi minimi. Il suo limite principale è l’identità di rete: per il resto del dominio, Local Service è un utente anonimo. Poiché le share di rete (SMB/CIFS) richiedono un’autenticazione, Tomcat non riuscirà mai a scrivere su una cartella remota con questa configurazione.

Utilizzo di un Service Account dedicato

La soluzione migliore consiste nel creare un utente specifico nel dominio per l’esecuzione del servizio.

  • creare un utente in Active Directory (es. svc_tomcat) e impostare che la password non scada
  • assegnare a questo utente i permessi di “modifica” sia nei permessi della condivisione che nel filesystem sulla cartella di destinazione
  • configurare il servizio
    • aprire lo snap-in per la gestione dei servizi su Windows (services.msc)
    • selezionare il servizio “Apache Tomacat” ed aprire le proprietà
    • nella scheda “Log On” selezionare “This account” ed inserire le credenziali dell’utenza creata (svc_tomcat)
  • riavviare il servizio

Questo permetterà a Tomcat di autenticarsi con l’utente specificato e potrà scrivere sulla share.

Sfruttare l’identità del computer (Network Service)

Se non si vuole creare un nuovo utente, è possibile passare da Local Service a Network Service. A differenza del primo, il Network Service si presenta sulla rete utilizzando l’account della macchina (nel formato NOME_SERVER$).

  • cambiare l’utente nelle proprietà del servizio Apache Tomcat da “Local Service” in “Network Service
  • sul server che ospita la share, aggiungere ai permessi di sicurezza l’oggetto Computer (es. SRV-APP01$)
  • una volta aggiunto assegnare i permessi di modifica

Nota: Questa soluzione è valida solo se entrambi i server appartengono allo stesso dominio Active Directory

Percorsi UNC vs Unità Mappate

Un errore comune è tentare di far scrivere Tomcat su un disco mappato (es. Z:). I servizi Windows non vedono i dischi mappati, poiché questi sono legati alla sessione interattiva dell’utente che ha effettuato l’accesso.

Di conseguenza, all’interno dell’applicazione Java o nella configurazione di Tomcat, va sempre utilizzare il percorso UNC (\\NomeServer\Share\Cartella\NomeFile.txt)

Altrettanto importante è inoltre non utilizzare mai un account amministratore del dominio. L’utente con cui viene eseguito il servizio Apache Tomcat deve avere permessi di scrittura solo dove strettamente necessario.

Conclusione

La gestione dei privilegi nei servizi Windows è un aspetto critico della sicurezza perimetrale. Sebbene l’accesso alle share di rete possa apparire come un ostacolo banale, affrontarlo con la corretta gerarchia di permessi (preferendo i Service Account) garantisce che l’istanza di Tomcat sia conforme agli standard di sicurezza.