Configuration d'un serveur Tomcat local

Pré-requis système

  • Oracle Java 8 (dernière version)
  • Apache Tomcat 8.x

Même s'il existe plusieurs distributions de Java et de conteneurs de servlet, Unidata développe, utilise et teste le THREDDS Data Sever avec les distibutions Oracle de Java et le conteneur de servlet Apache Tomcat.

Installation de Java

  1. Télécharger la dernière version de Java SE Runtime Environnement (JRE) depuis le site d'Oracle. Utiliser la dernière version 1.8 de la JRE.
  2. Installer Java JRE en suivant les instructions Oracle.

Désarchiver le TAR java dans le répertoire d'installation (ici /opt)

$ pwd
/home/sist
$ cd /anfsist/ressources
$ ls -l jre*
-rwxrwx--- 1 root vboxsf  75922776 oct.  19 16:51 jre-8u144-linux-x64.tar.gz

$ sudo tar -C /opt -xvzf jre-8u144-linux-x64.tar.gz
$ sudo ln -s /opt/jre1.8.0_144 /opt/java
$ sudo chown -R root: /opt/jre1.8.0_144

$ ls -l /opt
lrwxrwxrwx  1 root   root   12 sept. 29 15:21 java -> jre1.8.0_144
drwxr-xr-x  6 root   root 4096 juil. 22 07:07 jre1.8.0_144

Installation de Tomcat

  1. Télécharger la dernière version du conteneur de servlet Tomcat 8.
  2. Installer l'application Tomcat en suivant les instructions d'Apache Tomcat

Désarchiver le TAR de Tomcat 8 dans le répertoire d'installation (ici /opt)

$ cd /anfsist/ressources
$ ls -l *tomcat*
-rwxrwx--- 1 root vboxsf   9433364 oct.  19 16:51 apache-tomcat-8.5.20.tar.gz

$ sudo tar -C /opt -xvzf apache-tomcat-8.5.20.tar.gz
$ sudo ln -s /opt/apache-tomcat-8.5.20 /opt/tomcat

$ ls -l /opt
drwxr-xr-x 11 root   root 4096 oct.  20 18:26 apache-tomcat-8.5.20
lrwxrwxrwx  1 root   root   12 sept. 29 15:21 java -> jre1.8.0_144
drwxr-xr-x  6 root   root 4096 juil. 22 07:07 jre1.8.0_144
lrwxrwxrwx  1 root   root   20 sept. 29 15:22 tomcat -> apache-tomcat-8.5.20

Configuration de l'environnement Tomcat

Nous allons créer un fichier setenv.sh dans le répertoire /bin de Tomcat, afin de :

  • permettre à Tomcat de déterminer les répertoires d'installation de JAVA ($JAVA_HOME)
  • définir le répertoire racine de Catalina ($CATALINA_BASE)
  • augmenter la taille mémoire allouée à la JVM dans $JAVA_OPTS pour améliorer les performances du serveur
  • ajouter des paramètres de configuration de la JVM dans $JAVA_OPTS pour permettre d'utiliser des services avancer du THREDDS Data Server.

En utilisant votre éditeur de texte favori, créer un nouveau fichier setenv.sh dans le répertoire /opt/tomcat/bin:

$ sudo vi /opt/tomcat/bin/setenv.sh

Ajouter les lignes suivantes dans le fichier setenv.sh

#!/bin/sh
#
# ENVARS for Tomcat
#
export CATALINA_HOME="/opt/tomcat"

export CATALINA_BASE="/opt/tomcat"

export JAVA_HOME="/opt/java"

# TDS specific ENVARS
#
# Define where the TDS content directory will live
#   THIS IS CRITICAL and there is NO DEFAULT - the
#   TDS will not start without this.
#
CONTENT_ROOT=-Dtds.content.root.path=/opt/tomcat/content

# set java prefs related variables (used by the wms service, for example)
JAVA_PREFS_ROOTS="-Djava.util.prefs.systemRoot=$CATALINA_HOME/content/thredds/javaUtilPrefs \
                  -Djava.util.prefs.userRoot=$CATALINA_HOME/content/thredds/javaUtilPrefs"

#
# Some commonly used JAVA_OPTS settings:
#
NORMAL="-d64 -Xmx4096m -Xms512m -server -ea"
HEAP_DUMP="-XX:+HeapDumpOnOutOfMemoryError"
HEADLESS="-Djava.awt.headless=true"

#
# Standard setup.
#
JAVA_OPTS="$CONTENT_ROOT $NORMAL $MAX_PERM_GEN $HEAP_DUMP $HEADLESS $JAVA_PREFS_ROOTS"

export JAVA_OPTS

Note

Les paramètres passés à JAVA via $JAVA_OPTS :

  • -Xms indique la taille mémoire minimum et initiale allouée à la JVM (performances).
  • -Xmx indique la taille mémoire maximum allouée à la JVM (performances).
  • -server indique au compilateur Hostspot d'exécuter la JVM en mode "server" (performances).
  • -Djava.awt.headless=true est nécessaire pour indiquer au code de rendu graphique que la JVM s'exécute sans console graphique. Sans ce paramètre, le code WMS peut crasher le serveur.
  • -Djava.util.prefs.systemRoot=$CATALINA_BASE/content/thredds/javaUtilPrefs permet au service WMS de TDS d'écrire les préférences systèmes dans un répertoire accessible en écriture au user tomcat.

Sécuriser l'installation de Tomcat

Warning

  • En raison des contraintes du système, tous les threads d'une JVM sont exécutées sous le même user id. Si le serveur Tomcat est exécuté en root, toutes les aplications servies par le serveur Tomcat ont un accès super-utilisateur aux ressources du serveur. Ainsi, si une application est attaquée et présente une faille de sécurité, l'attaquant pourra exécuter des commandes en tant que super-utilisateur.
  • Il est donc recommandé d'exécuter le serveur Tomcat avec un compte utilisateur dédié, pour lequel on fixera les droits en fonction des besoins d'accès aux données servies par le TDS.
  • Créer un user/group dédié pour exécuter Tomcat

Dans l'exemple suivant, on crée un groupe et un user du même nom tomcat. Comme ce user ne servira que pour l'exécution du serveur Tomcat, on crée un compte système avec l'option -r.

$ sudo groupadd tomcat
$ sudo useradd -g tomcat -d /opt/tomcat -r -s /usr/sbin/nologin  -c 'Tomcat Server' tomcat
  • Restreindre les droits d'accès du user tomcat

Il est également recommandé de restreindre les permissions d'accès pour le user tomcat dans le répertoire /opt/tomcat

  • Changer le owner/group du répertoire d'installation :
$ cd /opt
$ sudo chown -R tomcat:tomcat apache-tomcat-8.5.20 
$ ls -ld  *tomcat*
drwxr-xr-x 9 tomcat tomcat 4096 oct.  27 18:00 apache-tomcat-8.5.20
lrwxrwxrwx 1 root   root     25 oct.  27 18:00 tomcat -> /opt/apache-tomcat-8.5.20
  • Changer le owner/group et les permissions du répertoire de configuration de Tomcat :
$ cd /opt/tomcat
$ sudo chown -R sist:tomcat conf
$ sudo find conf -type d -exec chmod 750 '{}' \;
$ sudo find conf -type f -exec chmod 640 '{}' \;
$ sudo chmod 775 conf

$ ls -l  conf/
-r--r----- 1 root tomcat  13824 août   2 23:36 catalina.policy
-r--r----- 1 root tomcat   7376 août   2 23:36 catalina.properties
-r--r----- 1 root tomcat   1338 août   2 23:36 context.xml
-r--r----- 1 root tomcat   1149 août   2 23:36 jaspic-providers.xml
-r--r----- 1 root tomcat   2358 août   2 23:36 jaspic-providers.xsd
-r--r----- 1 root tomcat   3622 août   2 23:36 logging.properties
-r--r----- 1 root tomcat   7511 août   2 23:36 server.xml
-r--r----- 1 root tomcat   2164 août   2 23:36 tomcat-users.xml
-r--r----- 1 root tomcat   2633 août   2 23:36 tomcat-users.xsd
-r--r----- 1 root tomcat 168251 août   2 23:36 web.xml
  • Changer le owner/group des répertoires bin et lib de Tomcat :
$ sudo chown -R root:tomcat lib
$ sudo chown -R root:tomcat bin

Ressources

Question