Guide d'installation Linux

Last modified by Aurelie Bertrand on 2024/07/10 16:36

This guide provides installation and configuration instructions in a production environment on Ubuntu 20.04 and Ubuntu 22.04.



Java is required to run DigDash. The minimum requirement is Java 11. We recommend using Java 17.

This document describes how to install DigDash on Linux.

To install DigDash on Windows, please refer to the Installation Guide for Windows.

To update an existing installation, please refer to the Upgrade Guide.

Supported versions

The following versions are supported :

  • Tomcat 9 : last patch
  • OpenDJ (recommended) : version 4.6.2 and later
  • MariaDB : OS version or last patch of last LTS version
  • Nginx : system version

Digdash

OpenJDK

It is recommended to install JDK 17
​​​​​​JDK 11 is supported.

# Install last version of openjdk
sudo apt install default-jdk

# Check the installation
java -version

Tomcat 9

Installation

sudo apt install tomcat9

Creating the file tree

# Location of webapps
sudo mkdir -p /home/digdash/webapps/default/
# Working directory
sudo mkdir -p /home/digdash/appdata/default/
# Location of the .properties file
sudo mkdir -p /etc/digdash/
# Location of logs
sudo mkdir -p /var/log/digdash/

Changing folder rights

sudo chown -R tomcat:tomcat /home/digdash
sudo chown -R tomcat:tomcat /var/log/digdash
sudo chmod a+w /var/log/digdash

Configuring server.xml

Location : /etc/tomcat9/server.xml

Location of webapps

# Replace the appBase value
<Host name="localhost"  appBase="webapps"

# by this one
<Host name="localhost"  appBase="/home/digdash/webapps/default"

Connector Valve

# Complete the Connector valve
<Connector port="8080" protocol="HTTP/1.1"
              connectionTimeout="20000"
              redirectPort="8443" ></Connector>

# as follows
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               maxConnections="30000"
               maxParameterCount="100000"
               maxThreads="10000" maxPostSize="62914560"
             redirectPort="8443" compression="on" ></Connector>

Reverse Proxy Valve

# Add this valve in the Host element towards the end of the file
<Valve className="org.apache.catalina.valves.RemoteIpValve"
               internalProxies="127\.0\.[0-1]\.1"
               remoteIpHeader="X-Forwarded-For"
               requestAttributesEnabled="true"
               protocolHeader="X-Forwarded-Proto"
               protocolHeaderHttpsValue="https"></Valve>

In the case of an IPv6 server, use:

<Valve className="org.apache.catalina.valves.RemoteIpValve"
               internalProxies="127\.0\.[0-1]\.1|0:0:0:0:0:0:0:1|::1"
               remoteIpHeader="X-Forwarded-For"
               requestAttributesEnabled="true"
               protocolHeader="X-Forwarded-Proto"
               protocolHeaderHttpsValue="https"></Valve>

In very rare cases, the reverse proxy is not installed on the machine. Then replace the value "127\.0\.[0-1]\.1" with the IP address of the reverse proxy.
❗Attention: the use of “.*” should only be done as a last resort.

Log Valve

# Add this valve in the Host element towards the end of the file
<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" ></Valve>

Limit the localhost_access_log file (optional)

To limit the size of the localhost_access_log file, add the maxDays parameter to the Access Log Valve and give it the value of the desired number of days.

# For example
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" maxDays="10" ></Valve>

Editing context.xml

Location: /etc/tomcat9/context.xml

# Add the following line in the <Context> tag
<Resources cachingAllowed="true" cacheMaxSize="100000"></Resources>

clipboard-202401241144-pb3ta.png

Changing RAM

# Edit the following file
sudo vi /etc/default/tomcat9

# Replace the existing JAVA_OPTS by
JAVA_OPTS="-Djava.awt.headless=true -XX:+UseShenandoahGC -Xms6G -Xmx6G -Djava.security.egd=file:/dev/urandom -DPROP_MAX_CONCURRENT_TOTAL=5000 -DPROP_MAX_CONCURRENT_CON_PER_HOST=5000"

# Change the 6G parameter depending on the capacity of the machine, leaving at least 2G for the OS.
# In the example above, the machine has 8G of RAM.
# It is recommended to use the same value for Xms and Xmx.

Activating log write permission for tomcat

# Create the folder in /etc/systemd/system/
sudo mkdir -p /etc/systemd/system/tomcat9.service.d

# Create the file
sudo vi /etc/systemd/system/tomcat9.service.d/logging-allow.conf

# Add the following lines
[Service]
ReadWritePaths=/var/log/digdash/

# Reload the "daemon" configuration
sudo systemctl daemon-reload

sudo systemctl restart tomcat9.service

Enabling automatic start service on startup

sudo systemctl enable tomcat9

Deploying Digdash Version 24R1

Download Digdash version.

Unzip the version you have just downloaded.

Properties files

Place the digdash.properties file (located at the root of the unzipped folder) in the folder /etc/digdash.

Create the following file in the folder /etc/digdash :

Edit the digdash.properties file previously copied.

# Add these lines at the beginning of the file

# Log files location
ddenterpriseapi.ddlog4j.properties.file=/etc/digdash/log4j2_api.properties
studio.ddlog4j.properties.file=/etc/digdash/log4j2_studio.properties
digdash_dashboard.ddlog4j.properties.file=/etc/digdash/log4j2_dash.properties

# Appadata location
ddenterpriseapi.AppDataPath=/home/digdash/appdata/default
digdash_dashboard.AppDataPath=/home/digdash/appdata/default
studio.AppDataPath=/home/digdash/appdata/default
adswrapper.ads.instance.name=/home/digdash/appdata/default/ldapdigdash

adminconsole.adminconsole_domain=adminconsole
adminconsole.webstudio_domain=studio
adminconsole.server_domain_list=ddenterpriseapi
adminconsole.dashboard_domain=digdash_dashboard

studio.DOMAIN=ddenterpriseapi
studio.FORCEDOMAIN=true
studio.SERVERURL=http://localhost:8080
studio.FORCESERVERURL=true
studio.adminconsole_domain=adminconsole

digdash_dashboard.DOMAIN=ddenterpriseapi
digdash_dashboard.FORCEDOMAIN=true
digdash_dashboard.SERVERURL=http://localhost:8080
digdash_dashboard.FORCESERVERURL=true
digdash_dashboard.adminconsole_domain=adminconsole

########### Nettoyage automatique des fichiers programmé
########### Scheduled automatic file cleaning
ddenterpriseapi.startCleaner=true

########### Nettoyage des fichiers inutilisés  au démarrage du serveur
########### Clean up unused files on server startup
ddenterpriseapi.cleanOnStart=false

########### Sauvegarde automatique programmée
########### Scheduled automatic backup
ddenterpriseapi.autoBackup=true
ddenterpriseapi.autoBackupKeepDays=7
digdash_dashboard.CANCHANGEPASSWORD=true

Deploying WebApps

Place the following (contained in the <DD Install>\apache-tomcat\webapps directory) in the folder /home/digdash/webapps/default :

  • adminconsole.war
  • ddenterpriseapi.war
  • digdash_dashboard.war
  • studio.war
  • ROOT/ folder

OpenDJ

Installation

  1. Start by getting the latest version of the opendj-4.x.x_all.deb file from the website https://github.com/OpenIdentityPlatform/OpenDJ/releases  :
    wget https://github.com/OpenIdentityPlatform/OpenDJ/releases/download/4.x.x/opendj-4.x.x_all.deb
  2. Run the installation : 
    sudo dpkg -i opendj_4.x.x_all.deb

Initial setup

Launch the settings utility to follow the steps:

sudo /opt/opendj/setup

1.png
[Enter]
 

2.png

adminOpenDJ1
 

3.png

[Enter]
 

4.png

389
 

5.png

4444
 

6.png

[Enter]
 

7.png

[Enter]
 

8.png

dc=digdash,dc=com

9.png

2
 

https://lh7-us.googleusercontent.com/gs7BVYjtXGYivvccymzaxjIwiLn_ld-xJryFXxP8_aqZekStBkjWRjqRG-isbpEk97CVrMOFCsyCy-uzdIoltTdVWhurhNF_ycRAHaBeARw25JvamLrGFXuc-TIL7h6NQEb5iwhIMZIJOblCKog-n5c
oui
 

11.png

[Enter]
 

12.png

[Enter]
 

13.png

[Enter]
 

14.png

[Enter]
 

15.png

[Enter]

Additional settings

  1. Go to the OpenDJ installation directory:
    cd /opt/opendj/bin/
  2. LDIF files can be downloaded by clicking the following link LDIF_OpenDJ.

  3. Create the organizations using the “neworganization.ldif” file below:
    /opt/opendj/bin/ldapmodify --port 389 --bindDN "cn=Directory Manager" --bindPassword adminOpenDJ1 neworganisation.ldif

    dn: ou=default,dc=digdash,dc=com

    objectClass: organizationalUnit

    ou: default

  1. To create a password checker:
    • Use the dsconfig.bat command, then log in with the Directory Manager credentials and accept the certificates.
    • Go to menu 29 then select “create a new Password Validator” > select “Character Set Password Validator” > enter “Custom Character Set Password Validator” > “true” > “true” > then configure 4 character-set as follows : 
      1:abcdefghijklmnopqrstuvwxyz
      1:ABCDEFGHIJKLMNOPQRSTUVWXYZ
      1:0123456789
      1:!"#$%&'()*+,-./:;\<=>?@[]^_`{|}~

      ➡ The result should look like this :
      Resultats.png

 

  1. For the second password checker, we can use a command line because it does not contain special characters: 
    /opt/opendj/bin/dsconfig create-password-validator --bindDN "cn=Directory Manager" --bindPassword adminOpenDJ1  --validator-name "Custom length Password Validator" --set min-password-length:12 --set enabled:true --type length-based --no-prompt
  1. Apply both password checkers:
    /opt/opendj/bin/dsconfig set-password-policy-prop --bindDN "cn=Directory Manager" --bindPassword adminOpenDJ1 --policy-name "Default Password Policy" --set password-validator:"Custom Character-set Password Validator" --set password-validator:"Custom length Password Validator" --no-prompt
  1. Set the password policy for users using the “ppolicy.ldif” file below:
    /opt/opendj/bin/ldapmodify --port 389 --bindDN "cn=Directory Manager" --bindPassword adminOpenDJ1 ppolicy.ldif

    dn: cn=ppolicy,ou=default,dc=digdash,dc=com

    objectClass: top

    objectClass: subentry

    objectClass: pwdPolicy

    cn: ppolicy

    pwdAttribute: userPassword

    pwdAllowUserChange: TRUE

    pwdCheckQuality: 1

    pwdExpireWarning: 600

    pwdFailureCountInterval: 30

    pwdGraceAuthNLimit: 5

    pwdInHistory: 5

    pwdLockout: TRUE

    pwdLockoutDuration: 900

    pwdMaxAge: 0

    pwdMaxFailure: 5

    pwdMinAge: 0

    pwdMustChange: FALSE

    pwdSafeModify: FALSE

    subtreeSpecification: {base "ou=users", specificationFilter "!(uid=admin)" }

  1. Set a second password policy for the admin using the “ppolicy-admin.ldif” file below:
    /opt/opendj/bin/ldapmodify --port 389 --bindDN "cn=Directory Manager" --bindPassword adminOpenDJ1 ppolicy-admin.ldif

    dn: cn=ppolicy-admin,ou=default,dc=digdash,dc=com

    objectClass: top

    objectClass: subentry

    objectClass: pwdPolicy

    cn: ppolicy-admin

    pwdAttribute: userPassword

    pwdAllowUserChange: TRUE

    pwdCheckQuality: 1

    pwdFailureCountInterval: 30

    pwdGraceAuthNLimit: 5

    pwdInHistory: 5

    pwdLockout: FALSE

    pwdMaxAge: 0

    pwdMinAge: 0

    pwdMustChange: FALSE

    pwdSafeModify: FALSE

    subtreeSpecification: {base "ou=users", specificationFilter "(uid=admin)" }

  2. Change the password policy to allow pre-encoded passwords (useful for restores in digdash) :
    /opt/opendj/bin/dsconfig set-password-policy-prop --policy-name "Default Password Policy" --set allow-pre-encoded-passwords:true --hostname localhost --trustAll --bindDN "cn=directory manager" --bindPassword adminOpenDJ1 --no-prompt
  3. Create an admin user for digdash via the “create_user_admin.ldif” file below
    /opt/opendj/bin/ldapmodify --port 389 --bindDN "cn=Directory Manager" --bindPassword adminOpenDJ1 create_user_admin.ldif

    dn: uid=admin,ou=default,dc=digdash,dc=com

    objectClass: shadowAccount

    objectClass: inetOrgPerson

    cn: Admin Domain Default

    sn: Default

    uid: admin_default

  1. Assign the admin user the necessary rights using the “add_admin_right.ldif” and “add_admin_right2.ldif” files below:
    /opt/opendj/bin/ldapmodify --port 389 --bindDN "cn=Directory Manager" --bindPassword adminOpenDJ1 add_admin_right.ldif

    dn: ou=default,dc=digdash,dc=com

    changetype: modify

    add: aci

    aci: (target ="ldap:///ou=default,dc=digdash,dc=com")(targetattr = "userpassword || shadowlastchange")(version 3.0; acl "allow write on userpassword and shadowlastchange for admin"; allow(write) (userdn = "ldap:///uid=admin,ou=default,dc=digdash,dc=com");)

    aci: (target ="ldap:///ou=default,dc=digdash,dc=com")(targetattr = "userpassword || shadowlastchange")(version 3.0; acl "allow read,write on userpassword and shadowlastchange for auth users"; allow(read) (userdn = "ldap:///all");)

    aci: (target ="ldap:///ou=default,dc=digdash,dc=com")(targetattr = "userpassword || shadowlastchange")(version 3.0; acl "allow read on userpassword and shadowlastchange for anonymous"; allow(selfwrite) (userdn = "ldap:///anyone");)

    aci: (target ="ldap:///ou=default,dc=digdash,dc=com")(targetattr = "*")(version 3.0; acl "allow write on * for admin"; allow(all) (userdn = "ldap:///uid=admin,ou=default,dc=digdash,dc=com");)

    aci: (target ="ldap:///ou=default,dc=digdash,dc=com")(targetattr = "*")(version 3.0; acl "allow read on * for anonymous"; allow(read) (userdn = "ldap:///all");)

    /opt/opendj/bin/ldapmodify --port 389 --bindDN "cn=Directory Manager" --bindPassword adminOpenDJ1 add_admin_right2.ldif

    dn: uid=admin,ou=default,dc=digdash,dc=com

    changetype: modify

    add: ds-privilege-name

    ds-privilege-name: config-read

    ds-privilege-name: password-reset

  1. Generate a password for the administrator and remember it for later:
    /opt/opendj/bin/ldappasswordmodify --port 389 --bindDN "cn=Directory Manager" --bindPassword adminOpenDJ1 --authzID "u:admin"

Enabling automatic start

  1. Créer le fichier opendj.service
    sudo vi /etc/systemd/system/opendj.service
  1. Et y coller les lignes suivantes

    [Unit]

    Description=OpenDJ Server Daemon

    Wants=network-online.target

    After=network-online.target

    Conflicts=shutdown.target

     [Service]

    Type=simple

    Restart=no

    TimeoutSec=5min

    IgnoreSIGPIPE=no

    KillMode=process

    GuessMainPID=no

    RemainAfterExit=yes

    ExecStart=/opt/opendj/bin/start-ds --quiet

    ExecStop=/opt/opendj/bin/stop-ds --quiet

     [Install]

    WantedBy=multi-user.target

  1. Ensuite taper les commandes suivantes

    systemctl daemon-reload

    systemctl enable --now opendj

    systemctl status opendj

Fonction utile

L'opération ci-dessous ne fait pas partie de l'installation.
Il peut néanmoins être utile de la connaître pour une utilisation ultérieure.

Étendre la limite pour les recherches LDAP

Étendre la limite de recherche du LDAP à plus de 1000 utilisateurs avec le fichier “extend_search_limit.ldif” ci-dessous

/opt/opendj/bin/ldapmodify --port 389 --bindDN "cn=Directory Manager" --bindPassword adminOpenDJ1 extend_search_limit.ldif

dn: uid=admin,ou=default,dc=digdash,dc=com

changetype: modify

add: ds-rlim-size-limit

ds-rlim-size-limit: 10000

MariaDB (Préconisé)

La base de données MariaDB va servir à stocker les éléments suivants : Commentaires, données d'audit et formulaires de saisies.

Cette base est plus pérenne qu'une base H2 c'est pourquoi nous préconisons son utilisation. Si vous possédez déjà une base de données sur laquelle Digdash peut écrire et lire alors passez à l'étape de configuration.

Cela fonctionne aussi avec Mysql ou Postgresql.

Installation

sudo apt install mariadb-server
#Démarrage de mariadb
sudo systemctl start mariadb
#Arrêt de mariadb
sudo systemctl stop mariadb
#Reload pour prise en compte de modification de configuration
sudo systemctl reload mariadb
sudo systemctl force-reload mariadb
#Connaître la version
mariadb --version

Lancer mysql_secure_installation, cela va permettre de sécuriser l'installation

sudo mysql_secure_installation

# Répondez oui à toutes les étapes

Activation du lancement automatique du service au démarrage

sudo systemctl enable mariadb

Configuration côté base de données

Nous allons créer une base pour chaque domaine et chaque webapps (par exemple prod_ddaudit et dev_ddaudit et ainsi de suite)

Dans l'exemple ci dessous, nous allons considérer qu'il n'existe qu'un environnement 'default'.

# Lancer mariadb
sudo mariadb -u root -p

# Créer toutes les bases de données nécessaires domaine_module.
CREATE DATABASE default_ddaudit;
CREATE DATABASE default_comment;
CREATE DATABASE default_ddentry;

# Créer un user pour chaque base de données domaine_user_module. Le mot de passe est un nouveau mot de passe à créer.
CREATE USER 'default_user_ddaudit'@'localhost' IDENTIFIED BY 'mynewpassword';
CREATE USER 'default_user_comment'@'localhost' IDENTIFIED BY 'mynewpassword';
CREATE USER 'default_user_ddentry'@'localhost' IDENTIFIED BY 'mynewpassword';

# Attribuer les droits aux utilisateurs sur les bonnes bases
GRANT ALL PRIVILEGES ON default_comment.* TO 'default_user_comment'@'localhost';
GRANT ALL PRIVILEGES ON default_ddaudit.* TO 'default_user_ddaudit'@'localhost';
GRANT ALL PRIVILEGES ON default_ddentry.* TO 'default_user_ddentry'@'localhost';

NGINX (Optionnel)

Nous utilisons Nginx comme reverse proxy.

Installation

sudo apt install nginx

Activation du lancement automatique du service au démarrage

sudo systemctl enable nginx

Configuration

Créer le fichier de configuration portant le nom de votre machine ou de votre environnement. Dans cet exemple, on utilise 001-digdash.

Dans le dossier /etc/nginx :

# Créer le fichier de conf
sudo vi /etc/nginx/sites-available/001-digdash.conf
# Ajouter le contenu suivant à l'intérieur.
# Remplacer .mondomaine.com pour server et les chemins Certificate(s) and private key, par vos informations.
upstream backend_tomcat{
    least_conn;
    server localhost:8080 fail_timeout=0;
}


server {
  listen [::]:80;
  listen      80;
  server_name *.mondomaine.com;

 # Redirect all non-https requests
 rewrite ^ https://$host$request_uri? permanent;

  error_log  /var/log/nginx/digdash.com.error_log  warn;
  access_log  /var/log/nginx/digdash.com.access.log;
}

server {
  listen [::]:443 ssl http2 default_server;
  listen      443 ssl http2 default_server;
  server_name *.mondomaine.com;

  client_max_body_size 4G;
  proxy_read_timeout 300;
  proxy_connect_timeout 300;
  proxy_send_timeout 300;

  error_log  /var/log/nginx/digdash.com.error_log  warn;
  access_log  /var/log/nginx/digdash.com.access.log;

 # Certificate(s) and private key
 ssl_certificate_key /emplacement/de/la/clé/macle.key;
  ssl_certificate /emplacement/du/certificat/moncertif.crt;

 #DigDash Management SSL
 include digdash_ssl_params;

   location / {
        include proxy_params;
        proxy_intercept_errors on;
        proxy_pass  http://backend_tomcat;
        proxy_cookie_path ~^/(.+)$ "/$1; HTTPOnly; Secure;samesite=none;";
  }
}

Puis créer un lien symbolique dans site enabled

sudo ln -s  /etc/nginx/sites-available/001-digdash.conf /etc/nginx/sites-enabled/001-digdash.conf

Créer le fichier digdash_ssl_params contenant la politique de securité.

sudo vi digdash_ssl_params
# Or, generate random dhparam
# openssl dhparam 4096 -out /etc/ssl/dhparam.pem
#ssl_dhparam /etc/ssl/dhparam.pem;

ssl_protocols TLSv1.3 TLSv1.2;

ssl_prefer_server_ciphers on;
ssl_ecdh_curve secp521r1:secp384r1;
ssl_ciphers EECDH+AESGCM:EECDH+AES256;

ssl_session_cache shared:TLS:2m;
ssl_buffer_size 4k;

# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001]; # Cloudflare

# Set HSTS to 365 days
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload' always;

Configuration DigDash après installation

Lancement de Digdash

  1. Redémarrer le service Tomcat.
sudo service tomcat9 restart
  1. Vérifier le déploiement des war dans le dossier d’installation home/digdash/webapps/default.
  2. Accéder à DigDash sur l’adresse suivante : http://localhost:8080/adminconsole.
    Le login / mot de passe sera admin / admin.

Page_accueil

Branchement de Digdash au serveur OpenDJ installé

 Aller dans Configuration -> Paramètres serveur-> Serveurs -> LDAP.

  • Port :  389
  • Utilisateur : uid=admin, ou=default,dc=digdash,dc=com
  • Mot de passe : mot de passe admin de OpenDJ

1675171192455-197.png

Cliquer ensuite sur Requêtes LDAP, et entrer "ou=default" dans le champ Arbre du domaine pour que les champs soient automatiquement renseignés comme ci-dessous.

1675171204379-473.png

Modification du mot de passe superviseur et création du compte LDAP

Modification du mot de passe superviseur

Aller dans Configuration  -> Paramètres serveur > Serveurs -> Serveur Enterprise et entrer un nouveau mot de passe dans le champ Mot de passe du Superviseur.

Serveur enterprise

Création du compte LDAP

  1. Aller dans Configuration -> Gestion des utilisateurs -> Utilisateurs
  2. Créer un nouvel utilisateur admin et lui attribuer tous les rôles et groupes d'autorisation.
  3. Dans le champ Mot de passe, entrer le nouveau mot de passe du superviseur défini ci-dessus.

Compte LDAP

Configuration des bases de données

Base de données Données d'audit

Aller dans Configuration -> Paramètres serveur -> Base de données -> Données d'audit et renseigner ici l’URL, l’utilisateur et le mot de passe.

URL jdbc:mariadb://localhost:3306/default_ddaudit

Cette solution permet de sécuriser l’accès à la base de données d'audit.

Données_audit

Base de données Commentaires

Aller dans Configuration -> Paramètres serveur -> Base de données -> Commentaires et renseigner ici l’URL, l’utilisateur et le mot de passe.

URL : jdbc:mariadb://localhost:3306/default_comment

Cette solution permet de sécuriser l’accès à la base de données de commentaires.

Commentaires

Base de données Saisie de données

Aller dans Configuration -> Paramètres serveur -> Base de données -> Saisie des données.

Cocher la case Activer la saisir de données et sélectionner une base de données dans la liste déroulante.

Saisie données

Il faut, au préalable, avoir créé une connexion à la base de données depuis le Gestionnaire des connexions aux de données dans le Studio. Consultez la page Gestionnaire des connexions aux bases de données pour plus de détails. 
Entrer default.user.ddentry pour l'utilisateur et le mot de passe défini à l'étape précédente. 
Le nom défini dans le champ Nom de connexion est celui qui apparaîtra dans la liste déroulante de sélection de la base de données.