doc:chiffrer_les_donnees_sur_le_dd

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
doc:chiffrer_les_donnees_sur_le_dd [2021/04/16 13:26]
Indelog créée
doc:chiffrer_les_donnees_sur_le_dd [2023/11/11 18:45] (Version actuelle)
Ligne 5: Ligne 5:
 <WRAP center round important 60%> <WRAP center round important 60%>
 === Proof of concept ! === === Proof of concept ! ===
-La procédure indiqué ici est à l'état de **prototype**. Elle n'est pour le moment pas ni mature, ni validé et demande du travail pour être finalisé. **Ne l'appliquez en aucuns cas sur votre instance de production dans savoir ce que vous faites !**+La procédure indiquée ici est à l'état de **prototype**. Elle n'est pour le moment pas ni mature, ni validée et demande du travail pour être finalisée. **Ne l'appliquez en aucun cas sur votre instance de production dans savoir ce que vous faites !**
 </WRAP> </WRAP>
  
-Comme recommandé sur la [[medshake>documentation-technique/environnement-de-production-necessaire-a-medshakeehr.html#bases-installation-1| documentation officiel MedShake EHR/EDC sur la mise en production d'une instance]], il faudrait chiffrer l'intégralité des données stockées par Medshake sur le disque dure du serveur sur le quel l'instance est hébergée afin protéger les données des patients en cas de vol du disque dureUn solution efficace et commode et d'utiliser [[wpfr>LUKS]] et de chiffré la totalité des données du disque dure, cependant cette solution possède un problème assez gênant : //devoir aller saisir la clé de déchiffrement sur le serveur à chacun de ses redémarrage//, ce qui peut s'avérer problématique si il s'agit d'une machine dédié utilisé par plusieurs utilisateurs (n'ayant pas forcément les compétence pour déchiffrer la partition) et que la machine ne possède pas d'écran et de clavier branché en permanence.+Comme recommandé sur la [[medshake>documentation-technique/environnement-de-production-necessaire-a-medshakeehr.html#bases-installation-1| documentation officiel MedShake EHR/EDC sur la mise en production d'une instance]], il faudrait chiffrer l'intégralité des données stockées par Medshake sur le disque dur du serveur sur lequel l'instance est hébergée afin protéger les données des patients en cas de vol du disque durUne solution efficace et commode est d'utiliser [[wpfr>LUKS]] et de chiffrer la totalité des données du disque dur, cependant cette solution possède un problème assez gênant : //devoir aller saisir la clé de déchiffrement sur le serveur à chacun de ses redémarrages//, ce qui peut s'avérer problématique si il s'agit d'une machine dédiée utilisée par plusieurs utilisateurs (n'ayant pas forcément les compétences pour déchiffrer la partition) et que la machine ne possède pas d'écran et de clavier branché en permanence.
  
-Cette article propose une ébauche de solution pour ce problème en substituant la page la page normal d'accès à l'instance MedShake avec une page offrant un formulaire permettant de saisir une clé de déchiffrement des données si on détecte que celle-ci ne sont pas déchiffré. La validation de ce formulaire permet l'exécution d'un script chargé de déchiffrer et monter la partition de donnée si la clé saisis est correcte, puis de rendre la main à Medshake une fois l'opération réussi.+Cette article propose une ébauche de solution pour ce problème en substituant la page normale d'accès à l'instance MedShake par une page offrant un formulaire permettant de saisir une clé de déchiffrement des données si on détecte que celles-ci ne sont pas déchiffrées. La validation de ce formulaire permet l'exécution d'un script chargé de déchiffrer et monter la partition de données si la clé saisie est correcte, puis de rendre la main à Medshake une fois l'opération réussie.
  
-En gros cela cela ce passe comme ceci :+En gros cela se passe comme ceci :
  
 <uml> <uml>
Ligne 20: Ligne 20:
 :Tentative d'accès à l'instance MedShake.; :Tentative d'accès à l'instance MedShake.;
  
-if (Données Medshake accessible ?\n//(conteneur LUKS déchiffré et partions de donnée monté)//) then (Non) +if (Données Medshake accessible ?\n//(conteneur LUKS déchiffré et partition de données montée)//) then (Non) 
-   repeat :Redirection vers le formulaire\nde saisis de clé de déchiffrage.; +   repeat :Redirection vers le formulaire\nde saisi de la clé de déchiffrage.; 
-      :Validation du formulaire.\n//(Exécution du script de déchiffrement et montage de la partition de donnée)//;+      :Validation du formulaire.\n//(Exécution du script de déchiffrement et montage de la partition de données)//;
     repeat while (Données accessibles ?) is (Non) not (Oui)     repeat while (Données accessibles ?) is (Non) not (Oui)
 else (Oui) else (Oui)
Ligne 33: Ligne 33:
 </uml> </uml>
  
-Dans ce cas nous ne chiffrons pas l'entièreté du disque dure mais uniquement une partition qui contiendra toutes les données utilisées par MedShake comprenant :+Dans ce cas nous ne chiffrons pas l'entièreté du disque dur mais uniquement une partition qui contiendra toutes les données utilisées par MedShake comprenant :
  
-    * Les fichier de l'installation Medshake (on inclus tout : le ''homeDirectory'', ''webDirectory'', ''storageLocation'', ''workingDirectory'', le code, etc...). +    * Les fichiers de l'installation Medshake (on inclut tout : le ''homeDirectory'', ''webDirectory'', ''storageLocation'', ''workingDirectory'', le code, etc...). 
-    * Les fichier de la base de donné Mysql (le ''datadir'').+    * Les fichiers de la base de données Mysql (le ''datadir'').
  
 <WRAP center round important 60%> <WRAP center round important 60%>
-**Pour être réellement efficace il ne faut pas utiliser de partition //swap// sur le disque dure avec la méthode décrite ici. En effet celle ci peut éventuellement contenir des information provenant de la mémoire vive de l'ordinateur, y compris la clé de déchiffrage LUKS**. Il est donc nécessaire de disposer d'un serveur avec suffisamment de mémoire vive (4GB serai bien pour 1 à 5 utilisateurs) on peut aussi de jeter un œil du coté de [[wpfr>ZRam]] (voir aussi le paquet Debian ''zram-tools'').+**Pour être réellement efficace il ne faut pas utiliser de partition //swap// sur le disque dur avec la méthode décrite ici. En effet celle-ci peut éventuellement contenir des informations provenant de la mémoire vive de l'ordinateur, y compris la clé de déchiffrage LUKS**. Il est donc nécessaire de disposer d'un serveur avec suffisamment de mémoire vive (4GB serait bien pour 1 à 5 utilisateurs) on peut aussi jeter un œil du côté de [[wpfr>ZRam]] (voir aussi le paquet Debian ''zram-tools'').
  
 Il faudrait aussi placer le ''/tmp'' en mémoire vive comme ceci : Il faudrait aussi placer le ''/tmp'' en mémoire vive comme ceci :
Ligne 46: Ligne 46:
 cp -a /usr/share/systemd/tmp.mount /etc/systemd/system/ cp -a /usr/share/systemd/tmp.mount /etc/systemd/system/
 systemctl enable tmp.mount systemctl enable tmp.mount
-rm -rf /tmp/* # Purge des fichier actuel du /tmp pour ne pas qu'il reste présent sur le DD+rm -rf /tmp/* # Purge les fichiers actuels du /tmp pour ne pas qu'ils restent présents sur le DD
 reboot # redémarre l'ordinateur reboot # redémarre l'ordinateur
 </code> </code>
Ligne 52: Ligne 52:
  
 <WRAP center round info 60%> <WRAP center round info 60%>
-D'autres approche du problèmes existent comme celle ci : [[https://opensource.com/article/20/11/nbde-linux]] qui est plus lourdes et complexe à mettre en place. De plus elle demande une configuration particulière sur les clients. Cette solution se veux une alternative plus simple à mettre en place et plus facilement adaptable (elle ne nécessite pas l'utilisation de d'outils particulière et repose sur une configuration Apache et des script bash et php qui peuvent facilement êtres adaptés au besoins). Elle ne nécessite pas non plus d'opération particulière sur les clients.+D'autres approches du problèmes existent comme celle-ci : [[https://opensource.com/article/20/11/nbde-linux]] qui est plus lourde et complexe à mettre en place. De plus elle demande une configuration particulière sur les clients. Cette solution se veut une alternative plus simple à mettre en place et plus facilement adaptable (elle ne nécessite pas l'utilisation d'outils particuliers et repose sur une configuration Apache et des scripts bash et php qui peuvent facilement êtres adaptés au besoin). Elle ne nécessite pas non plus d'opération particulière sur les clients.
 </WRAP> </WRAP>
  
-===== Pré requis et contrainte =====+===== Pré-requis et contrainte =====
  
 ==== Disposer d'un volume LUKS ==== ==== Disposer d'un volume LUKS ====
  
-Le cas de la création du volume LUKS n'est pas traité ici. Il peut être crée par l'installateur Debian au moment de l'installation du système, sinon je vous renvois au documentation déjà existantes :+Le cas de la création du volume LUKS n'est pas traité ici. Il peut être crée par l'installateur Debian au moment de l'installation du système, sinon je vous renvois aux documentations déjà existantes :
  
     * [[https://wiki.debian.org/Cryptsetup]]     * [[https://wiki.debian.org/Cryptsetup]]
     * [[https://doc.ubuntu-fr.org/cryptsetup]]     * [[https://doc.ubuntu-fr.org/cryptsetup]]
  
-==== On considère aussi les point suivant comme étant valide ====+==== On considère aussi les points suivants comme étant valides ====
  
     * Nous utilisons un OS Debian 10     * Nous utilisons un OS Debian 10
     * ''cryptsetup'' est présent sur le système     * ''cryptsetup'' est présent sur le système
     * ''sudo'' est présent sur le système     * ''sudo'' est présent sur le système
-    * ''php-fpm'' doit être installé et doit être utilisé à la place du *mod_php* d'Apache (raison expliquée un peut plus bas). +    * ''php-fpm'' doit être installé et doit être utilisé à la place du *mod_php* d'Apache (raison expliquée un peu plus bas). 
-    * Les modules Apache2 suivant sont activé (pour pouvoir fonctionner avec *php-fpm*)  :+    * Les modules Apache2 suivants sont activés (pour pouvoir fonctionner avec *php-fpm*)  :
         * ''proxy'' (''a2enmod proxy'')         * ''proxy'' (''a2enmod proxy'')
         * ''proxy_fcgi'' (''a2enmod proxy_fcgi'')         * ''proxy_fcgi'' (''a2enmod proxy_fcgi'')
     * Ici le volume LUKS une fois ouvert est identifié comme ''/dev/mapper/vg0-cypted''.     * Ici le volume LUKS une fois ouvert est identifié comme ''/dev/mapper/vg0-cypted''.
-        * Nous démarrons avec celui ci monté dans ''/srv/medshake/'' +        * Nous démarrons avec celui-ci monté dans ''/srv/medshake/'' 
-        * Il ne doit pas y avoir d'entré dans le ''/etc/crypttab''+        * Il ne doit pas y avoir d'entrée dans le ''/etc/crypttab''
  
 ==== Point à travailler ==== ==== Point à travailler ====
  
     * Mise en route du compagnon Apicrypt ?     * Mise en route du compagnon Apicrypt ?
-    * Service et donné Orthanc ? +    * Service et données Orthanc ? 
-    * Actuellement les logs Apache ne sont pas sur la partition chiffré ? Est t'il utile de les y placer ?+    * Actuellement les logs Apache ne sont pas sur la partition chiffrée ? Est-t'il utile de les y placer ?
     * D’autres cas de figures à traiter ?     * D’autres cas de figures à traiter ?
  
Ligne 89: Ligne 89:
  
 <WRAP center round important 60%> <WRAP center round important 60%>
-Pour le moment on considère que la seul application présente sur le serveur qui utilise la base de donnée MariaDB est MedShake. //Pour des raison de simplicité de mise en place nous modifions le ''datadir'' du service "de base" pour le placer sur notre volume chiffré, comme ce volume chiffré ne sera pas accessible tout de suite au démarrage du système le service MariaDB ne démarrera pas automatiquement avec le système. Cela le rendra inaccessible pour d'autres éventuel applications.//+Pour le moment on considère que la seule application présente sur le serveur qui utilise la base de données MariaDB est MedShake. //Pour des raisons de simplicité de mise en place nous modifions le ''datadir'' du service "de base" pour le placer sur notre volume chiffré, comme ça le volume chiffré ne sera pas accessible tout de suite au démarrage du systèmele service MariaDB ne démarrera pas automatiquement avec le système. Cela le rendra inaccessible pour d'autres éventuelles applications.//
 </WRAP> </WRAP>
  
 <WRAP center round important 60%> <WRAP center round important 60%>
-Cette solution ne fonctionne pas avec le //mod_php// d'Apache. Quant le script php chargé de proposé la validation de la saisis de la clé de déchiffrement des données (''/usr/local/lib/medshake/www/index.php'') est exécuté par le //mod_php// d'Apache et que celui-ci appel le script bash chargé de monté la partition de données chiffré (''/usr/local/lib/medshake/uncrypt.sh''), à l’intérieur de l’environnement du script bash semble tout semble normal (le volume chiffré est bien monté et on peut accéder au données qu'il contient). Par contre pour le reste du système le volume ne semble pas monté (pas d'entré dans le ''/etc/mtab'' et l'emplacement du point de montage reste vide). //Je ne trouve pour le moment pas d'explication à ce comportement étrange...// Par contre aucun problème si on exécute le script php avec php-fpm.+Cette solution ne fonctionne pas avec le //mod_php// d'Apache. Quant le script phpchargé de proposé la validation de la saisie de la clé de déchiffrement des données (''/usr/local/lib/medshake/www/index.php'') est exécuté par le //mod_php// d'Apache et que celui-ci appelle le script bash chargé de monter la partition de données chiffrées (''/usr/local/lib/medshake/uncrypt.sh''), à l’intérieur de l’environnement du script bash tout semble normal (le volume chiffré est bien monté et on peut accéder aux données qu'il contient). Par contre pour le reste du systèmele volume ne semble pas monté (pas d'entrée dans le ''/etc/mtab'' et l'emplacement du point de montage reste vide). //Je ne trouve pas, pour le momentd'explication à ce comportement étrange...// Par contre aucun problème si on exécute le script php avec php-fpm.
 </WRAP> </WRAP>
  
 ===== Étape 1 : Récupération et mise en place des scripts additionnels ===== ===== Étape 1 : Récupération et mise en place des scripts additionnels =====
  
-Cette méthode requiert l'utilisation deux deux petit script :+Cette méthode requiert l'utilisation deux petits scripts :
  
-    * Un script php chargé de présenté un formulaire web pour demander aux utilisateurs tentant de se connecter à l'instance MedShake la saisis de la clé de déchiffrement des données si le volume LUKS n'est pas encore déverrouillé et monté au bon endroit. +    * Un script php chargé de présenter un formulaire web pour demander aux utilisateurs tentant de se connecter à l'instance MedShake la saisie de la clé de déchiffrement des données si le volume LUKS n'est pas encore déverrouillé et monté au bon endroit. 
-    * Un script bash appelé par le script php à la validation du formulaire et lancé avec les droits //root// et dont le but est d'ouvrir et monté le volume LUKS ainsi que d'effectuer d'autres opération comme démarrer le service MariaDB une fois le //datadir// accessible.+    * Un script bash appelé par le script php à la validation du formulaire et lancé avec les droits //root// et dont le but est d'ouvrir et de monter le volume LUKS ainsi que d'effectuer d'autres opérations comme démarrer le service MariaDB une fois le //datadir// accessible.
  
-Commençons par créer un endroit adapté pour y placer nos script :+Commençons par créer un endroit adapté pour y placer nos scripts :
  
 <code bash> <code bash>
Ligne 122: Ligne 122:
 # Paramètre supplémentaire pour la commande 'cryptsetup' # Paramètre supplémentaire pour la commande 'cryptsetup'
 CRYPT_SETUP_OPEN_MORE_PARAM="--type luks" CRYPT_SETUP_OPEN_MORE_PARAM="--type luks"
-Non du fichier périphérique contenant le volume LUKS chiffré +Nom du fichier périphérique contenant le volume LUKS chiffré 
 CRYPTED_DEV="/dev/sdXY" # /!\ MODIFIER /dev/sdXY PAR LE NOM DU PÉRIPHÉRIQUE SUR VOTRE SYSTÈME !!! CRYPTED_DEV="/dev/sdXY" # /!\ MODIFIER /dev/sdXY PAR LE NOM DU PÉRIPHÉRIQUE SUR VOTRE SYSTÈME !!!
-Non du volume LUKS une fois déverrouillé+Nom du volume LUKS une fois déverrouillé
 UNCRYPTED_DEV="meduncrypted" UNCRYPTED_DEV="meduncrypted"
-# Emplacement pour le montage de la partition des données déchiffrés+# Emplacement pour le montage de la partition des données déchiffrées
 UNCRYPTED_MNT_PT="/srv/medshake" UNCRYPTED_MNT_PT="/srv/medshake"
 # Option de montage supplémentaire pour le périphérique déchiffré # Option de montage supplémentaire pour le périphérique déchiffré
 UNCRYPTED_MNT_OPT="" UNCRYPTED_MNT_OPT=""
-Non du service pour lancer la base de donnée MariaDB+Nom du service pour lancer la base de données MariaDB
 MYSQLD_SERVICE="medshakedb" MYSQLD_SERVICE="medshakedb"
  
Ligne 155: Ligne 155:
 if [ ! -d "${UNCRYPTED_MNT_PT}" ] if [ ! -d "${UNCRYPTED_MNT_PT}" ]
 then then
- echo "ERR: Le point de montage pour (${UNCRYPTED_MNT_PT}) n'éxiste pas"+ echo "ERR: Le point de montage pour (${UNCRYPTED_MNT_PT}) n'existe pas"
  exit 68  exit 68
 fi fi
Ligne 189: Ligne 189:
  exit 71  exit 71
  else  else
- echo "INF: monte /dev/mapper/${UNCRYPTED_DEV} sur ${UNCRYPTED_MNT_PT}"+ echo "INF: monter /dev/mapper/${UNCRYPTED_DEV} sur ${UNCRYPTED_MNT_PT}"
  fi  fi
 else else
Ligne 197: Ligne 197:
 if [ -f "/var/run/mysqld/${MYSQLD_SERVICE}.pid" ] if [ -f "/var/run/mysqld/${MYSQLD_SERVICE}.pid" ]
 then then
- echo "WARN: ${MYSQLD_SERVICE} est déjà lancé (le redémare)"+ echo "WARN: ${MYSQLD_SERVICE} est déjà lancé (le redémarrer)"
  systemctl restart "${MYSQLD_SERVICE}.service"  systemctl restart "${MYSQLD_SERVICE}.service"
  if [ $? -gt 0 ]  if [ $? -gt 0 ]
Ligne 216: Ligne 216:
 </file> </file>
  
-Une fois récupérer et placer dans ''/usr/local/lib/medshake/uncrypt.sh'' le rendre exécutable :+Une fois récupéré et placé dans ''/usr/local/lib/medshake/uncrypt.sh'' le rendre exécutable :
  
 <code bash> <code bash>
Ligne 222: Ligne 222:
 </code> </code>
  
-Dans notre cas, le script sera appelé par l'utilisateur ''www-data'' et obtiendra les droits //root// via ''sudo''. Il faut donc disposer d'une entrée //sudoers// adapté pour ne pas avoir de demande de mot de passe par ''sudo'' :+Dans notre cas, le script sera appelé par l'utilisateur ''www-data'' et obtiendra les droits //root// via ''sudo''. Il faut donc disposer d'une entrée //sudoers// adaptée pour ne pas avoir de demande de mot de passe par ''sudo'' :
  
 <file /etc/sudoers.d/medshake> <file /etc/sudoers.d/medshake>
Ligne 245: Ligne 245:
  */  */
  
-// Emplacement où doivent êtres monté les données déchiffrés de MedShake+// Emplacement où doivent êtres montées les données déchiffrés de MedShake
 define('MEDPATH', '/srv/medshake/'); define('MEDPATH', '/srv/medshake/');
 // Script bash des opérations de déchiffrage des données MedShake // Script bash des opérations de déchiffrage des données MedShake
Ligne 251: Ligne 251:
 // Emplacement vers l’exécutable sudo // Emplacement vers l’exécutable sudo
 define('SUDO_PATH', '/usr/bin/sudo'); define('SUDO_PATH', '/usr/bin/sudo');
-// Log pour les action du script+// Log pour les actions du script
 // VOIR ICI EN CAS DE PB D’EXÉCUTION DU SCRIPT // VOIR ICI EN CAS DE PB D’EXÉCUTION DU SCRIPT
 define('UNCRYPT_SCRIPT_LOG', '/tmp/medshake_unlock_script.log'); define('UNCRYPT_SCRIPT_LOG', '/tmp/medshake_unlock_script.log');
Ligne 259: Ligne 259:
  */  */
  
-// Si on essai d'appeler le script alors que les données sont déjà accessible+// Si on essait d'appeler le script alors que les données sont déjà accessibles
 // on redirige vers l'url principale // on redirige vers l'url principale
 if (file_exists(MEDPATH.'.uncrypted')) if (file_exists(MEDPATH.'.uncrypted'))
Ligne 270: Ligne 270:
 $error = 0; $error = 0;
  
-// Exécute les action suvantes si on fournis la clé de déchiffrage des données+// Exécute les actions suivantes si on fournit la clé de déchiffrage des données
 if (!empty($_POST['uncryptkey'])) if (!empty($_POST['uncryptkey']))
 { {
- // Appel le script de bash d'ouverture du contenuer LUKS de montage de montage du volume avec sudo + // Appelle le script de bash d'ouverture du conteneur LUKS de montage du volume avec sudo 
-        // Requiet un entrées sudoers adapté pour ne pas avoir la demande de mot de passe+        // Requière une entrée sudoers adaptée pour ne pas avoir la demande de mot de passe
  exec(SUDO_PATH.' '.UNCRYPT_SCRIPT.' '.escapeshellarg($_POST['uncryptkey']), $res, $res_code);  exec(SUDO_PATH.' '.UNCRYPT_SCRIPT.' '.escapeshellarg($_POST['uncryptkey']), $res, $res_code);
  $error = $res_code;  $error = $res_code;
Ligne 391: Ligne 391:
 </file> </file>
  
-===== Étape 2 : Configurer dépalcer le ''datadir'' MariaDB =====+===== Étape 2 : Configurer déplacer le ''datadir'' MariaDB =====
  
-Vu que nous voulons que les fichier de la base de données MariaDB se trouvent sur la partition chiffré il va falloir adapter la configuration du service. Pour cela il faut modifier le fichier ''/etc/mysql/mariadb.conf.d/50-server.cnf'' et pour le paramètre ''datadir'' remplacer ''/var/lib/mysql/'' par ''/srv/medshake/db/'' :+Vu que nous voulons que les fichiers de la base de données MariaDB se trouvent sur la partition chiffrée il va falloir adapter la configuration du service. Pour cela il faut modifier le fichier ''/etc/mysql/mariadb.conf.d/50-server.cnf'' et pour le paramètre ''datadir'' remplacer ''/var/lib/mysql/'' par ''/srv/medshake/db/'' :
  
 <code bash> <code bash>
Ligne 405: Ligne 405:
 </code> </code>
  
-Et copier les fichier de la base de donnée dans le nouvel emplacement :+Et copier les fichiers de la base de données dans le nouvel emplacement :
  
 <code bash> <code bash>
Ligne 412: Ligne 412:
  
 <WRAP center round important 60%> <WRAP center round important 60%>
-Si l'opération est effectué sur un serveur qui contiens déjà des donné de patient il est fortement recommandé d'effacer proprement des données avec un outil tel que ''secure-delete'' :+Si l'opération est effectuée sur un serveur qui contient déjà des données de patients, il est fortement recommandé d'effacer proprement des données avec un outil tel que ''secure-delete'' :
  
 <code bash> <code bash>
Ligne 427: Ligne 427:
  
 <WRAP center round info 60%> <WRAP center round info 60%>
-Le service ''mariadb.service'' ne doit pas être démarré automatiquement car les fichier de la base de donnée situé dans ''/srv/medshake/db/'' ne seront pas accessibles au démarrage vu que le volume chiffré est monté après la saisis de la clé de déchiffrement par l'utilisateur.+Le service ''mariadb.service'' ne doit pas être démarré automatiquement car les fichiers de la base de données situés dans ''/srv/medshake/db/'' ne seront pas accessibles au démarrage vu que le volume chiffré est monté après la saisie de la clé de déchiffrement par l'utilisateur.
 </WRAP> </WRAP>
  
Ligne 462: Ligne 462:
 </file> </file>
  
-Redémarer le service *php-fpm* :+Redémarrer le service *php-fpm* :
  
 <code bash> <code bash>
Ligne 470: Ligne 470:
 ==== Configuration *Apache* ==== ==== Configuration *Apache* ====
  
-Nous avons besoin d'utiliser une configuration Apache alternative pour MedShake utilisant //php-fpm// et renvoyant vers la page de déchiffrage du mot de passe si la partition de donnée pour MedShake n'est pas accessible :+Nous avons besoin d'utiliser une configuration Apache alternative pour MedShake utilisant //php-fpm// et renvoyant vers la page de déchiffrage du mot de passe si la partition de données pour MedShake n'est pas accessible :
  
 <file apache /etc/apache2/sites-enabled/medshake.conf> <file apache /etc/apache2/sites-enabled/medshake.conf>
Ligne 502: Ligne 502:
     Header always set Strict-Transport-Security "max-age=0; includeSubDomains"     Header always set Strict-Transport-Security "max-age=0; includeSubDomains"
  
-    # Fichier de log dédié avec un format compatible avec le lecteur de log intégré à Medshake+    # Fichier de log dédié avec un format compatible avec le lecteur de log intégré  
 +    # à Medshake
     CookieName apacheLogUserID     CookieName apacheLogUserID
     CookieDomain .mon-medshake.fr     CookieDomain .mon-medshake.fr
Ligne 518: Ligne 519:
          
     <Directory /srv/medshake/EHR/public_html/>     <Directory /srv/medshake/EHR/public_html/>
-        # uniquement les clients du réseau local (modfier 192.168.1.0/24 en fonction de la configuration de votre réseau local)+        # uniquement les clients du réseau local (modfier 192.168.1.0/24 en fonction  
 +        # de la configuration de votre réseau local)
  Require ip 192.168.1.0/24  Require ip 192.168.1.0/24
         Require local         Require local
Ligne 524: Ligne 526:
    
     #     #
-    # Si le fichier /srv/medshake/.uncrypted n'existe pas c'est que les donnée MedShake n'ont pas été déchiffrés +    # Si le fichier /srv/medshake/.uncrypted n'existe pas c'est que les données  
-    # On redirige donc vers la page qui permet la saisis de la clé de déchiffrement+    # MedShake n'ont pas été déchiffrés 
 +    # On redirige donc vers la page qui permet la saisie de la clé de déchiffrement
     #     #
     RewriteCond /srv/medshake/.uncrypted !-f     RewriteCond /srv/medshake/.uncrypted !-f
     RewriteRule ^(.*)$ unix:/run/php/php-fpm-medshake.sock|fcgi://localhost/usr/local/lib/medshake/www/index.php [P,L]     RewriteRule ^(.*)$ unix:/run/php/php-fpm-medshake.sock|fcgi://localhost/usr/local/lib/medshake/www/index.php [P,L]
    
-    # Pass tous les ficher php existants à php-fpm+    # Passe tous les fichers php existants à php-fpm
     RewriteCond /srv/medshake/.uncrypted -f     RewriteCond /srv/medshake/.uncrypted -f
     RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} -f     RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} -f
Ligne 545: Ligne 548:
     RewriteRule ^(/phonecapture/)(.*)$ unix:/run/php/php-fpm-medshake.sock|fcgi://localhost/%{DOCUMENT_ROOT}/phonecapture.php [P]     RewriteRule ^(/phonecapture/)(.*)$ unix:/run/php/php-fpm-medshake.sock|fcgi://localhost/%{DOCUMENT_ROOT}/phonecapture.php [P]
  
-    # Route toutes les autres destination ou le fichier n'existe pas à index.php+    # Route toutes les autres destinations où le fichier n'existe pas à index.php
     RewriteCond /srv/medshake/.uncrypted -f     RewriteCond /srv/medshake/.uncrypted -f
     RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f     RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f
Ligne 551: Ligne 554:
  
     <Location />     <Location />
-        # uniquement les clients du réseau local (modifier 192.168.1.0/24 en fonction de la configuration de votre réseau local)+        # uniquement les clients du réseau local (modifier 192.168.1.0/24 en fonction  
 +        # de la configuration de votre réseau local)
  Require ip 192.168.1.0/24  Require ip 192.168.1.0/24
         Require local         Require local
Ligne 559: Ligne 563:
         # Ces ressources peuvent êtres mise en cache         # Ces ressources peuvent êtres mise en cache
         Header setifempty Cache-Control "must-revalidate"         Header setifempty Cache-Control "must-revalidate"
-        # Fix un bug présent dans le version de apache utilisé dans Debian 10 (2.4.38) +        # Fixe un bug présent dans le version de apache utilisé dans Debian 10(2.4.38) 
-        # qui gènère une entête http Etag mal formé et empéche un retrour 304 +        # qui gènère une entête http Etag mal formée et empêche un retrour 304 
-        # quant la ressource est en cache.+        # quand la ressource est en cache.
         # voire https://bz.apache.org/bugzilla/show_bug.cgi?id=45023#c22         # voire https://bz.apache.org/bugzilla/show_bug.cgi?id=45023#c22
         RequestHeader edit "If-None-Match" '^"((.*)-gzip)"$' '"$1", "$2"'         RequestHeader edit "If-None-Match" '^"((.*)-gzip)"$' '"$1", "$2"'
  
-        # uniquement les clients du réseau local (modfier 192.168.1.0/24 en fonction de la configuration de votre réseau local)+        # uniquement les clients du réseau local (modfier 192.168.1.0/24 en fonction  
 +        # de la configuration de votre réseau local)
  Require ip 192.168.1.0/24  Require ip 192.168.1.0/24
         Require local         Require local
Ligne 594: Ligne 599:
  
 <WRAP center round important 60%> <WRAP center round important 60%>
-Ne pas oublier du supprimer des ancienne données de manière sécurisé après leur déplacements.+Ne pas oublier de supprimer des ancienne données de manière sécurisée après leurs déplacements.
 <code bash> <code bash>
 srm /home/EHR/ srm /home/EHR/
Ligne 600: Ligne 605:
 </WRAP> </WRAP>
  
-**Ne pas oublier de modifier le fichier de configuration pour MedShake (''/srv/medshake/EHR/config/config.yml''affin de mettre à jour les paramètres (''webDirectory'', ''stockageLocation'', ''backupLocation'', ''workingDirectory'', ''templatesFolder'') avec le nouvel emplacement de l'instance.+**Ne pas oublier de modifier le fichier de configuration pour MedShake (''/srv/medshake/EHR/config/config.yml''afin de mettre à jour les paramètres (''webDirectory'', ''stockageLocation'', ''backupLocation'', ''workingDirectory'', ''templatesFolder'') avec le nouvel emplacement de l'instance.
  
 ==== Procéder à une nouvelle installation ==== ==== Procéder à une nouvelle installation ====
Ligne 606: Ligne 611:
 Utiliser la méthode classique mais la faire dans ''/srv/medshake/EHR/''. Utiliser la méthode classique mais la faire dans ''/srv/medshake/EHR/''.
  
-===== Étape Final =====+===== Étape Finale =====
  
 ==== Création du fichier ''/srv/medshake/.uncrypted'' ==== ==== Création du fichier ''/srv/medshake/.uncrypted'' ====
  
-Le fichier "témoin" ''/srv/medshake/.uncrypted̉'' est utilisé pour indiqué à Apache si les données chiffrés sont bien accessibles ou non.+Le fichier "témoin" ''/srv/medshake/.uncrypted̉'' est utilisé pour indiquer à Apache si les données chiffrées sont bien accessibles ou non.
  
 <code bash> <code bash>
-echo -e '!!! NE PAS SUPRIMER !!!\nCe fichier est utilisé pour vérifier que les données MedShake sont bien déchiffré.' > /srv/medshake/.uncrypted +echo -e '!!! NE PAS SUPPRIMER !!!\nCe fichier est utilisé pour vérifier que les données MedShake sont bien déchiffrées.' > /srv/medshake/.uncrypted 
 chmod 444 /srv/medshake/.uncrypted chmod 444 /srv/medshake/.uncrypted
 </code> </code>
  
-==== Substitue ''/srv/medshake/EHR/public_html'' quant les données ne sont pas déchiffrés ====+==== Substitue ''/srv/medshake/EHR/public_html'' quand les données ne sont pas déchiffrés ====
  
-Au moment ou le serveur démarre la partition contentant les données chiffrés n'est pas encore monté dans ''/srv/medshake/'' et donc le dossier ''/srv/medshake/EHR/public_html/'' n'est pas présent or il est définit comme ''DocumentRoot'' dans la configuration *Apache* et celui-ci refusera de démarrer si il ne le trouve pas. Il faut donc créer un dossier de substitution à l'emplacement du vrais avant que les données chiffrés ne soient monté.+Au moment où le serveur démarre la partition contentant les données chiffrées, elle n'est pas encore montée dans ''/srv/medshake/'' et donc le dossier ''/srv/medshake/EHR/public_html/'' n'est pas présent or il est définit comme ''DocumentRoot'' dans la configuration *Apache* et celui-ci refusera de démarrer si il ne le trouve pas. Il faut donc créer un dossier de substitution à l'emplacement du vrai avant que les données chiffrées ne soient montées.
  
-Pour commencer il faut démonté la partitions des données chiffrés :+Pour commencer il faut démonter la partition des données chiffrés :
  
 <code bash> <code bash>
-Stoper ces service évite que des fichier présent sur la partition soient ouvert ce qui empêcherai de démontage de la partition+Stopper ces services évite que des fichiers présents sur la partition soient  
 +# ouverts ce qui empêcherait le démontage de la partition
 systemctl stop medshakedb.service systemctl stop medshakedb.service
 systemctl stop php7.3-fpm.service systemctl stop php7.3-fpm.service
Ligne 637: Ligne 643:
 </code> </code>
  
-Il ne reste plus qu'redémarrer le serveur et à accéder à son instance MedShake via le navigateur web. Normalement la page permettant de déchiffrer les données devrait se substituer à l'instance MedShake. Une fois la bonne clé de déchiffrement saisis l'instance MedShake devrait être accessible.+Il ne reste plus qu'à redémarrer le serveur et à accéder à son instance MedShake via le navigateur web. Normalement la page permettant de déchiffrer les données devrait se substituer à l'instance MedShake. Une fois la bonne clé de déchiffrement saisie l'instance MedShake devrait être accessible.
  
 +{{tag>securite chiffrement installation}}
  • doc/chiffrer_les_donnees_sur_le_dd.1618572403.txt.gz
  • Dernière modification: 2021/04/16 13:26
  • de Indelog