ESUPSGC

Arborescence des pages

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

...


Schéma d’architecture de la solution

Pre-requis

Logiciels

  • Linux : nous recommandons l'usage d'un debian/trixie (debian 13)
  • Java : nous recommandons l'usage d'openjdk 

    • pour la partie serveur les versions 17 à 25 (généralement présentes dans les distributions) conviennent, 

    • pour la partie cliente vous pouvez utiliser openjdk et openjfx en version 17 ou supérieur également.

  • Maven (dernière version 3.x) : le mieux est de l'installer via le système de paquets de votre linux - http://maven.apache.org/download.cgi

  • Postgresql : le mieux est de l'installer via le système de paquets de votre linux.

  • Tomcat 10 : https://tomcat.apache.org/download-10.cgi (ou jetty 10)ou jetty 12 : à installer via le système de paquets également

  • Apache + libapache2-mod-shib2 (par paquets)

  • Git

Les deux applications serveurs doivent être « shibbolethisées » - voir la documentation renater : https://services.renater.fr/federation/docs/installation/sp

...

Il est également nécessaire d'avoir un JDK d'installé (OpenJDK [installation par paquet]).

De même il vous faudra maven, que vous pouvez soit installer par paquet (apt install maven), soit manuellement depuis http://maven.apache.org/download.cgi

OpenJDK) et maven

Bloc de code
languagebash
theme
Bloc de code
languagebash
themeRDark
apt install openjdk-21-jdk-headless maven

Installation des instances Tomcat

Création de l'utilisateur esup:

Bloc de code
languagebash
themeRDark
groupadd esup
useradd -g esup -m esup

Installer les deux instances de Tomcat. L'une sera utilisée pour ESUP-SGC, l'autre pour ESUP-NFC-TAG.

On propose d'installer les 2 applications esup-sgc et esup-nfc-tag sur deux instances de Tomcat.

Plusieurs choix sont possibles Plusieurs choix sont possibles

  • on peut récupérer un binaire tomcat depuis https://tomcat.apache.org/download-10.cgi et installer manuellement celui-ci ;
  • on peut installer le tomcat fourni par le gestionnaire de paquets de la distribution ;
  • on peut aussi préférer jetty (installation via binaire ou paquet comme pour tomcat).

Dans la suite de cette documentation, on choisit l'option de l'installation manuelle car celle-ci a le mérite d'être indépendante du système utilisé ; l'installation par paquet peut toutefois être préférable s'appuyant sur le système de paquets pour profiter des mises à jour facilitées par votre distribution (apt sous debian) - c'est d'ailleurs cette option qui a été mise en place dans la VM ESUP-SGC de démonstration.

On installe le paquet tomcat10, avec l'utilitaire tomcat10-instance-create issu de tomcat10-user permettant de facilitier la mise en place de plusieurs instances sur le même serveur : 

Bloc de code
languagebash
themeRDark
apt install tomcat10 tomcat10-user

Dans l'optique d'installer les 2 tomcat pour esup-sgc et esup-nfc-tag de la même manière, on stoppe et désactive le tomcat proposé par défaut via le paquet tomcat10.

Bloc de code
languagebash
themeRDark
systemctl stop tomcat10.service
systemctl disable tomcat10.service

Le paquet tomcat10 a ajouté au passage un utilisateur tomcat qui lancera nos instances de manière sécurisée avec des provilèges limitées.

Pour que les commandes bash lancées par esup-sgc fonctionne (commande chromium notamment) il faut que l'utilisateur tomcat est son home directory d'opérationnel : créez le et affectez le à l'utilisateur tomcaet si nécessaire.

Bloc de code
languageshell
echo ~tomcat
-> /var/lib/tomcat

mkdir /var/lib/tomcat
chown tomcat /var/lib/tomcat

On créé ensuite les 2 instances des tomcat ainsi :

Bloc de code
languagebash
themeRDark
tomcat10-instance-create -p 8280 -c 8205cd /opt/
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.48/bin/apache-tomcat-10.1.48.tar.gz
tar xzvf apache-tomcat-10.1.48.tar.gz
mv apache-tomcat-10.1.48 apache-tomcat-10.1.48-esup-nfc-tag

tar xzvf apache-tomcat-10.1.48.tar.gz
mv apache-tomcat-10.1.48 apache-tomcat-10.1.48-esup-sgc

ln -s apache-tomcat-10.1.48-esup-nfc-tag tomcat-esup-nfc-tag
ln -s apache-tomcat-10.1.48-esup-sgc tomcat-esup-sgc

rm -Rf /opt/tomcat-esup-sgc/webapps/*
mkdir
tomcat10-instance-create -p 8380 -c 8305 /opt/tomcat-esup-sgc/webapps/ROOT/
rm -Rf /opt/tomcat-esup-nfc-tag/webapps/*
mkdir /nfc-tag

On modifie ensuite les fichiers server.xml pour activer l'AJP, tomcat10-instance-create ne permettant pas cette option directement.

Pour l'instance d'Esup-SGC, éditer /opt/tomcat-esup-

...

sgc/

...

conf/server.xml afin de configurer le port 8205 et un connecteur AJP sur le port 8209.

Les connecteurs HTTP et HTTPS (ports 8080 et 8443 par défaut) doivent être commentés (ou être configurés sur un autre port pour éviter les conflits avec la seconde instance Tomcat)

Bloc de code
languagexml
themeRDark
<Server port="8205" shutdown="SHUTDOWN">
<!-- (...) -->
<Connector port="8209" protocol="AJP/1.3" address="127.0.0.1" redirectPort="8443" asyncTimeout="1200000" tomcatAuthentication="false" scheme="https" secure="true" URIEncoding="UTF-8" secretRequired="false"/>


Idem pour l'instance d'Esup-NFC-TAG qui utilisera les ports 8305 et 8309.

Bloc de code
languagexml
themeRDark
<Server port="8305" shutdown="SHUTDOWN">
<!-- (...) -->
<Connector port="8309" protocol="AJP/1.3" address="127.0.0.1" redirectPort="8443" asyncTimeout="1200000" tomcatAuthentication="false" scheme="https" secure="true" URIEncoding="UTF-8" secretRequired="false"/>


Info
  • Le tomcatAuthentication à false est indispensable pour que l'authentification shibboleth via le frontal apache et mod_shib fonctionne.
  • L'attribut asyncTimeout est donné en milli-secondes (1200000 pour 20 minutes) - esup-sgc et esup-nfc-tag utilisent la technique de long polling lors du badgeage de cartes ; c'est aussi ce qui explique le fait que l'on mette un timeout de 3600 secondes au niveau des ProxyPass Apache (les timeout des ProxyPass Apache doivent être plus grands que les asyncTimeout des tomcat).

Ces deux instances seront démarrées via Systemd. L'installation via les paquets debian nous propose par défaut une configuration sécurisée où l'instance de tomcat est lancé par un utilisateur banalisé tomcat à qui on octroie des droits de lecture/écriture sur certains répertoires. Les librairies tomcat sont partagées et issues du sytème (et donc mis à jour au travers d'un apt update/upgrade) alors que les configurations, logs, fichiers temporaires et répertoire des applications web (webapps) sont propres à chaque instance.
Aussi le fichier systemd  à mettre en place pour chacune des 2 instances n'est pas triviale, mais il suffit de partir de celui proposé pour l'instance du tomcat par défaut (que l'on a par ailleurs désactivé plus haut) pour les obtenir :

Bloc de code
languagebash
themeRDark
cp /usr/lib/systemd/system/tomcat10.service /etc/systemd/system/tomcat-esup-sgc.service
cp /usr/lib/systemd/system/tomcat10.service /etc/systemd/system/tomcat-esup-nfc-tag.service

Pour Esup-SGC :

Bloc de code
languagebash
themeRDark
cat > /etc/systemd/system/tomcat-esup-sgc.service <<EOF
#
# Systemd unit file for Apache Tomcat
#

[Unit]
Description=Apache Tomcat ESUP-SGC Server
Documentation=https://tomcat.apache.org/tomcat-10.0-doc/index.html
After=network.target
RequiresMountsFor=/var/log/tomcat10 /var/lib/tomcat10 /opt/tomcat-esup-sgc

[Service]

# Configuration
Environment="CATALINA_HOME=/usr/share/tomcat10"
Environment="CATALINA_BASE=/opt/tomcat-esup-sgc"
Environment="CATALINA_TMPDIR=/opt/tomcat-esup-sgc/temp"
Environment="JAVA_OPTS=-Djava.awt.headless=true"

# Lifecycle
Type=simple
ExecStart=/bin/sh /usr/libexec/tomcat10/tomcat-start.sh
SuccessExitStatus=143
Restart=on-abort

# Logging
SyslogIdentifier=tomcat-esup-sgc

# Security
User=tomcat
Group=tomcat
PrivateTmp=yes
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
CacheDirectory=tomcat-esup-sgc
CacheDirectoryMode=750
ProtectSystem=strict
ReadWritePaths=/opt/tomcat-esup-sgc/conf/
ReadWritePaths=/opt/tomcat-esup-sgc/work/
ReadWritePaths=/opt/tomcat-esup-sgc/webapps/
ReadWritePaths=/opt/tomcat-esup-sgc/logs/
ReadWritePaths=/opt/tomcat-esup-sgc/temp/

[Install]
WantedBy=multi-user.target


Ne pas oublier de donner les droits à tomcat sur /opt/tomcat-esup-sgc et d'activer le service.

Bloc de code
languageshell
chown -R tomcat:tomcat /opt/tomcat-esup-sgc/
systemctl enable tomcat-esup-sgc.service


Même procédure pour Esup-NFC-TAG:

Bloc de code
languagebash
themeRDark
cat > /etc/systemd/system/tomcat-esup-nfc-tag.service <<EOF
#
# Systemd unit file for Apache Tomcat
#

[Unit]
Description=Apache Tomcat Esu Nfc Tag Server
Documentation=https://tomcat.apache.org/tomcat-10.0-doc/index.html
After=network.target
RequiresMountsFor=/var/log/tomcat10 /var/lib/tomcat10 /opt/tomcat-esup-nfc-tag

[Service]

# Configuration
Environment="CATALINA_HOME=/usr/share/tomcat10"
Environment="CATALINA_BASE

Note : Le contenu du dossier webapps est impérativement à supprimer, si vous ne le faites pas l'interface d'administration d'esup-sgc ne s'affichera pas. l'URL /manager rentrera en conflit avec la webapp manager de tomcat livrée par défaut lors du déploiement du serveur tomcat.

Les options Java étant les mêmes pour les deux instances, on peut créer un fichier commun qui sera lu lors du démarrage des tomcat.

Bloc de code
languagebash
themeRDark
cat > /opt/esup-env <<EOF
#!/bin/sh
JAVA_OPTS="-Xms256m -Xmx512m"
EOF

Note: si vous devez utiliser des certificats dont les autorités de certifications ne sont pas reconnus par le trustore par défaut de votre JVM (certificats autosignés par exemple), vous pouvez à ce niveau préciser dans JAVA_OPTS un trustore spécifique (que vous créez vous même) intégrant les autorités de certificats utilisés par les VirtualHosts Apache (ou encore serveurs ldaps).

Bloc de code
themeRDark
JAVA_OPTS="-Xms256m -Xmx512m -Djavax.net.ssl.trustStore=/opt/esup.univ-ville.jks -Djavax.net.ssl.trustStorePassword=esupesup"

Ces deux instances seront démarrées via Systemd. On peut donc créer et activer ces deux services:

Pour Esup-SGC:

Bloc de code
languagebash
themeRDark
cat > /etc/systemd/system/tomcat-esup-sgc.service <<EOF
# Systemd unit file for tomcat
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/opt/esup-env
Environment=CATALINA_PID=/opt/tomcat-esup-sgc/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat-esup-sgc
ExecStart=/opt/tomcat-esup-sgc/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID
User=esup
Group=esup
[Install]
WantedBy=multi-user.target
EOF
 
systemctl enable tomcat-esup-sgc.service

...

Bloc de code
languagebash
themeRDark
cat > /etc/systemd/system/tomcat-esup-nfc-tag.service <<EOF
# Systemd unit file for tomcat
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/opt/esup-env
Environment=CATALINA_PID=/opt/tomcat-esup-nfc-tag/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat-esup-nfc-tag
ExecStart"
Environment="CATALINA_TMPDIR=/opt/tomcat-esup-nfc-tag/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID
User=esup
Group=esup
[Install]
WantedBy=multi-user.target
EOF
 
systemctl enable tomcat-esup-nfc-tag.service

Configuration des Tomcat

Pour l'instance d'Esup-SGC, éditer /opt/tomcat-esup-sgc/conf/server.xml afin de configurer le port 8205 et un connecteur AJP sur le port 8209.

Les connecteurs HTTP et HTTPS (ports 8080 et 8443 par défaut) doivent être commentés (ou être configurés sur un autre port pour éviter les conflits avec la seconde instance Tomcat)

Bloc de code
languagexml
themeRDark
<Server port="8205" shutdown="SHUTDOWN">
<!-- (...) -->
<Connector port="8209" protocol="AJP/1.3" redirectPort="8443" asyncTimeout="1200000" tomcatAuthentication="false" scheme="https" secure="true" URIEncoding="UTF-8" secretRequired="false"/>

...

temp"
Environment="JAVA_OPTS=-Djava.awt.headless=true"

# Lifecycle
Type=simple
ExecStart=/bin/sh /usr/libexec/tomcat10/tomcat-start.sh
SuccessExitStatus=143
Restart=on-abort

# Logging
SyslogIdentifier=tomcat-esup-nfc-tag

# Security
User=tomcat
Group=tomcat
PrivateTmp=yes
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
CacheDirectory=tomcat-esup-nfc-tag
CacheDirectoryMode=750
ProtectSystem=strict
ReadWritePaths=/opt/tomcat-esup-nfc-tag/conf/
ReadWritePaths=/opt/tomcat-esup-nfc-tag/work/
ReadWritePaths=/opt/tomcat-esup-nfc-tag/webapps/
ReadWritePaths=/opt/tomcat-esup-nfc-tag/logs/
ReadWritePaths=/opt/tomcat-esup-nfc-tag/temp/

[Install]
WantedBy=multi-user.target

Ne pas oublier de donner les droits à tomcat sur /opt/tomcat-esup-sgc et d'activer le service.

Bloc de code
languageshell
chown -R tomcat:tomcat /opt/tomcat-esup-nfc-tag/
systemctl enable tomcat-esup-nfc-tag.service
Bloc de code
languagexml
themeRDark
<Server port="8305" shutdown="SHUTDOWN">
<!-- (...) -->
<Connector port="8309" protocol="AJP/1.3" redirectPort="8443" asyncTimeout="1200000" tomcatAuthentication="false" scheme="https" secure="true" URIEncoding="UTF-8" secretRequired="false"/>
Info
  • Le tomcatAuthentication à false est indispensable pour que l'authentification shibboleth via le frontal apache et mod_shib fonctionne.
  • L'attribut asyncTimeout est donné en milli-secondes (1200000 pour 20 minutes) - esup-sgc et esup-nfc-tag utilisent la technique de long polling lors du badgeage de cartes ; c'est aussi ce qui explique le fait que l'on mette un timeout de 3600 secondes au niveau des ProxyPass Apache (les timeout des ProxyPass Apache doivent être plus grands que les asyncTimeout des tomcat).

    Configuration d'Apache

    Activer les modules suivants:

    Bloc de code
    languagebash
    themeRDark
    a2enmod rewrite
    a2enmod ssl
    a2enmod proxy_ajp
    a2enmod proxy_http
    a2enmod shib
    a2enmod headers
    

    ...

    Il reste donc à les intégrer à l'IDP, soit directement, soit en passant par la fédération d'identité., soit directement, soit en passant par la fédération d'identité.

    Logs

    Suivant votre installation et paramétrage, vous retrouvez les logs dans /opt/tomcat-esup-sgc/logs/ et /opt/tomcat-esup-nfc-tag/logs/

    En installant les tomcat comme décrits ici, et les lançant avec systemd, vous pourrez également consulter ces logs via journalct : 

    Bloc de code
    languageshell
    journalctl -xeu tomcat-esup-sgc.service --follow

    Rotation des logs

    Il est possible de mettre en place une rotation journalière des logs. La plupart des distributions fournissent logrotate. Il est donc possible de créer un fichier de config /etc/logrotate.d/esup-sgc avec, par exemple, le contenu suivant:

    Bloc de code
    themeRDark
    /opt/tomcat-esup-sgc/logs/*log
    /opt/tomcat-esup-sgc/logs/catalina.out {
            copytruncate
            daily
            missingok
            rotate 30
            compress
            delaycompress
    }
    /opt/tomcat-esup-nfc-tag/logs/*log
    /opt/tomcat-esup-nfc-tag/logs/catalina.out {
            copytruncate
            daily
            missingok
            rotate 30
            compress
            delaycompress
    }

    ...

    Pour avoir un système de gestion de cartes fonctionnel, l'installation minimale consiste à installer :

    ...

    minimale consiste à installer :

    • un serveur tomcat avec l'application web esup-nfc-tag-server sgc Installation ESUP-NFC-TAG-SERVER

    L'ordre d'installation n'a pas d'importance. Toutefois, les deux applications étant dépendentes, la documentation d'installation d'ESUP-SGC comporte des configurations d'ESUP-NFC-TAG-SERVER

    Pour enrôler et éventuellement encoder vos cartes vous avez également besoin d'un client esup-sgc-client : voir la documentation [archivé]

    Installation materielle

    Dans l'application esup-sgc-client, pour l'édition en 2 temps, l'encodage des cartes s'effectue à l'aide de la webcam et du lecteur de carte NFC. La webcam est disposée au dessus du lecteur de cartes de manière à le filmer. Lorsque qu'une carte est placée sur le lecteur la webcam lit le qrcode puis lance l'encodage.

    Image RemovedImage Removed

    Pour automatiser l'encodage des cartes il est possible d'utiliser une imprimante Zebra ZXP3. voir : Tuto robot encodeur basé sur une Zebra ZXP3

    L'ordre d'installation n'a pas d'importance. Toutefois, les deux applications étant dépendentes, la documentation d'installation d'ESUP-SGC comporte des configurations d'ESUP-NFC-TAG-SERVER

    Pour enrôler et éventuellement encoder vos cartes vous avez également besoin d'un client esup-sgc-client : voir Pour plus d'informations sur les différentes possibilités d'édition, voir la page ESUP-SGC-Client et édition des cartes

    ...