Guide d'installation Ubuntu 20.04 - Production

Last modified by abertrand on 2024/02/19 09:16

Digdash

OpenJDK 11

Utiliser la version 11 de openjdk

# Installer la dernière version de openjdk
sudo apt install default-jdk

# Vérifier l'installation
java -version

Tomcat 9

Installation

sudo apt install tomcat9

Création de l'arborescence

# Emplacement des webapps
sudo mkdir -p /home/digdash/webapps/default/
# Répertoire de travail
sudo mkdir -p /home/digdash/appdata/default/
# Emplacement fichier .properties
sudo mkdir -p /etc/digdash/
# Emplacement des logs
sudo mkdir -p /var/log/digdash/

Modification des droits sur les dossiers

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

Configuration du server.xml

emplacement : /etc/tomcat9/server.xml

Emplacement des webapps

# Modifier la valeur appBase
<Host name="localhost"  appBase="webapps"

# par celle ci
<Host name="localhost"  appBase="/home/digdash/webapps/default"

Valve Reverse Proxy

# Ajouter cette valve dans l'élément Host vers la fin du fichier
<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>

Valve Log

# Ajouter cette valve dans l'élément Host vers la fin du fichier
<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" ></Valve>

Modification de la RAM

# Editer le fichier suivant
sudo nano /etc/default/tomcat9

# Remplacer la variable JAVA_OPTS existante par
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"

# Changer le paramètre 6G en fonction de la capacité de la machine en laissant au minimum 2G pour l OS

Activer l'autorisation d'écriture des logs par tomcat

# Créer le dossier dans /etc/systemd/system/
sudo mkdir -p /etc/systemd/system/tomcat9.service.d

# Créer le fichier
sudo nano /etc/systemd/system/tomcat9.service.d/logging-allow.conf

# Ajouter les lignes suivantes
[Service]
ReadWritePaths=/var/log/digdash/

#recharger la configuration des "daemon"
sudo systemctl daemon-reload

sudo systemctl restart tomcat9.service

Activation du lancement automatique du service au démarrage

sudo systemctl enable tomcat

Déploiement de Digdash Version 22R2

Télécharger la version de digdash

Dézipper la version que vous venez de télécharger

Fichiers properties

Placer les fichiers suivant dans le dossier /etc/digdash

Modifier le fichier digdash.properties précédemment copié

# Ajouter ces lignes au début du fichier

# Emplacement des logs
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

# Emplacement du appadata
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

Emplacement des war

  • Placer les éléments suivants dans le dossier /home/digdash/webapps/default
    • adminconsole.war
    • ddenterpriseapi.war
    • digdash_dashboard.war
    • studio.war
    • le dossier ROOT/

OpenLDAP

Configuration de OpenLDAP

Installation

Installer le serveur OpenLDAP 

#apt-get install slapd 

Configurer le serveur OpenLDAP 

#dpkg-reconfigure slapd

https://lh3.googleusercontent.com/kuVw6vwg0dBX91G_oCVT_-6gJ1Iqtw2GS1VGWnYiCFP80ELj3YImZCD8kJ_GWVd39bwxgqbYpQNO80uem9FfWfMsWVXtwoXJbUqkgPdFRiDoRABGs4tXoW8GJP8yOSiKArVJWuVYa9SSdbm9P6D79rfBWmF2Dgc1nlFrOusNRbOQnot11k7H3A2YH3KChttps://lh3.googleusercontent.com/HlAD2SiDuLzFaa-lXRwsClLB_KEEc48fq83ZWpS4M_BOJXBYbp4fCsZv98WQgJcpgtU8FG0sA-60BGi1i5WqliiL5s78PJX7lFOuLqiv5FWhlyh4yOWd-AkRjZ9UvhRXTya7zBqYq1RxEc_XexJWKlJhbHg06LkwbW-cD6DKn5h8-Ja6f5XQzXhUP2Skhttps://lh3.googleusercontent.com/WChWslEOBm3fBde7Le3t00BBkmul_p4vk-Nz0sg22sjaOnqKcY5DgBQHzISdK1n2O-v3sK9zll4TYHt-nNSqWsCS4F8rd4og30KYFb7iF7XVHvfMkHBP9k1Cb8r6c7drf-JQloUpGGbZr_odeh2EFhfltr5UEm1gx68U4uQ8h_v75TJx4hybY-MoCfeohttps://lh6.googleusercontent.com/IdWVYDyr8d9bzvznNQh06W_ua91GBYD053zvB-VSxVN5lHlA_kzXv7GZzw7xImOiIFTxLDulENPti8N18-IshVcBF6TUT15KduJEIy6cBYJiWMD3_h3Zh_WnYWuozzTaYo6iAf-G7cvlJHKay3cULzVtiz9iBnFPa-hmHX98rJlZgV8IzS8j8LrmAWBV

OpenLDAP sous Linux 1 

https://lh4.googleusercontent.com/8DezOhzViBoonenqO_QjnBQUfzRL0i3HNle8TseldiuwFHtcRQzevAQllvsEVTalwmrvWPWDqqahq73IXnmW9FInxKsJHq0c2Ztuj0qnw3CJp8y0z3mnOw28JP-nfRMahNvkQD3IE4N_xsSDzbsNx_xgsfBqJ852qo71r777I_8-xOmso_3f-Ho0hjcyhttps://lh6.googleusercontent.com/O_Q2mNs--gRanZRl3Ryc0yfhco3GDCnyT1iGoJ0UlhqCqkwt6hLYBV0DnD-sj1h6iT4YLv5TAdkWN7GhSUUJRhCHGFHHxt-beKAKWnjuDCcg3BGiwUkFOyPC3mE3d-jE7Yzo7ku_ehaXQT_hNrHY9TDDRjSzbqMC9yzfyKi172dyA9dg4AMYQTfogk46https://lh6.googleusercontent.com/fYAjODl-emZT-TT85zyKMvVWctj2T-WO1Z28n1vy5FO8_y8FcMVNIZ3Rlr0aW2EnHOOk5wtv6kCGr4x1d-DOgb4cg4fhaajy2Bokcq-9fY7GPy8cMkDGY08z-DSzzgicI-9mcdcSv_hrMLZm43z6uTqmEro4bi6krOh_lPFkfHIl4Uu3VvXq45CpYrdmhttps://lh4.googleusercontent.com/HbiuK9XJhF_aOaH-zV_ZJLXci1_erpB-JpDiuWDkdF1L2IZlUFhPWyEkiYY76yCcNYSvo3bSeIi-YDC-VRpJUiK7p09S5-vwV5QzYsTXsbayfzHxwj4mPwtlB6mj2RpxrG1wwE_GoJliu4PDjs9ad4MtltUR_TugNHABEFnz08T_PEQoKHAyKqn8gaoh

Démarrer les services OpenLDAP 

service slapd start 

Activer le lancement automatique du service au démarrage

sudo systemctl enable slapd

BackUp d’OpenLDAP

sudo slapcat -n 1 -l data.ldif

sudo slapcat -n 0 -l config.ldif

Configuration de OpenLDAP

Charger le module de password policy : ppolicy

sudo ldapmodify -a -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/ppolicy.ldif

Vérification 

sudo ldapsearch -Y EXTERNAL -s one -H ldapi:/// -b cn=schema,cn=config cn -LLL

Activer le module ppolicy module

vi ppolicy-module.ldif

dn: cn=module{0},cn=config
changeType: modify
add: olcModuleLoad
olcModuleLoad: ppolicy

sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f ppolicy-module.ldif

Vérification

sudo sudo ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config "(objectClass=olcModuleList)" olcModuleLoad -LLL


A Hasher les mots de passe et bloquer les compte utilisateur ppolicy-conf

vi ppolicy-conf.ldif

dn: olcOverlay=ppolicy,olcDatabase={1}mdb,cn=config
objectClass: olcPpolicyConfig
olcOverlay: ppolicy
olcPPolicyDefault: cn=ppolicy,dc=digdash,dc=com
olcPPolicyUseLockout: TRUE
olcPPolicyHashCleartext: TRUE

sudo ldapmodify -a -Y EXTERNAL -H ldapi:/// -f ppolicy-conf.ldif

Vérification

sudo ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config "(objectClass=olcPpolicyConfig)" -LLL

  1. olcPPolicyDefault: Indique un DN de configuration utilisé par défaut (cf. paragraphe suivant).
  2. olcPPolicyHashCleartext: Indique si les mots de passe doivent être cryptés systématiquement. Ce paramètre devrait être à TRUE sauf cas exceptionnel.
  3. olcPPolicyUseLockout: Indique si le message d’erreur retourné en cas de tentative de connexion à un compte verrouillé est un message spécifique à cet état de verrouillage (TRUE), ou un message général d’echec de connexion (FALSE). FALSE est plus sécurisé (pas d’indication à un éventuel pirate), TRUE est plus pratique.

Définition d’une politique de mot de passe

vi ppolicy-defaut.ldif

dn: cn=ppolicy,dc=digdash,dc=com
objectClass: device
objectClass: pwdPolicyChecker
objectClass: pwdPolicy
cn: ppolicy
pwdAllowUserChange: TRUE
pwdAttribute: userPassword
pwdCheckQuality: 1
pwdExpireWarning: 600
pwdFailureCountInterval: 30
pwdGraceAuthNLimit: 5
pwdInHistory: 5
pwdLockout: TRUE
pwdLockoutDuration: 900
pwdMaxAge: 0
pwdMaxFailure: 5
pwdMinAge: 0
pwdMinLength: 12
pwdMustChange: FALSE
pwdSafeModify: FALSE

sudo ldapmodify -x -a -H ldap://localhost -D cn=admin,dc=digdash,dc=com -W -f ppolicy-defaut.ldif

Vérification

sudo ldapsearch -Y EXTERNAL -H ldapi:/// -b dc=digdash,dc=com "(objectClass=pwdPolicy)" -LLL

Création d’une nouvelle organisation

vi neworganisation.ldif

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

ldapadd -H ldap://localhost -D cn=admin,dc=digdash,dc=com -x -W -f neworganisation.ldif

Création d’un utilisateur admin avec les bon droit

Le super admin bypass les politiques de mot de passe, s' il est définie comme compte de connexion dans Digdash les politiques de mot de passe LDAP ne seront pas appliquées!

vi 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

ldapadd -H ldap://localhost -D cn=admin,dc=digdash,dc=com -x -W -f create_user_admin.ldif

vi add_right_admin.ldif

dn: olcDatabase={1}mdb,cn=config

changetype: modify

add: olcAccess

olcaccess: {0}to dn.subtree=ou=default,dc=digdash,dc=com attrs=userpassword,shadowlastchange by dn.exact=uid=admin,ou=default,dc=digdash,dc=com write by self write by anonymous auth by * read

olcaccess: {1}to dn.subtree=ou=default,dc=digdash,dc=com  by dn.exact=uid=admin,ou=default,dc=digdash,dc=com write by * read

sudo ldapmodify -a -Y EXTERNAL -H ldapi:/// -f add_right_admin.ldif

Définir le mot de passe du nouvel admin

ldappasswd -H ldap://localhost -x -D "cn=admin,dc=digdash,dc=com" -W -S "uid=admin,ou=default,dc=digdash,dc=com"

Étendre la limite de 500 pour les recherches LDAP

vi extend_limit_search.ldif

dn: olcDatabase={-1}frontend,cn=config
changetype: modify
replace: olcSizeLimit
olcSizeLimit: 3000

sudo ldapmodify -a -Y EXTERNAL -H ldapi:/// -f extend_limit_search.ldif

Débloquer un compte bloqué manuellement

vi unlock.ldif

dn: uid=olivier,ou=users,dc=digdash,dc=com
changetype: modify
delete: pwdAccountLockedTime

ldapmodify -x -H ldap://localhost -D cn=admin,dc=digdash,dc=com -W -f unlock.ldif

Overriding password policy and unlocking accounts

Augmenter la mémoire de la base de données MDB

Nécessaire en cas d’erreur de type “MDB_MAP_FULL: Environment mapsize limit reached”

Créer le fichier de configuration “increase_mem.ldif” avec le contenu suivant :

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcDbMaxSize
olcDbMaxSize: 10000000000

olcDbMaxSize doit être exprimé en bytes. Dans l’exemple ci-dessus le réglages est à 10GB

Exécuter la commande :

ldapmodify -H ldapi:/// -Y EXTERNAL -f increase_mem.ldif

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
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';

Configuration côté Digdash

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

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

https://lh6.googleusercontent.com/sHRfXlPRTLTxdOGOHrPyBVt4F0HOd2Crn-OM8bOShsC1k8CifQmUyk2wM3kG1xUwD1m-9HPDE64pgcG8FkE6q-5dZ5A_LfxqKxieE5tSTsq7cKrdBwf-SN2_0gdGGuCVVQJCQnClNV3rb0sfUTWkttOKHA7V5fiCCalwJcnDhDSRUbI7AlthzOZzByamUQ

Faire la même manipulation pour la base de données : Données d’audit.

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 (ici documentation)

Dans le dossier /etc/nginx

# Créer le fichier de conf
sudo nano /etc/nginx/sites-available/001-digdash.conf
# Ajouter ce contenu à l'intérieur :
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 nano 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;