Différences

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

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
elearning:workbooks:debian:11:sec:l109 [2025/12/04 09:27] adminelearning:workbooks:debian:11:sec:l109 [2025/12/04 09:32] (Version actuelle) admin
Ligne 1: Ligne 1:
 ~~PDF:LANDSCAPE~~ ~~PDF:LANDSCAPE~~
- 
-OPENVPN 
-DNS et cryptographie : DNSSEC 
  
 Version : **2026.01** Version : **2026.01**
Ligne 8: Ligne 5:
 Dernière mise-à-jour : ~~LASTMOD~~ Dernière mise-à-jour : ~~LASTMOD~~
  
-======LDF407 Cryptologie======+======LDF409 Gestion de la Sécurité de Docker======
  
-=====Contenu du module=====+=====Contenu du Module=====
  
-  * **LDF407 Cryptologie** +  * **LDF409 Gestion de la Sécurité de Docker** 
-    * Contenu du module +    * Contenu du Module 
-    * Le Problématique +    * Présentation de Docker 
-    * LAB #1 - Utilisation de tcpdump +    * LAB #1 - Travailler avec Docker 
-      * 1.1 - Utilisation +      * 1.1 - Installer docker 
-        L'option -i +      1.2 Démarrer un Conteneur 
-        L'option -x +      1.3 Consulter la Liste des Conteneurs et Images 
-        L'option -X +      1.4 - Rechercher une Image dans un Dépôt 
-        L'option -w +      * 1.5 - Supprimer un Conteneur d'une Image 
-        L'option -v +      * 1.6 Créer une Image à partir d'un Conteneur Modifié 
-      * 1.Filtrage à l'écoute +      1.7 - Supprimer une Image 
-    Les Contre-Mesures +      * 1.8 - Créer un Conteneur avec un Nom Spécifique 
-      * Introduction à la cryptologie +      * 1.9 - Exécuter une Commande dans un Conteneur 
-        Définitions +      * 1.10 - Injecter des Variables d'Environnement dans un Conteneur 
-        Algorithmes à clé secrète +      * 1.11 Modifier le Nom d'Hôte d'un Conteneur 
-          Le Chiffrement Symétrique +      1.12 - Mapper des Ports d'un Conteneur 
-        Algorithmes à clef publique +      * 1.13 Démarrer un Conteneur en mode Détaché 
-          Le Chiffrement Asymétrique +      * 1.14 Accéder aux Services d'un Conteneur de l'Extérieur 
-          La Clef de Session +      1.15 Arrêter et Démarrer un Conteneur 
-        Fonctions de Hachage +      * 1.16 - Utiliser des Signaux avec un Conteneur 
-        Signature Numérique +      1.17 - Forcer la Suppression d'un Conteneur en cours d'Exécution 
-        PKI +      1.18 - Utilisation Simple d'un Volume 
-          Certificats X509 +      1.19 - Télécharger une image sans créer un conteneur 
-    * LAB #Utilisation de GnuPG +      1.20 - S'attacher à un conteneur en cours d'exécution 
-      * 2.1 - Présentation +      1.21 - Installer un logiciel dans le conteneur 
-      * 2.2 - Installation +      1.22 - Utilisation de la commande docker commit 
-      * 2.Utilisation +      1.23 - Se connecter au serveur du conteneur de l'extérieur 
-        Signer un message +    LAB #2 - Création d'un Utilisateur de Confiance pour Contrôler le Daemon Docker 
-        Chiffrer un message +    LAB #3 - Le Script docker-bench-security.sh 
-    * LAB #Mise en place de SSH et SCP +    LAB #4 - Sécurisation de la Configuration de l'Hôte Docker 
-      * 3.1 - Introduction +      * 4.1 - [WARN] 1.2.1 - Ensure a separate partition for containers has been created 
-        SSH-1 +      * 4.2 - [WARN] 1.2.3 - Ensure auditing is configured for the Docker daemon 
-        SSH-2 +    * LAB #Sécurisation de la Configuration du daemon Docker 
-        L'authentification par mot de passe +      * 5.1 - [WARN] 2.1 - Ensure network traffic is restricted between containers on the default bridge 
-        L'authentification par clef asymétrique +      * 5.2 - [WARN] 2.8 - Enable user namespace support 
-      * 3.2 - Configuration du Serveur +      * 5.3 - [WARN] 2.11 Ensure that authorization for Docker client commands is enabled 
-      * 3.3 - Utilisation +      * 5.4 - [WARN] 2.12 Ensure centralized and remote logging is configured 
- 3.4 - Mise en place des clefs +      5.5 - [WARN] 2.14 - Ensure Userland Proxy is Disabled 
-      * 3.5 - Tunnels SSH +      5.6 - [WARN] 2.17 - Ensure containers are restricted from acquiring new privileges 
-      * 3.6 - SCP +      * 5.7 - Le Fichier /etc/docker/daemon.json 
-        Introduction +    * LAB #Sécurisation des Images et les Fichiers de Construction 
-        Utilisation +      * 6.1 - [WARN] 4.1 - Ensure a user for the container has been created 
-    * LAB #Mise en place d'un VPN avec OpenVPN +      6.2 [WARN] 4.5 - Ensure Content trust for Docker is Enabled 
-      * Présentation +      6.3 [WARN] 4.6 - Ensure that HEALTHCHECK instructions have been added to container images 
-      * Configuration commune au client et au serveur +    LAB #7 - Sécurisation du Container Runtime 
-      Configuration du client +      7.1 - [WARN] 5.1 - Ensure AppArmor Profile is Enabled 
-      * Configuration du serveur +      * 7.2 - [WARN] 5.2 - Ensure SELinux security options are set, if applicable 
-      * Tests +      * 7.3 - [WARN] 5.10 - Ensure memory usage for container is limited 
-        * Du client vers le serveur +      7.4 - [WARN] 5.11 - Ensure CPU priority is set appropriately on the container 
-        * Du serveur vers le client+      * 7.5 - [WARN] 5.12 - Ensure the container's root filesystem is mounted as read only 
 +      * 7.6 - [WARN] 5.14 - Ensure 'on-failure' container restart policy is set to '5' 
 +      7.7 - [WARN] 5.25 - Ensure the container is restricted from acquiring additional privileges 
 +      7.8 - [WARN] 5.26 - Ensure container health is checked at runtime 
 +      * 7.9 - [WARN] 5.28 - Ensure PIDs cgroup limit is used 
 +    * LAB #Sécurisation des Images avec Docker Content Trust 
 +      * 8.1 - DOCKER_CONTENT_TRUST 
 +      * 8.2 - DCT et la commande docker pull 
 +        L'option disable-content-trust 
 +      * 8.3 - DCT et la commande docker push 
 +      * 8.4 - DCT et la commande docker build 
 +        * Créer un deuxième Repositry 
 +        * Supprimer une Signature
  
-=====Le Problématique=====+=====Présentation de Docker=====
  
-Le **sniffing** des paquets de données est possible sur un réseau utilisant une technologie de diffusion tel un réseau **Ethernet**. En effet certains protocoles ne cryptent pas les données avant de les envoyer dont :+Docker est une application de virtualisation légère qui utilise des **images** et des **conteneurs**.
  
-  Telnet, +Une **image** est un paquet exécutable contenant tout ce qu'il est necessaire afin d'exécuter un logiciel donnéincluant :
-  Rlogin, +
-  Ftp, +
-  * Pop3.+
  
-Un //sniffeur// est un logiciel qui captent les paquets circulant sur un réseau de type diffusion afin de les analyser. Le logiciel les plus utilisé est :+  * le code 
 +  * un runtime 
 +  * des bibliothèques, 
 +  * des variables d'environnement 
 +  * des fichiers de configuration
  
-  Tcpdump.+Un **conteneur** est une instance de l'image en cours d'exécution en mémoire. Elle est isolée de l'environnement de l'hôte par défaut mais peut accéder à des fichiers et de ports de l'hôte selon la configuration.
  
-=====LAB #1 - Utilisation de tcpdump=====+Les conteneurs exécutent des applications nativement en utilisant le noyau de la machine hôte. De ce fait les performances d'un conteneur sont supérieures à celles d'une machine virtuelle qui doit passer par un hyperviseur pour accéder aux ressources de la machine hôte.
  
-Le logiciel **tcpdump** sert à écouter le réseau en interceptant les paquets.+Docker existe en deux versions **Docker-CE** (Docker Community Edition) et **Docker-EE** (Docker Enterprise Edition). Pour consulter les différences entre les deux versions, consultez le lien  **[[https://docs.docker.com/engine/installation/]]**.
  
-===1.1 - Utilisation===+=====LAB #1 - Travailler avec Docker=====
  
-Installez **tcpdump** :+====1.1 - Installer docker====
  
-<code> +Installer Docker-CE sur **votre** ordinateur :
-root@debian12:~# apt install tcpdump +
-</code>+
  
-==L'option -i==+==Mac==
  
-Pour écouter sur une **interface spécifique**, utilisez l'option **-i** :+  Voir le lien **[[https://docs.docker.com/docker-for-mac/install/]]** ou le lien **[[https://kitematic.com/|kitematic]]**. 
 + 
 +==Linux== 
 + 
 +  * Ubuntu - voir le lien **[[https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/]]**, 
 +  * Debian - voir le lien **[[https://docs.docker.com/engine/installation/linux/docker-ce/debian/]]**, 
 +  * CentOS - voir le lien **[[https://docs.docker.com/engine/installation/linux/docker-ce/centos/]]**, 
 +  * Fedora - voir le lien **[[https://docs.docker.com/engine/installation/linux/docker-ce/fedora/]]**, 
 + 
 +==Windows 7, 8== 
 + 
 +  * Téléchargez Docker Toolbox à partir de cette page **[[https://docs.docker.com/toolbox/toolbox_install_windows/]]** 
 +  * Fermez toutes les machines virtuelles ainsi que VirtualBox, 
 +  * Installez **DockerToolBox.exe** (décochez VirtualBox dans la liste de produits à installer), 
 +  * Exécutez Docker Toolbox et laissez l'application créer une machine virtuelle, 
 +  Ouvrez VirtualBox. Vous verrez une machine virtuelle Default, 
 +  Ouvrez **cmd**. 
 + 
 +==Windows 10== 
 + 
 +  * Voir le lien **[[https://docs.docker.com/docker-for-windows/install/]]**
 + 
 + 
 +====1.2 - Démarrer un Conteneur==== 
 + 
 +Démarrez un conteneur de l'image hello-world :
  
 <code> <code>
-root@debian12:~# tcpdump -i ens18 -c 10 +root@debian9:~# docker run hello-world 
-tcpdumpverbose output suppressed, use -v[v]... for full protocol decode +Unable to find image 'hello-world:latest' locally 
-listening on ens18, link-type EN10MB (Ethernet), snapshot length 262144 bytes +latestPulling from library/hello-world 
-17:29:37.411395 IP 10.0.2.46.ssh > 10.0.2.1.42252Flags [P.]seq 119569853:119570041, ack 3811519177, win 501, options [nop,nop,TS val 3553055771 ecr 1647876767], length 188 +1b930d010525: Pull complete  
-17:29:37.411528 IP 10.0.2.1.42252 > 10.0.2.46.ssh: Flags [.], ack 188, win 10591, options [nop,nop,TS val 1647876791 ecr 3553055771], length 0 +Digestsha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535 
-17:29:37.493738 IP 10.0.2.46.36881 > dns.google.domain: 55995+ PTR? 1.2.0.10.in-addr.arpa. (39+StatusDownloaded newer image for hello-world:latest 
-17:29:37.495598 IP dns.google.domain > 10.0.2.46.3688155995 NXDomain 0/0/0 (39) + 
-17:29:37.495837 IP 10.0.2.46.33051 > dns.google.domain: 43187+ PTR? 46.2.0.10.in-addr.arpa. (40) +Hello from Docker! 
-17:29:37.497464 IP dns.google.domain > 10.0.2.46.33051: 43187 NXDomain 0/0/0 (40) +This message shows that your installation appears to be working correctly. 
-17:29:37.497758 IP 10.0.2.46.ssh > 10.0.2.1.42252: Flags [P.], seq 188:536, ack 1, win 501, options [nop,nop,TS val 3553055857 ecr 1647876791], length 348 + 
-17:29:37.497891 IP 10.0.2.1.42252 > 10.0.2.46.ssh: Flags [.]ack 536, win 10591, options [nop,nop,TS val 1647876877 ecr 3553055857], length 0 +To generate this messageDocker took the following steps
-17:29:37.597097 IP 10.0.2.46.52033 > dns.google.domain: 12468+ PTR? 8.8.8.8.in-addr.arpa. (38) + 1. The Docker client contacted the Docker daemon
-17:29:37.598847 IP dns.google.domain > 10.0.2.46.52033: 12468 1/0/0 PTR dns.google. (62) + 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. 
-10 packets captured +    (amd64
-14 packets received by filter + 3The Docker daemon created a new container from that image which runs the 
-0 packets dropped by kernel+    executable that produces the output you are currently reading. 
 + 4The Docker daemon streamed that output to the Docker client, which sent it 
 +    to your terminal. 
 + 
 +To try something more ambitious, you can run an Ubuntu container with
 + $ docker run -it ubuntu bash 
 + 
 +Share images, automate workflows, and more with a free Docker ID: 
 + https://hub.docker.com/ 
 + 
 +For more examples and ideasvisit
 + https://docs.docker.com/get-started/
 </code> </code>
  
-Notez qu'à la fin, un résumé vous est présenté, par exemple :+<WRAP center round important> 
 +**Important** - Notez que si l'image servant à générer le conteneur n'est pas présente sur le système hôtecelle-ci est téléchargée automatiquement depuis un dépôt ( par défaut le dépôt **docker.io** ) en utilisant la commande **docker pull**. 
 +</WRAP> 
 + 
 +Démarrez un conteneur de l'image ubuntu:latest en mode interactif grâce à l'utilisation des options **-i** et **-t** en lui passant en argument **bash** pour que celui-ci soient lancé au démarrage du conteneur :
  
 <code> <code>
-... +root@debian9:~# docker run -it ubuntu bash 
-10 packets captured +Unable to find image 'ubuntu:latest' locally 
-14 packets received by filter +latest: Pulling from library/ubuntu 
-0 packets dropped by kernel+898c46f3b1a1: Pull complete  
 +63366dfa0a50: Pull complete  
 +041d4cd74a92: Pull complete  
 +6e1bee0f8701: Pull complete  
 +Digest: sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8 
 +Status: Downloaded newer image for ubuntu:latest 
 +root@3a3f9bda6cbd:/# ls 
 +bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var 
 +root@3a3f9bda6cbd:/# cat /etc/lsb-release 
 +DISTRIB_ID=Ubuntu 
 +DISTRIB_RELEASE=18.04 
 +DISTRIB_CODENAME=bionic 
 +DISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS"
 </code> </code>
  
 <WRAP center round important> <WRAP center round important>
-**Important** : L'option **-c** limite le nombre de paquets capturés.+**Important** - Notez que dans ce cas le conteneur est lancé avec comme argument **bash** qui lancera /bin/bash dans le conteneur.
 </WRAP> </WRAP>
  
-==L'option -x==+Consulter la liste des paquets installés dans le conteneur ubuntu : 
 + 
 +<code> 
 +root@835001339e79:/# dpkg -l 
 +Desired=Unknown/Install/Remove/Purge/Hold 
 +| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend 
 +|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) 
 +||/ Name                                 Version                 Architecture            Description 
 ++++-====================================-=======================-=======================-============================================================================= 
 +ii  adduser                              3.116ubuntu1            all                     add and remove users and groups 
 +ii  apt                                  1.6.8                   amd64                   commandline package manager 
 +ii  base-files                           10.1ubuntu2.4           amd64                   Debian base system miscellaneous files 
 +ii  base-passwd                          3.5.44                  amd64                   Debian base system master password and group files 
 +ii  bash                                 4.4.18-2ubuntu1         amd64                   GNU Bourne Again SHell 
 +ii  bsdutils                             1:2.31.1-0.4ubuntu3.3   amd64                   basic utilities from 4.4BSD-Lite 
 +ii  bzip2                                1.0.6-8.1               amd64                   high-quality block-sorting file compressor - utilities 
 +ii  coreutils                            8.28-1ubuntu1           amd64                   GNU core utilities 
 +ii  dash                                 0.5.8-2.10              amd64                   POSIX-compliant shell 
 +ii  debconf                              1.5.66                  all                     Debian configuration management system 
 +ii  debianutils                          4.8.4                   amd64                   Miscellaneous utilities specific to Debian 
 +ii  diffutils                            1:3.6-1                 amd64                   File comparison utilities 
 +ii  dpkg                                 1.19.0.5ubuntu2.1       amd64                   Debian package management system 
 +ii  e2fsprogs                            1.44.1-1ubuntu1.1       amd64                   ext2/ext3/ext4 file system utilities 
 +ii  fdisk                                2.31.1-0.4ubuntu3.3     amd64                   collection of partitioning utilities 
 +ii  findutils                            4.6.0+git+20170828-2    amd64                   utilities for finding files--find, xargs 
 +ii  gcc-8-base:amd64                     8.2.0-1ubuntu2~18.04    amd64                   GCC, the GNU Compiler Collection (base package) 
 +ii  gpgv                                 2.2.4-1ubuntu1.2        amd64                   GNU privacy guard - signature verification tool 
 +ii  grep                                 3.1-2                   amd64                   GNU grep, egrep and fgrep 
 +ii  gzip                                 1.6-5ubuntu1            amd64                   GNU compression utilities 
 +ii  hostname                             3.20                    amd64                   utility to set/show the host name or domain name 
 +ii  init-system-helpers                  1.51                    all                     helper tools for all init systems 
 +ii  libacl1:amd64                        2.2.52-3build1          amd64                   Access control list shared library 
 +ii  libapt-pkg5.0:amd64                  1.6.8                   amd64                   package management runtime library 
 +ii  libattr1:amd64                       1:2.4.47-2build1        amd64                   Extended attribute shared library 
 +ii  libaudit-common                      1:2.8.2-1ubuntu1        all                     Dynamic library for security auditing - common files 
 +ii  libaudit1:amd64                      1:2.8.2-1ubuntu1        amd64                   Dynamic library for security auditing 
 +ii  libblkid1:amd64                      2.31.1-0.4ubuntu3.3     amd64                   block device ID library 
 +ii  libbz2-1.0:amd64                     1.0.6-8.1               amd64                   high-quality block-sorting file compressor library - runtime 
 +ii  libc-bin                             2.27-3ubuntu1           amd64                   GNU C Library: Binaries 
 +ii  libc6:amd64                          2.27-3ubuntu1           amd64                   GNU C Library: Shared libraries 
 +ii  libcap-ng0:amd64                     0.7.7-3.1               amd64                   An alternate POSIX capabilities library 
 +ii  libcom-err2:amd64                    1.44.1-1ubuntu1.1       amd64                   common error description library 
 +ii  libdb5.3:amd64                       5.3.28-13.1ubuntu1      amd64                   Berkeley v5.3 Database Libraries [runtime] 
 +ii  libdebconfclient0:amd64              0.213ubuntu1            amd64                   Debian Configuration Management System (C-implementation library) 
 +ii  libext2fs2:amd64                     1.44.1-1ubuntu1.1       amd64                   ext2/ext3/ext4 file system libraries 
 +ii  libfdisk1:amd64                      2.31.1-0.4ubuntu3.3     amd64                   fdisk partitioning library 
 +ii  libffi6:amd64                        3.2.1-8                 amd64                   Foreign Function Interface library runtime 
 +ii  libgcc1:amd64                        1:8.2.0-1ubuntu2~18.04  amd64                   GCC support library 
 +ii  libgcrypt20:amd64                    1.8.1-4ubuntu1.1        amd64                   LGPL Crypto library - runtime library 
 +ii  libgmp10:amd64                       2:6.1.2+dfsg-2          amd64                   Multiprecision arithmetic library 
 +ii  libgnutls30:amd64                    3.5.18-1ubuntu1         amd64                   GNU TLS library - main runtime library 
 +ii  libgpg-error0:amd64                  1.27-6                  amd64                   library for common error values and messages in GnuPG components 
 +ii  libhogweed4:amd64                    3.4-1                   amd64                   low level cryptographic library (public-key cryptos) 
 +ii  libidn2-0:amd64                      2.0.4-1.1build2         amd64                   Internationalized domain names (IDNA2008/TR46) library 
 +ii  liblz4-1:amd64                       0.0~r131-2ubuntu3       amd64                   Fast LZ compression algorithm library - runtime 
 +ii  liblzma5:amd64                       5.2.2-1.3               amd64                   XZ-format compression library 
 +ii  libmount1:amd64                      2.31.1-0.4ubuntu3.3     amd64                   device mounting library 
 +ii  libncurses5:amd64                    6.1-1ubuntu1.18.04      amd64                   shared libraries for terminal handling 
 +ii  libncursesw5:amd64                   6.1-1ubuntu1.18.04      amd64                   shared libraries for terminal handling (wide character support) 
 +ii  libnettle6:amd64                     3.4-1                   amd64                   low level cryptographic library (symmetric and one-way cryptos) 
 +ii  libp11-kit0:amd64                    0.23.9-2                amd64                   library for loading and coordinating access to PKCS#11 modules - runtime 
 +ii  libpam-modules:amd64                 1.1.8-3.6ubuntu2.18.04. amd64                   Pluggable Authentication Modules for PAM 
 +ii  libpam-modules-bin                   1.1.8-3.6ubuntu2.18.04. amd64                   Pluggable Authentication Modules for PAM - helper binaries 
 +ii  libpam-runtime                       1.1.8-3.6ubuntu2.18.04. all                     Runtime support for the PAM library 
 +ii  libpam0g:amd64                       1.1.8-3.6ubuntu2.18.04. amd64                   Pluggable Authentication Modules library 
 +ii  libpcre3:amd64                       2:8.39-9                amd64                   Old Perl 5 Compatible Regular Expression Library - runtime files 
 +ii  libprocps6:amd64                     2:3.3.12-3ubuntu1.1     amd64                   library for accessing process information from /proc 
 +ii  libseccomp2:amd64                    2.3.1-2.1ubuntu4        amd64                   high level interface to Linux seccomp filter 
 +ii  libselinux1:amd64                    2.7-2build2             amd64                   SELinux runtime shared libraries 
 +ii  libsemanage-common                   2.7-2build2             all                     Common files for SELinux policy management libraries 
 +ii  libsemanage1:amd64                   2.7-2build2             amd64                   SELinux policy management library 
 +ii  libsepol1:amd64                      2.7-1                   amd64                   SELinux library for manipulating binary security policies 
 +ii  libsmartcols1:amd64                  2.31.1-0.4ubuntu3.3     amd64                   smart column output alignment library 
 +ii  libss2:amd64                         1.44.1-1ubuntu1.1       amd64                   command-line interface parsing library 
 +ii  libstdc++6:amd64                     8.2.0-1ubuntu2~18.04    amd64                   GNU Standard C++ Library v3 
 +ii  libsystemd0:amd64                    237-3ubuntu10.13        amd64                   systemd utility library 
 +ii  libtasn1-6:amd64                     4.13-2                  amd64                   Manage ASN.1 structures (runtime) 
 +ii  libtinfo5:amd64                      6.1-1ubuntu1.18.04      amd64                   shared low-level terminfo library for terminal handling 
 +ii  libudev1:amd64                       237-3ubuntu10.13        amd64                   libudev shared library 
 +ii  libunistring2:amd64                  0.9.9-0ubuntu1          amd64                   Unicode string library for C 
 +ii  libuuid1:amd64                       2.31.1-0.4ubuntu3.3     amd64                   Universally Unique ID library 
 +ii  libzstd1:amd64                       1.3.3+dfsg-2ubuntu1     amd64                   fast lossless compression algorithm 
 +ii  login                                1:4.5-1ubuntu1          amd64                   system login tools 
 +ii  lsb-base                             9.20170808ubuntu1       all                     Linux Standard Base init script functionality 
 +ii  mawk                                 1.3.3-17ubuntu3         amd64                   a pattern scanning and text processing language 
 +ii  mount                                2.31.1-0.4ubuntu3.3     amd64                   tools for mounting and manipulating filesystems 
 +ii  ncurses-base                         6.1-1ubuntu1.18.04      all                     basic terminal type definitions 
 +ii  ncurses-bin                          6.1-1ubuntu1.18.04      amd64                   terminal-related programs and man pages 
 +ii  passwd                               1:4.5-1ubuntu1          amd64                   change and administer password and group data 
 +ii  perl-base                            5.26.1-6ubuntu0.3       amd64                   minimal Perl system 
 +ii  procps                               2:3.3.12-3ubuntu1.1     amd64                   /proc file system utilities 
 +ii  sed                                  4.4-2                   amd64                   GNU stream editor for filtering/transforming text 
 +ii  sensible-utils                       0.0.12                  all                     Utilities for sensible alternative selection 
 +ii  sysvinit-utils                       2.88dsf-59.10ubuntu1    amd64                   System-V-like utilities 
 +ii  tar                                  1.29b-2ubuntu0.1        amd64                   GNU version of the tar archiving utility 
 +ii  ubuntu-keyring                       2018.09.18.1~18.04.0    all                     GnuPG keys of the Ubuntu archive 
 +ii  util-linux                           2.31.1-0.4ubuntu3.3     amd64                   miscellaneous system utilities 
 +ii  zlib1g:amd64                         1:1.2.11.dfsg-0ubuntu2  amd64                   compression library - runtime 
 +root@835001339e79:/# exit 
 +exit 
 +root@debian9:~#  
 +</code>
  
-Pour écouter sur une interface spécifique et voir le contenu en Hexadécimal, utilisez les options -i et **-x** :+Les options de la commande docker run peuvent être visualisées avec la commande :
  
 <code> <code>
-root@debian12:~# tcpdump -i ens18 -x -c 3 +root@debian9:~# docker run --help 
-tcpdumpverbose output suppressed, use -v[v]... for full protocol decode + 
-listening on ens18, link-type EN10MB (Ethernet), snapshot length 262144 bytes +Usage: docker run [OPTIONSIMAGE [COMMAND] [ARG...] 
-17:27:24.043320 IP 10.0.2.46.ssh > 10.0.2.1.42252: Flags [P.], seq 119567701:119567889ack 3811519061win 501options [nop,nop,TS val 3552922403 ecr 1647743397], length 188 + 
-        0x0000:  4510 00f0 84b8 4000 4006 9d11 0a00 022e +Run a command in a new container 
-        0x0010:  0a00 0201 0016 a50c 0720 7555 e32f 2a55 + 
-        0x0020:  8018 01f5 1911 0000 0101 080a d3c5 4b23 +Options: 
-        0x0030:  6236 91a5 0000 00b0 77fb cb1f c046 bb66 +      --add-host list                  Add a custom host-to-IP mapping (host:ip) 
-        0x0040:  c32f 923b a994 d49b f063 5539 130e 764b +  -a--attach list                    Attach to STDIN, STDOUT or STDERR 
-        0x0050:  06fe b5be f2d1 7cee ef79 8d3e ec6e 1e7f +      --blkio-weight uint16            Block IO (relative weight), between 10 and 1000, or to disable (default 0
-        0x0060:  c296 1fbf f4e8 67b0 f16d 5d98 1963 424c +      --blkio-weight-device list       Block IO weight (relative device weight) (default []
-        0x0070:  f6de 9287 5dbe 98c0 2b95 05cb 37f3 a653 +      --cap-add list                   Add Linux capabilities 
-        0x0080:  dbff 81a1 d03f c288 bbaf 4756 41be 64ea +      --cap-drop list                  Drop Linux capabilities 
-        0x0090:  706a 55ff 8322 e32e ea56 2e60 5210 43e6 +      --cgroup-parent string           Optional parent cgroup for the container 
-        0x00a0:  9eec 5bb1 e519 1936 4ee7 809b 6a18 675e +      --cidfile string                 Write the container ID to the file 
-        0x00b0:  29b7 de38 921d a543 4ca7 7132 ff0f e399 +      --cpu-period int                 Limit CPU CFS (Completely Fair Scheduler) period 
-        0x00c0:  5338 304d 03a3 beed ddbe 4530 cb71 fea2 +      --cpu-quota int                  Limit CPU CFS (Completely Fair Scheduler) quota 
-        0x00d0:  618b b56d b45c 9ab6 9b71 563e 058d de9a +      --cpu-rt-period int              Limit CPU real-time period in microseconds 
-        0x00e0:  d249 d57e 7a53 f6b5 7bf6 5924 46f0 6c74 +      --cpu-rt-runtime int             Limit CPU real-time runtime in microseconds 
-17:27:24.043485 IP 10.0.2.1.42252 > 10.0.2.46.sshFlags [.], ack 188, win 10548, options [nop,nop,TS val 1647743423 ecr 3552922403], length 0 +  -c--cpu-shares int                 CPU shares (relative weight) 
-        0x0000 4510 0034 41fb 4000 4006 e08a 0a00 0201 +      --cpus decimal                   Number of CPUs 
-        0x0010 0a00 022e a50c 0016 e32f 2a55 0720 7611 +      --cpuset-cpus string             CPUs in which to allow execution (0-30,1) 
-        0x0020 8010 2934 1855 0000 0101 080a 6236 91bf +      --cpuset-mems string             MEMs in which to allow execution (0-30,1) 
-        0x0030:  d3c5 4b23 +  -d, --detach                         Run container in background and print container ID 
-17:27:24.125464 IP 10.0.2.46.42246 > dns.google.domain: 35092+ PTR? 1.2.0.10.in-addr.arpa. (39+      --detach-keys string             Override the key sequence for detaching a container 
-        0x0000:  4500 0043 3869 4000 4011 e603 0a00 022e +      --device list                    Add a host device to the container 
-        0x0010:  0808 0808 a506 0035 002f 1c7e 8914 0100 +      --device-cgroup-rule list        Add a rule to the cgroup allowed devices list 
-        0x0020:  0001 0000 0000 0000 0131 0132 0130 0231 +      --device-read-bps list           Limit read rate (bytes per second) from a device (default []) 
-        0x0030:  3007 696e 2d61 6464 7204 6172 7061 0000 +      --device-read-iops list          Limit read rate (IO per second) from a device (default []) 
-        0x0040:  0c00 01 +      --device-write-bps list          Limit write rate (bytes per second) to a device (default []) 
-3 packets captured +      --device-write-iops list         Limit write rate (IO per second) to a device (default []) 
-10 packets received by filter +      --disable-content-trust          Skip image verification (default true) 
-0 packets dropped by kernel+      --dns list                       Set custom DNS servers 
 +      --dns-option list                Set DNS options 
 +      --dns-search list                Set custom DNS search domains 
 +      --entrypoint string              Overwrite the default ENTRYPOINT of the image 
 +  -e, --env list                       Set environment variables 
 +      --env-file list                  Read in a file of environment variables 
 +      --expose list                    Expose a port or a range of ports 
 +      --group-add list                 Add additional groups to join 
 +      --health-cmd string              Command to run to check health 
 +      --health-interval duration       Time between running the check (ms|s|m|h) (default 0s) 
 +      --health-retries int             Consecutive failures needed to report unhealthy 
 +      --health-start-period duration   Start period for the container to initialize before starting health-retries countdown (ms|s|m|h) (default 0s) 
 +      --health-timeout duration        Maximum time to allow one check to run (ms|s|m|h) (default 0s) 
 +      --help                           Print usage 
 +  -h, --hostname string                Container host name 
 +      --init                           Run an init inside the container that forwards signals and reaps processes 
 +  -i, --interactive                    Keep STDIN open even if not attached 
 +      --ip string                      IPv4 address (e.g., 172.30.100.104) 
 +      --ip6 string                     IPv6 address (e.g., 2001:db8::33) 
 +      --ipc string                     IPC mode to use 
 +      --isolation string               Container isolation technology 
 +      --kernel-memory bytes            Kernel memory limit 
 +  -l--label list                     Set meta data on a container 
 +      --label-file list                Read in a line delimited file of labels 
 +      --link list                      Add link to another container 
 +      --link-local-ip list             Container IPv4/IPv6 link-local addresses 
 +      --log-driver string              Logging driver for the container 
 +      --log-opt list                   Log driver options 
 +      --mac-address string             Container MAC address (e.g., 92:d0:c6:0a:29:33) 
 +  -m, --memory bytes                   Memory limit 
 +      --memory-reservation bytes       Memory soft limit 
 +      --memory-swap bytes              Swap limit equal to memory plus swap'-1' to enable unlimited swap 
 +      --memory-swappiness int          Tune container memory swappiness (to 100) (default -1) 
 +      --mount mount                    Attach a filesystem mount to the container 
 +      --name string                    Assign a name to the container 
 +      --network string                 Connect a container to a network (default "default"
 +      --network-alias list             Add network-scoped alias for the container 
 +      --no-healthcheck                 Disable any container-specified HEALTHCHECK 
 +      --oom-kill-disable               Disable OOM Killer 
 +      --oom-score-adj int              Tune host's OOM preferences (-1000 to 1000) 
 +      --pid string                     PID namespace to use 
 +      --pids-limit int                 Tune container pids limit (set -1 for unlimited) 
 +      --privileged                     Give extended privileges to this container 
 +  -p, --publish list                   Publish a container's port(s) to the host 
 +  -P, --publish-all                    Publish all exposed ports to random ports 
 +      --read-only                      Mount the container's root filesystem as read only 
 +      --restart string                 Restart policy to apply when a container exits (default "no"
 +      --rm                             Automatically remove the container when it exits 
 +      --runtime string                 Runtime to use for this container 
 +      --security-opt list              Security Options 
 +      --shm-size bytes                 Size of /dev/shm 
 +      --sig-proxy                      Proxy received signals to the process (default true) 
 +      --stop-signal string             Signal to stop a container (default "SIGTERM"
 +      --stop-timeout int               Timeout (in seconds) to stop a container 
 +      --storage-opt list               Storage driver options for the container 
 +      --sysctl map                     Sysctl options (default map[]) 
 +      --tmpfs list                     Mount a tmpfs directory 
 +  -t, --tty                            Allocate a pseudo-TTY 
 +      --ulimit ulimit                  Ulimit options (default []) 
 +  -u, --user string                    Username or UID (format<name|uid>[:<group|gid>]) 
 +      --userns string                  User namespace to use 
 +      --uts string                     UTS namespace to use 
 +  -v, --volume list                    Bind mount a volume 
 +      --volume-driver string           Optional volume driver for the container 
 +      --volumes-from list              Mount volumes from the specified container(s) 
 +  -w, --workdir string                 Working directory inside the container
 </code> </code>
  
-==L'option -X==+====1.3 Consulter la Liste des Conteneurs et Images====
  
-Pour écouter sur une interface spécifique et voir le contenu en Hexadécimal et en ASCII, utilisez les options -i et **-X** :+Pour consulter tous les conteneurs, utilisez la commande **docker ps** avec l'option **-a** :
  
 <code> <code>
-root@debian12:~# tcpdump -i ens18 -X -c 3 +root@debian9:~# docker ps -a 
-tcpdump: verbose output suppressed, use -v[v]... for full protocol decode +CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                       PORTS               NAMES 
-listening on ens18, link-type EN10MB (Ethernet), snapshot length 262144 bytes +3a3f9bda6cbd        ubuntu              "bash"              About a minute ago   Exited (1273 seconds ago                       wizardly_buck 
-13:07:32.922306 IP 10.0.2.46.ssh > 10.0.2.1.42252: Flags [P.], seq 119572449:119572637, ack 3811519901, win 501, options [nop,nop,TS val 3553115863 ecr 1647936856], length 188 +26ef17bd115d        hello-world         "/hello"            8 minutes ago        Exited (0) 8 minutes ago                         angry_chaplygin
-        0x0000:  4510 00f0 84d9 4000 4006 9cf0 0a00 022e  E.....@.@....... +
-        0x0010:  0a00 0201 0016 a50c 0720 87e1 e32f 2d9d  ............./-+
-        0x0020:  8018 01f5 1911 0000 0101 080a d3c8 3ed7  ..............>+
-        0x0030:  6239 8558 0000 00b0 daef 47be bc64 8630  b9.X......G..d.0 +
-        0x0040:  968c 107d ba16 f8fb 45db 05ff e566 a1af  ...}....E....f.. +
-        0x0050:  728f e777 583b 64ac 09a6 f099 c570 ad4f  r..wX;d......p.O +
-        0x0060:  17d1 afa8 dbb3 1d59 122a 3e9d e4be 07f7  .......Y.*>..... +
-        0x0070:  7b85 75fc 49f4 e0fe 37ab f924 acc6 4f43  {.u.I...7..$..OC +
-        0x0080:  6231 f469 e3b2 ebb9 e9a4 6bfb cd89 66e2  b1.i......k...f. +
-        0x0090:  9fda ccf9 39ad 272a f373 167e 13e2 b56c  ....9.'*.s.~...l +
-        0x00a0:  3625 f2e2 7898 d061 6191 d5c4 a268 b1e0  6%..x..aa....h.. +
-        0x00b0:  1f4a a1f9 e319 18c9 e55a b700 e281 1f71  .J.......Z.....q +
-        0x00c0:  06fb 4e11 1145 23e2 a194 d91c 8e22 f8ef  ..N..E#......".. +
-        0x00d0:  5e96 6e34 f24f 1b67 754b 4c7e 5e51 a2cf  ^.n4.O.guKL~^Q.. +
-        0x00e0:  e2ed c5bb 409e eae3 c905 54ab cfc2 5a55  ....@.....T...ZU +
-13:07:32.922462 IP 10.0.2.1.42252 > 10.0.2.46.ssh: Flags [.], ack 188, win 10611, options [nop,nop,TS val 1647936883 ecr 3553115863], length 0 +
-        0x0000:  4510 0034 4232 4000 4006 e053 0a00 0201  E..4B2@.@..S.... +
-        0x0010:  0a00 022e a50c 0016 e32f 2d9d 0720 889d  ........./-..... +
-        0x0020:  8010 2973 1855 0000 0101 080a 6239 8573  ..)s.U......b9.s +
-        0x0030:  d3c8 3ed7                                ..>. +
-13:07:33.008324 IP 10.0.2.46.47533 > dns.google.domain: 49115+ PTR? 1.2.0.10.in-addr.arpa. (39) +
-        0x0000:  4500 0043 2e6b 4000 4011 f001 0a00 022e  E..C.k@.@....... +
-        0x0010:  0808 0808 b9ad 0035 002f 1c7e bfdb 0100  .......5./.~.... +
-        0x0020:  0001 0000 0000 0000 0131 0132 0130 0231  .........1.2.0.1 +
-        0x0030:  3007 696e 2d61 6464 7204 6172 7061 0000  0.in-addr.arpa.. +
-        0x0040:  0c00 01                                  ... +
-3 packets captured +
-10 packets received by filter +
-0 packets dropped by kernel+
 </code> </code>
  
-==L'option -w==+<WRAP center round important> 
 +**Important** Notez que chaque conteneur peut être référencé par son **CONTAINER ID** ou par son **NAME**. 
 +</WRAP>
  
-Pour écouter sur une interface spécifique et envoyer la sortie dans un fichier, utilisez les options -i et **-w** et patientez 5 minutes :+Pour consulter la liste des images, utilisez la commande **docker images** :
  
 <code> <code>
-root@debian12:~# tcpdump -i ens18 -w log.dump +root@debian9:~# docker images 
-tcpdump: listening on ens18, link-type EN10MB (Ethernet), snapshot length 262144 bytes +REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 
-^C42 packets captured +ubuntu              latest              94e814e2efa8        4 weeks ago         88.9MB 
-45 packets received by filter +hello-world         latest              fce289e99eb9        3 months ago        4.84kB
-0 packets dropped by kernel +
- +
-root@debian12:~# ls -l log.dump +
--rw-r--r-- 1 tcpdump tcpdump 25555 Nov 28 13:11 log.dump+
 </code> </code>
  
-<WRAP center round important 50%+<WRAP center round important> 
-**Important** - Arrêtez la sortie de la commande à l'aide des touches **^C**.+**Important** - Notez que chaque image est référencée par son IMAGE ID.
 </WRAP> </WRAP>
  
-Notez que le fichier log.dump est au format **libpcap** et non au format texte. Il est donc inutile d'essayer de lire son contenu avec une commande telle **cat** :+====1.4 - Rechercher une Image dans un Dépôt==== 
 + 
 +Pour rechercher une image docker dans le dépôt par défaut, utilisez la commande **docker search** :
  
 <code> <code>
-root@debian12:~# file log.dump +root@debian9:~# docker search --filter=stars=5 centos 
-log.dump: pcap capture file, microsecond ts (little-endian) version 2.4 (Ethernet, capture length 262144)+NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED 
 +centos                            The official build of CentOS                  5288                [OK]                 
 +ansible/centos7-ansible           Ansible on Centos7                              121                                     [OK] 
 +jdeathe/centos-ssh                CentOS-6 6.10 x86_64 / CentOS-7 7.5.1804 x86…   107                                     [OK] 
 +consol/centos-xfce-vnc            Centos container with "headless" VNC session…   84                                      [OK] 
 +imagine10255/centos6-lnmp-php56   centos6-lnmp-php56                              53                                      [OK] 
 +centos/mysql-57-centos7           MySQL 5.7 SQL database server                   50                                       
 +tutum/centos                      Simple CentOS docker image with SSH access      44                                       
 +gluster/gluster-centos            Official GlusterFS Image [ CentOS-7 +  Glust…   40                                      [OK] 
 +openshift/base-centos7            A Centos7 derived base image for Source-To-I…   40                                       
 +centos/postgresql-96-centos7      PostgreSQL is an advanced Object-Relational …   37                                       
 +centos/python-35-centos7          Platform for building and running Python 3.5…   34                                       
 +kinogmt/centos-ssh                CentOS with SSH                                 26                                      [OK] 
 +centos/httpd-24-centos7           Platform for running Apache httpd 2.4 or bui…   22                                       
 +centos/php-56-centos7             Platform for building and running PHP 5.6 ap…   20                                       
 +openshift/jenkins-2-centos7       A Centos7 based Jenkins v2.x image for use w…   20                                       
 +pivotaldata/centos-gpdb-dev       CentOS image for GPDB development. Tag names…   10                                       
 +openshift/wildfly-101-centos7     A Centos7 based WildFly v10.1 image for use …                        
 </code> </code>
  
-==L'option -v==+<WRAP center round important> 
 +**Important** Notez que chaque image est référencée par la colonne NAME. Le NAME est sous le format **repository/mainteneur/nom** sauf dans le cas où il s'agit de l'image "officielle" de l'éditeur au quel cas le format est simplement **repository/nom**. La notion de STARS ( étoiles ) vient de Docker Hub et est une indication de la satisfaction de la communauté. 
 +</WRAP>
  
-Tcpdump peut être utilisé avec un de trois modes verbose.+====1.5 - Supprimer un Conteneur d'une Image====
  
-^ Mode ^ Option ^ +Pour supprimer un conteneur d'une image, il convient d'utiliser la commande **docker rm** en référencant le conteneur soit par son **NAME** soit par son CONTAINER ID :
-| Light verbose | -v | +
-| Medium verbose | -vv | +
-| Full verbose | -vvv |+
  
 <code> <code>
-root@debian12:~# tcpdump -i ens18 -v -c 3 +root@debian9:~# docker ps -a 
-tcpdump: listening on ens18, link-type EN10MB (Ethernet), snapshot length 262144 bytes +CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES 
-13:13:22.869956 IP (tos 0x10, ttl 64, id 34138, offset 0, flags [DF], proto TCP (6), length 176+3a3f9bda6cbd        ubuntu              "bash"              7 minutes ago       Exited (1275 minutes ago                       wizardly_buck 
-    10.0.2.46.ssh > 10.0.2.1.42252Flags [P.], cksum 0x18d1 (incorrect -> 0x3397), seq 119580817:119580941, ack 3811523793, win 501, options [nop,nop,TS val 3553465811 ecr 1648286807], length 124 +26ef17bd115d        hello-world         "/hello"            13 minutes ago      Exited (0) 13 minutes ago                        angry_chaplygin 
-13:13:22.870085 IP (tos 0x10, ttl 64, id 17171, offset 0, flags [DF], proto TCP (6), length 52) +root@debian9:~# docker rm wizardly_buck 
-    10.0.2.1.42252 > 10.0.2.46.sshFlags [.], cksum 0x1855 (incorrect -> 0x174a), ack 124, win 10660, options [nop,nop,TS val 1648286831 ecr 3553465811], length 0 +wizardly_buck 
-13:13:22.951837 IP (tos 0x10, ttl 64, id 34139, offset 0, flags [DF], proto TCP (6), length 176+root@debian9:~# docker ps -a 
-    10.0.2.46.ssh > 10.0.2.1.42252Flags [P.], cksum 0x18d1 (incorrect -> 0x5f7e), seq 124:248, ack 1, win 501, options [nop,nop,TS val 3553465893 ecr 1648286831], length 124 +CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES 
-packets captured +26ef17bd115d        hello-world         "/hello"            14 minutes ago      Exited (0) 14 minutes ago                       angry_chaplygin 
-10 packets received by filter +root@debian9:~# docker images 
-0 packets dropped by kernel+REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 
 +ubuntu              latest              94e814e2efa8        4 weeks ago         88.9MB 
 +hello-world         latest              fce289e99eb9        months ago        4.84kB
 </code> </code>
  
-===1.2 Filtrage à l'écoute===+<WRAP center round important> 
 +**Important** Notez que dans le cas de l'utilisation du CONTAINER ID, il n'est pas necéssaire d'utiliser la totalité de l'ID. Par exemple, dans le cas ci-dessus, le CONTAINER ID du conteneur **wizardly_buck** était **3a3f9bda6cbd**. La commande de suppression aurait pu utilisé **3a3f9bda6cbd**, **3a3f9b** ou même **3a3**. 
 +</WRAP>
  
-Tcpdump peut effectuer du filtrage lors de l'écoute.+====1.6 -Créer une Image à partir d'un Conteneur Modifié===
  
-Pour uniquement écouter les paquets en provenance de l'adresse IP 192.168.1.11, utilisez la condition **src host** :+Modifier un conteneur d'une image :
  
-  tcpdump src host 192.168.1.11 [Entrée]+<code> 
 +root@debian9:~docker run -it ubuntu 
 +root@54b0dae2f3a9:/# ls 
 +bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var 
 +root@54b0dae2f3a9:/# rm -rf /home 
 +root@54b0dae2f3a9:/# ls 
 +bin  boot  dev  etc  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var 
 +root@54b0dae2f3a9:/# exit 
 +exit 
 +root@debian9:~#  
 +</code>
  
-Pour uniquement écouter les paquets en provenance de l'adresse IP 192.168.1.11 et vers l'adresse 192.168.1.2, utilisez les conditions src host et **dst host** :+<WRAP center round important> 
 +**Important** - Notez ici la suppression du répertoire **home** dans le conteneur **54b0dae2f3a9**. 
 +</WRAP>
  
-  # tcpdump src host 192.168.1.11 and dst host 192.168.1.2 [Entrée]+Consultez la différence entre le conteneur et l'image de base :
  
-Pour uniquement écouter les paquets d'un port précis, utilisez la condition **port** :+<code> 
 +root@debian9:~# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES 
 +54b0dae2f3a9        ubuntu              "/bin/bash"         About a minute ago   Exited (0) About a minute ago                       tender_mendeleev 
 +26ef17bd115d        hello-world         "/hello"            18 minutes ago       Exited (0) 18 minutes ago                           angry_chaplygin 
 +root@debian9:~# docker diff tender_mendeleev 
 +C /root 
 +A /root/.bash_history 
 +D /home 
 +</code>
  
-  # tcpdump -i eth0 port 80 [Entrée]+<WRAP center round important> 
 +**Important** La sortie de la commande **docker diff** comporte des lettres dont les significations sont les suivantes : C = Create, D = Delete, A = Add. 
 +</WRAP>
  
-Pour uniquement écouter les paquets d'un protocole précis, utilisez une condition telle **ip**, **icmp**, **arp**, **rarp**, **udp** ou **tcp**:+Créez un autre conteneur à partir de l'image de base :
  
-  tcpdump -i eth0 udp [Entrée]+<code> 
 +root@debian9:~docker run -it ubuntu 
 +root@92f0d4bb7967:/# ls 
 +bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var 
 +root@92f0d4bb7967:/# exit 
 +exit 
 +root@debian9:~#  
 +</code>
  
-Pour uniquement écouter les paquets d'une taille inférieure à 100 octetsutilisez la condition **less** :+<WRAP center round important> 
 +**Important** - Dans ce nouveau conteneurle répertoire **/home** est présent compte tenu du fait qu'il a été généré à partir de l'image d'origine, inchangée depuis sa compilation. 
 +</WRAP>
  
-  # tcpdump -i eth0 less 100 [Entrée]+Créez maintenant l'image **ubuntu_1** à partir du conteneur **competent_pasteur** en utilisant la commande **docker commit** :
  
-Pour uniquement écouter les paquets d'une taille supérieure à 100 octets, utilisez la condition **great** :+<code> 
 +root@debian9:~# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES 
 +92f0d4bb7967        ubuntu              "/bin/bash"         39 seconds ago      Exited (0) 32 seconds ago                       musing_benz 
 +54b0dae2f3a9        ubuntu              "/bin/bash"         3 minutes ago       Exited (0) 3 minutes ago                        tender_mendeleev 
 +26ef17bd115d        hello-world         "/hello"            19 minutes ago      Exited (0) 19 minutes ago                       angry_chaplygin 
 +root@debian9:~# docker commit tender_mendeleev ubuntu_1 
 +sha256:2ba8e0ec5e38332c8ab15c4b33fd140a9c74d72231d05a6965c40a39fbb44584 
 +root@debian9:~# docker images 
 +REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 
 +ubuntu_1            latest              2ba8e0ec5e38        15 seconds ago      88.9MB 
 +ubuntu              latest              94e814e2efa8        4 weeks ago         88.9MB 
 +hello-world         latest              fce289e99eb9        3 months ago        4.84kB 
 +</code>
  
-  # tcpdump -i eth0 greater 100 [Entrée]+====1.7 Supprimer une Image====
  
-L'utilisation des ses options et conditions peut être combinée pour donner des commandes telles :+Créez maintenant un conteneur à partir de la nouvelle image **ubuntu_1** :
  
-  tcpdump -i eth0 -X src host 192.168.1.11 and dst host 192.168.1.2 and port 21 and ftp [Entrée]+<code> 
 +root@debian9:~docker run -it ubuntu_1 
 +root@904215fb79b4:/# ls 
 +bin  boot  dev  etc  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var 
 +root@904215fb79b4:/# exit 
 +exit 
 +root@debian9:~#  
 +</code>
  
-===Options de la commande===+<WRAP center round important> 
 +**Important** - Notez l'absence du répertoire **home** dans le conteneur **904215fb79b4**. 
 +</WRAP>
  
-Les options de cette commande sont :+Essayez de supprimer l'image **ubuntu_1** :
  
 <code> <code>
-root@debian12:~# tcpdump --help +root@debian9:~# docker rmi ubuntu_1 
-tcpdump version 4.99.3 +Error response from daemon: conflict: unable to remove repository reference "ubuntu_1" (must force- container 904215fb79b4 is using its referenced image 2ba8e0ec5e38 
-libpcap version 1.10.3 (with TPACKET_V3+root@debian9:~docker ps -a 
-OpenSSL 3.0.17 1 Jul 2025 +CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                      PORTS               NAMES 
-Usagetcpdump [-AbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ] [--count] +904215fb79b4        ubuntu_1            "/bin/bash"         About a minute ago   Exited (0) 49 seconds ago                       priceless_swirles 
-                [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ] +92f0d4bb7967        ubuntu              "/bin/bash"         2 minutes ago        Exited (0) 2 minutes ago                        musing_benz 
-                [ -i interface ] [ --immediate-mode ] [ -j tstamptype ] +54b0dae2f3a9        ubuntu              "/bin/bash"         6 minutes ago        Exited (0) 5 minutes ago                        tender_mendeleev 
-                [ -M secret ] [ --number ] [ --print ] [ -Q in|out|inout ] +26ef17bd115d        hello-world         "/hello"            22 minutes ago       Exited (0) 22 minutes ago                       angry_chaplygin
-                -r file ] [ -s snaplen ] [ -T type ] [ --version ] +
-                [ -V file ] [ -w file ] [ -W filecount ] [ -y datalinktype ] +
-                [ --time-stamp-precision precision ] [ --micro ] [ --nano ] +
-                [ -z postrotate-command ] [ -Z user ] [ expression ]+
 </code> </code>
  
-=====Les Contre-Mesures=====+<WRAP center round important> 
 +**Important** Notez qu'il n'est pas possible de supprimer l'image **ubuntu_1** tant que le conteneur **priceless_swirles** soit actif. 
 +</WRAP>
  
-Les contre-mesures incluent l'utilisation du chiffrement sous la forme de SSH, de SCP et d'OpenVPN.+Supprimez donc le conteneur **priceless_swirles** ainsi que l'image **ubuntu_1** :
  
-====Introduction à la cryptologie====+<code> 
 +root@debian9:~# docker rm priceless_swirles 
 +priceless_swirles 
 +root@debian9:~# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES 
 +92f0d4bb7967        ubuntu              "/bin/bash"         4 minutes ago       Exited (0) 3 minutes ago                        musing_benz 
 +54b0dae2f3a9        ubuntu              "/bin/bash"         7 minutes ago       Exited (0) 6 minutes ago                        tender_mendeleev 
 +26ef17bd115d        hello-world         "/hello"            23 minutes ago      Exited (0) 23 minutes ago                       angry_chaplygin 
 +root@debian9:~# docker rmi ubuntu_1 
 +Untagged: ubuntu_1:latest 
 +Deleted: sha256:2ba8e0ec5e38332c8ab15c4b33fd140a9c74d72231d05a6965c40a39fbb44584 
 +Deleted: sha256:308e9761a8fc84661e46eff564b0bbca12b458e71bdf77bf4abbb59b21efdbbe 
 +root@debian9:~# docker images 
 +REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 
 +ubuntu              latest              94e814e2efa8        4 weeks ago         88.9MB 
 +hello-world         latest              fce289e99eb9        3 months ago        1.84kB 
 +</code>
  
-===Définitions===+Pour pouvoir supprimer tous les conteneurs, listez-les par leur **Container ID** :
  
-  * **La Cryptologie** +<code> 
-    * La science qui étudie les aspects scientifiques de ces techniques, c'est-à-dire qu'elle englobe la cryptographie et la cryptanalyse.  +root@debian9:~# docker ps -aq 
-  * **La Cryptanalyse** +92f0d4bb7967 
-    * Lorsque la clef de déchiffrement n'est pas connue de l'attaquant on parle alors de cryptanalyse ou cryptoanalyse (on entend souvent aussi le terme plus familier de cassage). +54b0dae2f3a9 
-  * **La Cryptographie** +26ef17bd115d 
-    * Un terme générique désignant l'ensemble des techniques permettant de chiffrer des messages, c'est-à-dire permettant de les rendre inintelligibles sans une action spécifique. Les verbes crypter et chiffrer sont utilisés. +</code>
-  * **Le Décryptement ou Décryptage** +
-    * Est le fait d'essayer de déchiffrer illégitimement le message (que la clé de déchiffrement soit connue ou non de l'attaquant).+
  
-{{ :redhat:lx04:crypto1.gif|Cette image issue de Comment Ça Marche (www.commentcamarche.net) est mise à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de l'image, dans les conditions fixées par la licence, tant que cette note apparaît clairement. }}+Supprimer toutes les conteneurs :
  
-**La Cryptographie**+<code> 
 +root@debian9:~# docker rm `docker ps -aq` 
 +92f0d4bb7967 
 +54b0dae2f3a9 
 +26ef17bd115d 
 +root@debian9:~# docker ps -aq 
 +root@debian9:~#  
 +</code>
  
-La cryptographie apporte quatre points clefs+Pour supprimer un conteneur dès la fin de son exécution, utilisez l'option **--rm** :
  
-  * La confidentialité +<code> 
-    * consiste à rendre l'information inintelligible à d'autres personnes que les acteurs de la transaction. +root@debian9:~# docker run -it --rm ubuntu 
-  * L'intégrité +root@d123b0112fc2:/# ls 
-    * consiste à déterminer si les données n'ont pas été altérées durant la communication (de manière fortuite ou intentionnelle). +bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var 
-  * L'authentification +root@d123b0112fc2:/# exit 
-    * consiste à assurer l'identité d'un utilisateur. +exit 
-  * La non-répudiation +root@debian9:~# docker ps -aq 
-    * est la garantie qu'aucun des correspondants ne pourra nier la transaction. +root@debian9:~#  
 +</code>
  
-La cryptographie est basée sur l'arithmétiqueIl s'agit, dans le cas d'un texte, de transformer les lettres qui composent le message en une succession de chiffres (sous forme de bits dans le cas de l'informatique), puis ensuite de faire des calculs sur ces chiffres pour:+====1.8 - Créer un Conteneur avec un Nom Spécifique====
  
-  * Procéder au chiffrement +Créez maintenant un conteneur avec un nom spécifique :
-    * Le résultat de cette modification (le message chiffré) est appelé cryptogramme (Ciphertext) par opposition au message initial, appelé message en clair (Plaintext) +
-  * Procéder au déchiffrement+
  
-Le chiffrement se fait à l'aide d'une clef de chiffrement. Le déchiffrement nécessite  une clef de déchiffrement.+<code> 
 +root@debian9:~# docker run -it --name=i2tch ubuntu 
 +root@04b5ab87539a:/# ls 
 +bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var 
 +root@04b5ab87539a:/# exit 
 +exit 
 +root@debian9:~# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES 
 +04b5ab87539a        ubuntu              "/bin/bash"         11 seconds ago      Exited (0) 4 seconds ago                       i2tch 
 +</code>
  
-On distingue deux types de clefs:+Pour obtenir de l'information concernant un conteneur, utilisez la commande **docker inspect** :
  
-  * Les clés symétriques:  +<code> 
-    * des clés utilisées pour le chiffrement ainsi que pour le déchiffrementOn parle alors de chiffrement symétrique ou de chiffrement à clé secrète+root@debian9:~# docker inspect i2tch 
-  * Les clés asymétriques:  +[ 
-    * des clés utilisées dans le cas du chiffrement asymétrique (aussi appelé chiffrement à clé publique)Dans ce casune clé différente est utilisée pour le chiffrement et pour le déchiffrement.+    
 +        "Id": "04b5ab87539aed114cbfc3ba15d10be61cd88b9cffc88c6de9bd26e203b363b5", 
 +        "Created": "2019-04-09T14:22:45.623162229Z", 
 +        "Path": "/bin/bash", 
 +        "Args": [], 
 +        "State":
 +            "Status": "exited", 
 +            "Running": false, 
 +            "Paused": false, 
 +            "Restarting": false, 
 +            "OOMKilled": false, 
 +            "Dead": false, 
 +            "Pid": 0, 
 +            "ExitCode": 0, 
 +            "Error": "", 
 +            "StartedAt": "2019-04-09T14:22:46.301514689Z", 
 +            "FinishedAt""2019-04-09T14:22:51.91071787Z" 
 +        }, 
 +        "Image": "sha256:94e814e2efa8845d95b2112d54497fbad173e45121ce9255b93401392f538499", 
 +        "ResolvConfPath": "/var/lib/docker/containers/04b5ab87539aed114cbfc3ba15d10be61cd88b9cffc88c6de9bd26e203b363b5/resolv.conf", 
 +        "HostnamePath": "/var/lib/docker/containers/04b5ab87539aed114cbfc3ba15d10be61cd88b9cffc88c6de9bd26e203b363b5/hostname", 
 +        "HostsPath": "/var/lib/docker/containers/04b5ab87539aed114cbfc3ba15d10be61cd88b9cffc88c6de9bd26e203b363b5/hosts", 
 +        "LogPath": "/var/lib/docker/containers/04b5ab87539aed114cbfc3ba15d10be61cd88b9cffc88c6de9bd26e203b363b5/04b5ab87539aed114cbfc3ba15d10be61cd88b9cffc88c6de9bd26e203b363b5-json.log", 
 +        "Name": "/i2tch", 
 +        "RestartCount": 0, 
 +        "Driver": "overlay2", 
 +        "Platform": "linux", 
 +        "MountLabel": "", 
 +        "ProcessLabel": "", 
 +        "AppArmorProfile": "", 
 +        "ExecIDs": null, 
 +        "HostConfig":
 +            "Binds": null, 
 +            "ContainerIDFile": "", 
 +            "LogConfig":
 +                "Type": "json-file", 
 +                "Config": {} 
 +            }, 
 +            "NetworkMode": "default", 
 +            "PortBindings": {}, 
 +            "RestartPolicy":
 +                "Name": "no", 
 +                "MaximumRetryCount":
 +            }, 
 +            "AutoRemove": false, 
 +            "VolumeDriver": "", 
 +            "VolumesFrom": null, 
 +            "CapAdd": null, 
 +            "CapDrop": null, 
 +            "Dns": [], 
 +            "DnsOptions": [], 
 +            "DnsSearch": [], 
 +            "ExtraHosts": null, 
 +            "GroupAdd": null, 
 +            "IpcMode": "shareable", 
 +            "Cgroup": "", 
 +            "Links": null, 
 +            "OomScoreAdj": 0, 
 +            "PidMode": "", 
 +            "Privileged": false, 
 +            "PublishAllPorts": false, 
 +            "ReadonlyRootfs": false, 
 +            "SecurityOpt": null, 
 +            "UTSMode": "", 
 +            "UsernsMode": "", 
 +            "ShmSize": 67108864, 
 +            "Runtime": "runc", 
 +            "ConsoleSize":
 +                0, 
 +                0 
 +            ], 
 +            "Isolation": "", 
 +            "CpuShares": 0, 
 +            "Memory": 0, 
 +            "NanoCpus": 0, 
 +            "CgroupParent": "", 
 +            "BlkioWeight": 0, 
 +            "BlkioWeightDevice": [], 
 +            "BlkioDeviceReadBps": null, 
 +            "BlkioDeviceWriteBps": null, 
 +            "BlkioDeviceReadIOps": null, 
 +            "BlkioDeviceWriteIOps": null, 
 +            "CpuPeriod": 0, 
 +            "CpuQuota": 0, 
 +            "CpuRealtimePeriod": 0, 
 +            "CpuRealtimeRuntime": 0, 
 +            "CpusetCpus": "", 
 +            "CpusetMems": "", 
 +            "Devices": [], 
 +            "DeviceCgroupRules": null, 
 +            "DiskQuota": 0, 
 +            "KernelMemory": 0, 
 +            "MemoryReservation": 0, 
 +            "MemorySwap": 0, 
 +            "MemorySwappiness": null, 
 +            "OomKillDisable": false, 
 +            "PidsLimit": 0, 
 +            "Ulimits": null, 
 +            "CpuCount": 0, 
 +            "CpuPercent": 0, 
 +            "IOMaximumIOps": 0, 
 +            "IOMaximumBandwidth": 0, 
 +            "MaskedPaths":
 +                "/proc/asound", 
 +                "/proc/acpi", 
 +                "/proc/kcore", 
 +                "/proc/keys", 
 +                "/proc/latency_stats", 
 +                "/proc/timer_list", 
 +                "/proc/timer_stats", 
 +                "/proc/sched_debug", 
 +                "/proc/scsi", 
 +                "/sys/firmware" 
 +            ], 
 +            "ReadonlyPaths":
 +                "/proc/bus", 
 +                "/proc/fs", 
 +                "/proc/irq", 
 +                "/proc/sys", 
 +                "/proc/sysrq-trigger" 
 +            ] 
 +        }, 
 +        "GraphDriver":
 +            "Data":
 +                "LowerDir": "/var/lib/docker/overlay2/1151d32cdd4dda25ee299fe2c2a8df9dcb1b7fc4c47701c2925c437fb7c3a616-init/diff:/var/lib/docker/overlay2/84bcc6977e49ee3d477255450d69b98195b721b017124194b376f6e6c0645233/diff:/var/lib/docker/overlay2/eee0d6bc849e0c074de73e17eaf11b296dd860a0fb17097f37f9af86d28dcf9b/diff:/var/lib/docker/overlay2/0deb30449649adfed4d1abb678939b2409c4804976ceea4cb75508d0fdf415b6/diff:/var/lib/docker/overlay2/a156bf77423d93e38ef326b3ca6a1d0248ce801733800dad2767070380d682b6/diff", 
 +                "MergedDir": "/var/lib/docker/overlay2/1151d32cdd4dda25ee299fe2c2a8df9dcb1b7fc4c47701c2925c437fb7c3a616/merged", 
 +                "UpperDir": "/var/lib/docker/overlay2/1151d32cdd4dda25ee299fe2c2a8df9dcb1b7fc4c47701c2925c437fb7c3a616/diff", 
 +                "WorkDir": "/var/lib/docker/overlay2/1151d32cdd4dda25ee299fe2c2a8df9dcb1b7fc4c47701c2925c437fb7c3a616/work" 
 +            }, 
 +            "Name": "overlay2" 
 +        }, 
 +        "Mounts": [], 
 +        "Config":
 +            "Hostname": "04b5ab87539a", 
 +            "Domainname": "", 
 +            "User": "", 
 +            "AttachStdin": true, 
 +            "AttachStdout": true, 
 +            "AttachStderr": true, 
 +            "Tty": true, 
 +            "OpenStdin": true, 
 +            "StdinOnce": true, 
 +            "Env":
 +                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" 
 +            ], 
 +            "Cmd":
 +                "/bin/bash" 
 +            ], 
 +            "ArgsEscaped": true, 
 +            "Image": "ubuntu", 
 +            "Volumes": null, 
 +            "WorkingDir": "", 
 +            "Entrypoint": null, 
 +            "OnBuild": null, 
 +            "Labels": {} 
 +        }, 
 +        "NetworkSettings":
 +            "Bridge": "", 
 +            "SandboxID": "304fc54e6d23247d4faf08995b65646967670def542812d902d2ee33d178794d", 
 +            "HairpinMode": false, 
 +            "LinkLocalIPv6Address": "", 
 +            "LinkLocalIPv6PrefixLen": 0, 
 +            "Ports": {}, 
 +            "SandboxKey": "/var/run/docker/netns/304fc54e6d23", 
 +            "SecondaryIPAddresses": null, 
 +            "SecondaryIPv6Addresses": null, 
 +            "EndpointID": "", 
 +            "Gateway": "", 
 +            "GlobalIPv6Address": "", 
 +            "GlobalIPv6PrefixLen": 0, 
 +            "IPAddress": "", 
 +            "IPPrefixLen": 0, 
 +            "IPv6Gateway": "", 
 +            "MacAddress": "", 
 +            "Networks":
 +                "bridge":
 +                    "IPAMConfig": null, 
 +                    "Links": null, 
 +                    "Aliases": null, 
 +                    "NetworkID": "f2d947904cba4a871af3e50d6e1ec0a3a055849185bf7ba473b2e028880bd8a9", 
 +                    "EndpointID": "", 
 +                    "Gateway": "", 
 +                    "IPAddress": "", 
 +                    "IPPrefixLen": 0, 
 +                    "IPv6Gateway": "", 
 +                    "GlobalIPv6Address": "", 
 +                    "GlobalIPv6PrefixLen": 0, 
 +                    "MacAddress": "", 
 +                    "DriverOpts": null 
 +                } 
 +            } 
 +        } 
 +    } 
 +
 +</code>
  
-**Le Chiffrement par Substitution** +====1.9 - Exécuter une Commande dans un Conteneur====
-  +
-Le chiffrement par substitution consiste à remplacer dans un message une ou plusieurs entités (généralement des lettres) par une ou plusieurs autres entités. On distingue généralement plusieurs types de cryptosystèmes par substitution :+
  
-  * La substitution **monoalphabétique** +Pour exécuter une commande spécifique dans un conteneur, passez la commande en argument :
-    * consiste à remplacer chaque lettre du message par une autre lettre de l'alphabet +
-  * La substitution **polyalphabétique**  +
-    * consiste à utiliser une suite de chiffres monoalphabétique réutilisée périodiquement +
-  * La substitution **homophonique**  +
-    * permet de faire correspondre à chaque lettre du message en clair un ensemble possible d'autres caractères +
-  * La substitution de **polygrammes**   +
-    * consiste à substituer un groupe de caractères (polygramme) dans le message par un autre groupe de caractères+
  
-===Algorithmes à clé secrète===+<code> 
 +root@debian9:~# docker run --rm ubuntu env 
 +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
 +HOSTNAME=77bb110031aa 
 +HOME=/root 
 +root@debian9:~#  
 +</code>
  
-==Le Chiffrement Symétrique==+====1.10 - Injecter des Variables d'Environnement dans un Conteneur====
  
-Ce système est aussi appelé le système à **Clef Secrète** ou à **clef privée**.+Pour injecter une ou des variables d'environnement dans un conteneur, utilisez un fichier pré-établi :
  
-Ce système consiste à effectuer une opération de chiffrement par algorithme mais comporte un inconvénient, à savoir qu'il nécessite un canal sécurisé pour la transmission de la clef de chiffrement/déchiffrement.+<code> 
 +root@debian9:~# vi env.list 
 +root@debian9:~# cat env.list 
 +EDITOR=vim 
 +HOSTNAME=ubuntudocker 
 +</code>
  
-{{:redhat:lx04:crypto2.gif|Cette image issue de Comment Ça Marche (www.commentcamarche.net) est mise à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de l'image, dans les conditions fixées par la licence, tant que cette note apparaît clairement.}}+<code> 
 +root@debian9:~# docker run --rm --env-file=env.list ubuntu env 
 +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
 +HOSTNAME=ubuntudocker 
 +EDITOR=vim 
 +HOME=/root 
 +root@debian9:~#  
 +</code>
  
-<WRAP center round important 50%> +====1.11 Modifier le Nom d'Hôte d'un Conteneur====
-**Important** Le système de Méthode du Masque Jetable (One Time Pad) fût mis au point dans les années 1920. Il utilisait une clef générée aléatoirement à usage unique. +
-</WRAP>+
  
-Les algorithmes de chiffrement symétrique couramment utilisés en informatique sont:+Pour modifier le nom d'hôte d'un conteneur, utilisez l'option **-h** :
  
-  * **[[wpfr>Data_Encryption_Standard|Data Encryption Standard]]** (DES), +<code
-  * **[[wpfr>Triple_DES|Triple DES]]** (3DES), +root@debian9:~# docker run -it --rm -h ubuntudocker ubuntu 
-  * **[[wpfr>RC2]]**,  +root@ubuntudocker:/# hostname 
-  * **[[wpfr>Blowfish|Blowfish]]**, +ubuntudocker 
-  * **[[wpfr>International_Data_Encryption_Algorithm|International Data Encryption Algorithm]]** (IDEA), +root@ubuntudocker:/# exit 
-  * **[[wpfr>Standard_de_chiffrement_avancé|Advanced Encryption Standard]]** (AES).+exit 
 +root@debian9:~#  
 +</code>
  
-===Algorithmes à clef publique===+====1.12 - Mapper des Ports d'un Conteneur=====
  
-==Le Chiffrement Asymétrique==+Démarrer un conteneur de nginx sur le port localhost 81 :
  
-Ce système est aussi appelé **Système à Clef Publique**.+<code> 
 +root@debian9:~# docker run -it -p 81:80 nginx 
 +Unable to find image 'nginx:latest' locally 
 +latest: Pulling from library/nginx 
 +27833a3ba0a5: Pull complete  
 +e83729dd399a: Pull complete  
 +ebc6a67df66d: Pull complete  
 +Digest: sha256:c8a861b8a1eeef6d48955a6c6d5dff8e2580f13ff4d0f549e082e7c82a8617a2 
 +Status: Downloaded newer image for nginx:latest 
 +^Croot@debian9:~#  
 +</code>
  
-Ce système consiste à avoir deux clefs appelées des **bi-clefs**:+Notez que c'est bloquant. Le fait d'avoir utiliser ^C a interrompu le processus du conteneur :
  
-  * Une clef **publique** pour le chiffrement +<code> 
-  * Une clef **secrète** ou **privée** pour le déchiffrement+^Croot@debian9:~# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES 
 +4f157e179134        nginx               "nginx -g 'daemon of…"   32 seconds ago      Exited (0) 21 seconds ago                       stoic_roentgen 
 +04b5ab87539a        ubuntu              "/bin/bash"              5 minutes ago       Exited (0) 5 minutes ago                        i2tch 
 +</code>
  
-{{:redhat:lx04:crypto3.gif|Cette image issue de Comment Ça Marche (www.commentcamarche.net) est mise à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de l'image, dans les conditions fixées par la licence, tant que cette note apparaît clairement.}}+====1.13 - Démarrer un Conteneur en mode Détaché====
  
-  * L'utilisateur A (celui qui déchiffre) choisit une clef privée.  +Démarrez maintenant le conteneur de nginx en mode détaché grâce à l'utilisation de l'option **-d** :
-  * A partir de cette clef il génère plusieurs clefs publiques grâce à un algorithme. +
-  * L'utilisateur B (celui qui chiffre) choisit une des clefs publiques à travers un canal non-sécurisé pour chiffrer les données à l'attention de l'utilisateur A.+
  
-Ce système est basé sur ce que l'on appelle une **fonction à trappe à sens unique** ou **one-way trap door**.+<code> 
 +root@debian9:~# docker run -d -p 81:80 nginx 
 +aabb064d4b0ade1f19216b6174631fa32a2053f6aa9d59bd724ea90ce534b004 
 +root@debian9:~# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                          PORTS                NAMES 
 +aabb064d4b0a        nginx               "nginx -g 'daemon of…"   12 seconds ago       Up 11 seconds                   0.0.0.0:81->80/tcp   eager_lewin 
 +4f157e179134        nginx               "nginx -g 'daemon of…"   About a minute ago   Exited (0) About a minute ago                        stoic_roentgen 
 +04b5ab87539a        ubuntu              "/bin/bash"              6 minutes ago        Exited (0) 6 minutes ago                             i2tch 
 +</code>
  
-Il existe toutefois un problème – s'assurer que la clef publique récupérée est bien celle qui correspond au destinataire !+====1.14 - Accèder aux Services d'un Conteneur de l'Extérieur====
  
-Les algorithmes de chiffrement asymétrique couramment utilisés en informatique sont:+Installez le navigateur texte **lynx** 
  
-  * **[[wpfr>Digital_Signature_Algorithm|Digital Signature Algorithm]]** (DSA) +<code> 
-  * **[[wpfr>Rivest_Shamir_Adleman|RivestShamirAdleman]]** (RSA)+root@debian9:~# apt-get install lynx 
 +Lecture des listes de paquets... Fait 
 +Construction de l'arbre des dépendances        
 +Lecture des informations d'état... Fait 
 +The following additional packages will be installed: 
 +  lynx-common 
 +Les NOUVEAUX paquets suivants seront installés : 
 +  lynx lynx-common 
 +0 mis à jour2 nouvellement installés0 à enlever et 94 non mis à jour. 
 +Il est nécessaire de prendre 1 730 ko dans les archives. 
 +Après cette opération, 5 590 ko d'espace disque supplémentaires seront utilisés. 
 +Souhaitez-vous continuer ? [O/n
 +Réception de:1 http://ftp.fr.debian.org/debian stretch/main amd64 lynx-common all 2.8.9dev11-1 [1 098 kB] 
 +Réception de:2 http://ftp.fr.debian.org/debian stretch/main amd64 lynx amd64 2.8.9dev11-1 [632 kB] 
 +1 730 ko réceptionnés en 6s (283 ko/s                                                                                                                                  
 +Sélection du paquet lynx-common précédemment désélectionné. 
 +(Lecture de la base de données... 113082 fichiers et répertoires déjà installés.) 
 +Préparation du dépaquetage de .../lynx-common_2.8.9dev11-1_all.deb ... 
 +Dépaquetage de lynx-common (2.8.9dev11-1) ... 
 +Sélection du paquet lynx précédemment désélectionné. 
 +Préparation du dépaquetage de .../lynx_2.8.9dev11-1_amd64.deb ... 
 +Dépaquetage de lynx (2.8.9dev11-1) ... 
 +Traitement des actions différées (« triggers ») pour mime-support (3.60) ... 
 +Traitement des actions différées (« triggers ») pour man-db (2.7.6.1-2) ... 
 +Paramétrage de lynx-common (2.8.9dev11-1) ... 
 +Paramétrage de lynx (2.8.9dev11-1) ... 
 +update-alternatives: utilisation de « /usr/bin/lynx » pour fournir « /usr/bin/www-browser » (www-browser) en mode automatique 
 +</code>
  
-==La Clef de Session==+Vérifiez que nginx répond aux requetes :
  
-Ce système est un compromis entre le système symétrique et le système asymétrique. Il permet l'envoie de données chiffrées à l'aide d'un algorithme de chiffrement symétrique par un canal non-sécurisé et a été mis au point pour palier au problème de lenteur de déchiffrement du système asymétrique.+<code> 
 +root@debian9:~# lynx --dump http://localhost:81 
 +                               Welcome to nginx!
  
-{{:redhat:lx04:crypto4.gif|Cette image issue de Comment Ça Marche (www.commentcamarche.net) est mise à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de l'image, dans les conditions fixées par la licence, tant que cette note apparaît clairement.}}+   If you see this page, the nginx web server is successfully installed 
 +   and workingFurther configuration is required.
  
-Ce système fonctionne de la façon suivante :+   For online documentation and support please refer to [1]nginx.org. 
 +   Commercial support is available at [2]nginx.com.
  
-  * L'utilisateur A chiffre une clef privée générée aléatoirement, appelée une « clef de session », en utilisant une des clefs publiques de l'utilisateur B. +   Thank you for using nginx.
-  * L'utilisateur A chiffre les données avec la clef de session. +
-  * L'utilisateur B déchiffre la clef de session en utilisant sa propre clef privée. +
-  * L'utilisateur B déchiffre les données en utilisant la clef de session.+
  
-===Fonctions de Hachage===+Références
  
-La fonction de **hachage**, aussi appelée une fonction de **condensation**, est à **sens unique** (one way function)Il « condense » un message en clair et produit un haché unique.+   1http://nginx.org/ 
 +   2. http://nginx.com/ 
 +</code>
  
-{{:redhat:lx04:crypto5.gif|Cette image issue de Comment Ça Marche (www.commentcamarche.net) est mise à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de l'image, dans les conditions fixées par la licence, tant que cette note apparaît clairement.}}+====1.15 - Arrêter et Démarrer un Conteneur====
  
-Les deux algorithmes de hachage utilisés sont+Arrêtez le conteneur nginx :
  
-  * **[[wpfr>MD5|Message Digest 5]]** (MD5)  +<code> 
-  * **[[wpfr>SHA-1|Secure Hash Algorithm]]** (SHA)+root@debian9:~# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                NAMES 
 +aabb064d4b0a        nginx               "nginx -g 'daemon of…"   2 minutes ago       Up 2 minutes               0.0.0.0:81->80/tcp   eager_lewin 
 +4f157e179134        nginx               "nginx -g 'daemon of…"   4 minutes ago       Exited (03 minutes ago                        stoic_roentgen 
 +04b5ab87539a        ubuntu              "/bin/bash"              8 minutes ago       Exited (0) 8 minutes ago                        i2tch 
 +root@debian9:~# docker stop aabb 
 +aabb 
 +root@debian9:~# docker ps -
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES 
 +aabb064d4b0a        nginx               "nginx -g 'daemon of…"   2 minutes ago       Exited (02 seconds ago                       eager_lewin 
 +4f157e179134        nginx               "nginx -g 'daemon of…"   4 minutes ago       Exited (0) 4 minutes ago                       stoic_roentgen 
 +04b5ab87539a        ubuntu              "/bin/bash"              8 minutes ago       Exited (0) 8 minutes ago                       i2tch 
 +</code>
  
-Lors de son envoie, le message est accompagné de son haché et il est donc possible de garantir son intégrité:+Démarrez de nouveau le conteneur de nginx :
  
-{{:redhat:lx04:crypto6.gif|Cette image issue de Comment Ça Marche (www.commentcamarche.net) est mise à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de l'image, dans les conditions fixées par la licence, tant que cette note apparaît clairement.}} +<code> 
-  +root@debian9:~# docker start aabb 
-  * A la réception du message, le destinataire ou l’utilisateur B calcule le haché du message reçu et le compare avec le haché accompagnant le document.  +aabb 
-  * Si le message ou le haché a été falsifié durant la communication, les deux empreintes ne correspondront pas. +root@debian9:~# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                NAMES 
 +aabb064d4b0a        nginx               "nginx -g 'daemon of…"   3 minutes ago       Up 3 seconds               0.0.0.0:81->80/tcp   eager_lewin 
 +4f157e179134        nginx               "nginx -g 'daemon of…"   4 minutes ago       Exited (0) 4 minutes ago                        stoic_roentgen 
 +04b5ab87539a        ubuntu              "/bin/bash"              9 minutes ago       Exited (0) 8 minutes ago                        i2tch 
 +</code>
  
-<WRAP center round important 50%> +====1.16 - Utiliser des Signaux avec un Conteneur====
-**Important** - Ce système permet de vérifier que l'empreinte correspond bien au message reçu, mais ne permet pas de prouver que le message a bien été envoyé par l’utilisateur A. +
-</WRAP>+
  
-===Signature Numérique===+Utilisez un signal pour tuer le processus du conteneur de nginx :
  
-Pour garantir l'authentification du message l‘utilisateur A va chiffrer ou **signer** le haché à l'aide de sa clé privée. Le haché signé est appelé un **sceau**.+<code> 
 +root@debian9:~# docker kill -s 9 aabb 
 +aabb 
 +root@debian9:~# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES 
 +aabb064d4b0a        nginx               "nginx -g 'daemon of…"   2 hours ago         Exited (137) 2 seconds ago                       eager_lewin 
 +4f157e179134        nginx               "nginx -g 'daemon of…"   2 hours ago         Exited (0) 2 hours ago                           stoic_roentgen 
 +04b5ab87539a        ubuntu              "/bin/bash"              2 hours ago         Exited (0) 2 hours ago                           i2tch 
 +</code>
  
-{{:redhat:lx04:crypto7.gif|Cette image issue de Comment Ça Marche (www.commentcamarche.net) est mise à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de l'image, dans les conditions fixées par la licence, tant que cette note apparaît clairement.}}+Redémarrez un conteneur en cours :
  
-  * L’utilisateur A envoie le sceau au destinataire. +<code> 
-  * A la réception du message L’utilisateur B déchiffre le sceau avec la clé publique de l’utilisateur A. +root@debian9:~# docker start aabb 
-  * Il compare le haché obtenu au haché reçu en pièce jointe+aabb 
-  +root@debian9:~# docker ps -a 
-Ce mécanisme de création de sceau est appelé **scellement**.+CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS                NAMES 
 +aabb064d4b0a        nginx               "nginx -g 'daemon of…"   2 hours ago         Up 1 second              0.0.0.0:81->80/tcp   eager_lewin 
 +4f157e179134        nginx               "nginx -g 'daemon of…"   2 hours ago         Exited (0) 2 hours ago                        stoic_roentgen 
 +04b5ab87539a        ubuntu              "/bin/bash"              2 hours ago         Exited (0) 2 hours ago                        i2tch 
 +root@debian9:~# docker restart aabb 
 +aabb 
 +root@debian9:~# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS                NAMES 
 +aabb064d4b0a        nginx               "nginx -g 'daemon of…"   2 hours ago         Up 2 seconds             0.0.0.0:81->80/tcp   eager_lewin 
 +4f157e179134        nginx               "nginx -g 'daemon of…"   2 hours ago         Exited (0) 2 hours ago                        stoic_roentgen 
 +04b5ab87539a        ubuntu              "/bin/bash"              2 hours ago         Exited (0) 2 hours ago                        i2tch 
 +</code>
  
-Ce mécanisme est identique au procédé utilisé par SSH lors d'une connexion +====1.17 - Forcer la Suppression d'un Conteneur en cours d'Exécution====
  
-===PKI===+Supprimez un conteneur en cours d'exécution :
  
-On appelle **[[wpfr>Public_Key_Infrastructure|PKI]]** (Public Key Infrastucture, ou en français **infrastructure à clé publique (ICP)**, parfois **infrastructure de gestion de clés (IGC)**l’ensemble des solutions techniques basées sur la cryptographie à clé publique.+<code> 
 +root@debian9:~# docker rm aabb 
 +Error response from daemon: You cannot remove a running container aabb064d4b0ade1f19216b6174631fa32a2053f6aa9d59bd724ea90ce534b004. Stop the container before attempting removal or force remove 
 +root@debian9:~# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS                NAMES 
 +aabb064d4b0a        nginx               "nginx -g 'daemon of…"   2 hours ago         Up About a minute        0.0.0.0:81->80/tcp   eager_lewin 
 +4f157e179134        nginx               "nginx -g 'daemon of…"   2 hours ago         Exited (0) 2 hours ago                        stoic_roentgen 
 +04b5ab87539a        ubuntu              "/bin/bash"              2 hours ago         Exited (02 hours ago                        i2tch 
 +root@debian9:~# docker rm -f aabb 
 +aabb 
 +root@debian9:~# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS               NAMES 
 +4f157e179134        nginx               "nginx -g 'daemon of…"   2 hours ago         Exited (02 hours ago                       stoic_roentgen 
 +04b5ab87539a        ubuntu              "/bin/bash"              2 hours ago         Exited (02 hours ago                       i2tch 
 +</code>
  
-Les cryptosystèmes à clés publiques permettent de s'affranchir de la nécessité d'avoir recours systématiquement à un canal sécurisé pour s'échanger les clés. En revanche, la publication de la clé publique à grande échelle doit se faire en toute confiance pour assurer que :+===1.18 - Utilisation Simple d'un Volume===
  
-    * La clé publique est bien celle de son propriétaire ; +Créez le fichier index.html et placez-le dans le répertoire /root/www :
-    * Le propriétaire de la clé est digne de confiance ; +
-    * La clé est toujours valide+
  
-Ainsi, il est nécessaire d'associer au bi-clé (ensemble clé publique clé privée) un certificat délivré par un **tiers de confiance** l'infrastructure de gestion de clés.+<code> 
 +root@debian9:~# mkdir /root/www 
 +root@debian9:~# vi index.html 
 +root@debian9:~# cat index.html 
 +<html> 
 +<body> 
 +<center>Accueil du site nginx</center> 
 +</body> 
 +</html> 
 +root@debian9:~# mv index.html www/ 
 +</code>
  
-Le tiers de confiance est une entité appelée communément autorité de certification (ou en anglais Certification authority, abrégé CA) chargée d'assurer la véracité des informations contenues dans le certificat de clé publique et de sa validité.+Indiquez au conteneur que son répertoire **/usr/share/nginx/html/** est remplacé par le répertoire **/root/www/** de la machine hôte :
  
-Pour ce faire, l'autorité signe le certificat de clé publique à l'aide de sa propre clé en utilisant le principe de signature numérique.+<code> 
 +root@debian9:~# docker run -d -p 81:80 -v /root/www:/usr/share/nginx/html:ro nginx 
 +c080793965de8a6a60db212d7e4d96de84b55352c224c054dced75b409e39bf2 
 +root@debian9:~# lynx --dump http://localhost:81 
 +                            Accueil du site nginx
  
-Le rôle de l'infrastructure de clés publiques est multiple et couvre notamment les champs suivants : 
  
-    * enregistrer des demandes de clés en vérifiant l'identité des demandeurs ; +root@debian9:~#  
-    * générer les paires de clés (clé privée clé publique) ; +</code>
-    * garantir la confidentialité des clés privées correspondant aux clés publiques ; +
-    * certifier l'association entre chaque utilisateurs et sa clé publique ; +
-    * révoquer des clés (en cas de perte par son propriétaire, d'expiration de sa date de validité ou de compromission). +
  
-Une infrastructure à clé publique est en règle générale composée de trois entités distinctes :+<WRAP center round important> 
 +**Important** - Notez ici l'utilisation de **ro** - lecture seule. 
 +</WRAP>
  
-    * L'autorité d'enregistrement (AE ou RA pour Recording authority), chargée des formalité administratives telles que la vérification de l'identité des demandeurs, le suivi et la gestion des demandes, etc.) ; +====1.19 - Télécharger une image sans créer un conteneur====
-    * L'autorité de certification (AC ou CA pour Certification Authority), chargée des tâches techniques de création de certificats. L'autorité de certification est ainsi chargée de la signature des demandes de certificat (CSR pour Certificate Signing Request, parfois appelées PKCS#10, nom du format correspondant). L'autorité de certification a également pour mission la signature des listes de révocations (CRL pour Certificate Revocation List) ; +
-    * L'Autorité de dépôt (Repository) dont la mission est de conserver en sécurité les certificats.+
  
-==Certificats X509==+Téléchargez l'image de centos sans créer un conteneur :
  
-Pour palier aux problèmes liés à des clefs publiques piratées, un système de certificats a été mis en place.+<code> 
 +root@debian9:~# docker pull centos 
 +Using default tag: latest 
 +latest: Pulling from library/centos 
 +8ba884070f61: Pull complete  
 +Digest: sha256:8d487d68857f5bc9595793279b33d082b03713341ddec91054382641d14db861 
 +Status: Downloaded newer image for centos:latest 
 +</code>
  
-Le certificat permet d’associer la clef publique à une entité ou une personne. Les certificats sont délivrés par des Organismes de Certification.+Vérifiez le contenu de l'image en créant un conteneur :
  
-Les certificats sont des fichiers divisés en deux parties +<code> 
 +root@debian9:~# docker run -it centos bash 
 +[root@86252a3f00f4 /]# cat /etc/redhat-release 
 +CentOS Linux release 7.6.1810 (Core)  
 +[root@86252a3f00f4 /]# rpm -qa | more 
 +bind-license-9.9.4-73.el7_6.noarch 
 +bash-4.2.46-31.el7.x86_64 
 +glibc-common-2.17-260.el7_6.3.x86_64 
 +nss-softokn-freebl-3.36.0-5.el7_5.x86_64 
 +filesystem-3.2-25.el7.x86_64 
 +glibc-2.17-260.el7_6.3.x86_64 
 +nspr-4.19.0-1.el7_5.x86_64 
 +popt-1.13-16.el7.x86_64 
 +libcom_err-1.42.9-13.el7.x86_64 
 +libcap-2.22-9.el7.x86_64 
 +libstdc++-4.8.5-36.el7.x86_64 
 +info-5.1-5.el7.x86_64 
 +gawk-4.0.2-4.el7_3.1.x86_64 
 +libselinux-2.5-14.1.el7.x86_64 
 +grep-2.20-3.el7.x86_64 
 +keyutils-libs-1.5.8-3.el7.x86_64 
 +libverto-0.2.5-4.el7.x86_64 
 +p11-kit-trust-0.23.5-3.el7.x86_64 
 +openssl-libs-1.0.2k-16.el7.x86_64 
 +krb5-libs-1.15.1-37.el7_6.x86_64 
 +xz-libs-5.2.2-1.el7.x86_64 
 +libdb-5.3.21-24.el7.x86_64 
 +libgpg-error-1.12-3.el7.x86_64 
 +libgcrypt-1.5.3-14.el7.x86_64 
 +lua-5.1.4-15.el7.x86_64 
 +libuuid-2.23.2-59.el7.x86_64 
 +libmount-2.23.2-59.el7.x86_64 
 +shared-mime-info-1.8-4.el7.x86_64 
 +gzip-1.5-10.el7.x86_64 
 +findutils-4.5.11-6.el7.x86_64 
 +diffutils-3.3-4.el7.x86_64 
 +expat-2.1.0-10.el7_3.x86_64 
 +audit-libs-2.8.4-4.el7.x86_64 
 +pam-1.1.8-22.el7.x86_64 
 +nss-softokn-3.36.0-5.el7_5.x86_64 
 +nss-3.36.0-7.1.el7_6.x86_64 
 +libassuan-2.1.0-3.el7.x86_64 
 +nss-tools-3.36.0-7.1.el7_6.x86_64 
 +gobject-introspection-1.56.1-1.el7.x86_64 
 +--More-- 
 +</code>
  
-  * La partie contenant les informations  +====1.20 - S'attacher à un conteneur en cours d'exécution====
-  * La partie contenant la signature de l'autorité de certification+
  
-La structure des certificats est normalisée par le standard **[[wpfr>X.509|X.509]]** de l’**[[wpfr>UIT|Union internationale des télécommunications]]**+Arretez le conteneurDémarrez le conteneur puis rattachez-vous au conteneur :
  
-Elle contient +<code> 
 +[root@86252a3f00f4 /]# exit 
 +exit 
 +root@debian9:~# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                       PORTS                NAMES 
 +86252a3f00f4        centos              "bash"                   About a minute ago   Exited (127) 6 seconds ago                        vibrant_mccarthy 
 +c080793965de        nginx               "nginx -g 'daemon of…"   4 minutes ago        Up 4 minutes                 0.0.0.0:81->80/tcp   suspicious_sanderson 
 +4f157e179134        nginx               "nginx -g 'daemon of…"   3 hours ago          Exited (0) 3 hours ago                            stoic_roentgen 
 +04b5ab87539a        ubuntu              "/bin/bash"              3 hours ago          Exited (0) 3 hours ago                            i2tch 
 +root@debian9:~# docker start 8625 
 +8625 
 +root@debian9:~# docker attach 8625 
 +[root@86252a3f00f4 /]# ls 
 +anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var 
 +[root@86252a3f00f4 /]#  
 +</code>
  
-  * Le nom de l'autorité de certification  +====1.21 - Installer un logiciel dans le conteneur===
-  * Le nom du propriétaire du certificat  +
-  * La date de validité du certificat  +
-  * L'algorithme de chiffrement utilisé  +
-  * La clé publique du propriétaire +
  
-Le Certificat est signé par l'autorité de certification:+Créez le fichier **/etc/yum.repos.d/mongodb-org-4.2.repo** :
  
-{{:redhat:lx04:crypto8.gif|Cette image issue de Comment Ça Marche (www.commentcamarche.net) est mise à disposition sous les termes de la licence Creative CommonsVous pouvez copier, modifier des copies de l'image, dans les conditions fixées par la licence, tant que cette note apparaît clairement.}}+<code> 
 +[root@86252a3f00f4 /]# vi /etc/yum.repos.d/mongodb-org-4.2.repo 
 +[root@86252a3f00f4 /]# cat /etc/yum.repos.d/mongodb-org-4.2.repo 
 +[mongodb-org-4.2] 
 +name=MongoDB Repository 
 +baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/ 
 +gpgcheck=1 
 +enabled=1 
 +gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc 
 +[root@86252a3f00f4 /]#  
 +</code>
  
-La vérification se passe ainsi:+Installez mongo :
  
-{{:redhat:lx04:crypto9.gif|Cette image issue de Comment Ça Marche (www.commentcamarche.net) est mise à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de l'image, dans les conditions fixées par la licence, tant que cette note apparaît clairement.}}+<code> 
 +[root@86252a3f00f4 /]# yum install -y mongodb-org 
 +</code>
  
-=====LAB #2 - Utilisation de GnuPG=====+Démarrez mongod :
  
-====2.1 - Présentation====+<code> 
 +[root@86252a3f00f4 /]# mongod --config /etc/mongod.conf & 
 +[1] 82 
 +[root@86252a3f00f4 /]# about to fork child process, waiting until server is ready for connections. 
 +forked process: 84 
 +child process started successfully, parent exiting
  
-**GNU Privacy Guard** permet aux utilisateurs de transférer des messages chiffrés et/ou signés.+[1]+  Done                    mongod --config /etc/mongod.conf 
 +[root@86252a3f00f4 /]#   
 +</code>
  
-====2.2 - Utilisation==== +Vérifiez que mongod est démarré :
- +
-Pour initialiser %%GnuPG%%, saisissez la commande suivante :+
  
 <code> <code>
-root@debian12:~gpg +[root@86252a3f00f4 /]ps aux 
-gpg: directory '/root/.gnupg' created +USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND 
-gpg: keybox '/root/.gnupg/pubring.kbx' created +root         1  0.0  0.1  11828  2996 pts/0    Ss   16:57   0:00 bash 
-gpgWARNINGno command supplied.  Trying to guess what you mean ... +root        84  1. 2.2 294692 46716 ?        Sl   17:16   0:00 mongod --config /etc/mongod.conf 
-gpgGo ahead and type your message ... +root       103  0.0  0.1  51748  3444 pts/0    R+   17:17   0:00 ps aux
-^C +
-gpg: signal Interrupt caught ... exiting+
 </code> </code>
  
-<WRAP center round important 50%> +Utilisez le client mongo pour se connecter au serveur :
-**Important** - Notez l'utilisation des touches **^C** après la ligne **gpgGo ahead and type your message ...**. +
-</WRAP>+
  
-Pour générer les clefssaisissez la commande suivante :+<code> 
 +[root@86252a3f00f4 /]# mongo 
 +MongoDB shell version: 4.2.2 
 +connecting to: test 
 +Welcome to the MongoDB shell. 
 +For interactive helptype "help"
 +For more comprehensive documentation, see 
 + http://docs.mongodb.org/ 
 +Questions? Try the support group 
 + http://groups.google.com/group/mongodb-user 
 +Server has startup warnings:  
 +2019-04-09T17:16:26.951+0000 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended. 
 +2019-04-09T17:16:26.951+0000 I CONTROL  [initandlisten]  
 +>  
 +</code>
  
-<WRAP center round important 50%> +Sortez de mongo et du conteneur :
-**Important** - Lorsque le système vous demande une Passphrase, saisissez une valeur que n'allez **PAS** oublié. +
-</WRAP>+
  
 <code> <code>
-root@debian12:~gpg --full-generate-key +> exit 
-gpg (GnuPG) 2.2.40; Copyright (C) 2022 g10 Code GmbH +bye 
-This is free softwareyou are free to change and redistribute it. +[root@86252a3f00f4 /]exit 
-There is NO WARRANTY, to the extent permitted by law.+exit 
 +root@debian9:~#  
 +</code>
  
-Please select what kind of key you want: +====1.22 - Utilisation de la commande docker commit====
-   (1) RSA and RSA (default) +
-   (2) DSA and Elgamal +
-   (3) DSA (sign only) +
-   (4) RSA (sign only) +
-  (14) Existing key from card +
-Your selection? 1 +
-RSA keys may be between 1024 and 4096 bits long. +
-What keysize do you want? (3072)  +
-Requested keysize is 3072 bits +
-Please specify how long the key should be valid. +
-         0 = key does not expire +
-      <n>  key expires in n days +
-      <n>key expires in n weeks +
-      <n>key expires in n months +
-      <n>key expires in n years +
-Key is valid for? (0)  +
-Key does not expire at all +
-Is this correct? (y/N) y+
  
-GnuPG needs to construct a user ID to identify your key.+Créez maintenant une nouvelle image à partir de votre conteneur :
  
-Real name: ITTRAINING +<code> 
-Email address: infos@ittraining.team +root@debian9:~# docker ps -
-CommentTest key +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                NAMES 
-You selected this USER-ID: +86252a3f00f4        centos              "bash"                   23 minutes ago      Exited (056 seconds ago                        vibrant_mccarthy 
-    "ITTRAINING (Test key<infos@ittraining.team>"+c080793965de        nginx               "nginx -g 'daemon of…"   26 minutes ago      Up 26 minutes               0.0.0.0:81->80/tcp   suspicious_sanderson 
 +4f157e179134        nginx               "nginx -g 'daemon of…"   3 hours ago         Exited (0) 3 hours ago                           stoic_roentgen 
 +04b5ab87539a        ubuntu              "/bin/bash"              3 hours ago         Exited (0) 3 hours ago                           i2tch 
 +root@debian9:~# docker commit 8625 i2tch/mongodb 
 +sha256:67afc80e1424a6d99179911ee499f6bf264faf2bc3c7ff4ac4a01ff9c23050a9 
 +</code>
  
-Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?+Supprimez le conteneur utilisé pour créer l'image :
-We need to generate a lot of random bytes. It is a good idea to perform +
-some other action (type on the keyboard, move the mouse, utilize the +
-disks) during the prime generation; this gives the random number +
-generator a better chance to gain enough entropy. +
-We need to generate a lot of random bytes. It is a good idea to perform +
-some other action (type on the keyboard, move the mouse, utilize the +
-disks) during the prime generation; this gives the random number +
-generator a better chance to gain enough entropy. +
-gpg: /root/.gnupg/trustdb.gpg: trustdb created +
-gpg: directory '/root/.gnupg/openpgp-revocs.d' created +
-gpgrevocation certificate stored as '/root/.gnupg/openpgp-revocs.d/B6022CC107539B4036A90FAEABAD13CD27F9E686.rev' +
-public and secret key created and signed.+
  
-pub   rsa3072 2025-11-28 [SC] +<code> 
-      B6022CC107539B4036A90FAEABAD13CD27F9E686 +root@debian9:~# docker rm 8625 
-uid                      ITTRAINING (Test key) <infos@ittraining.team> +8625 
-sub   rsa3072 2025-11-28 [E]+root@debian9:~# docker ps -
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS                NAMES 
 +c080793965de        nginx               "nginx -g 'daemon of…"   28 minutes ago      Up 28 minutes            0.0.0.0:81->80/tcp   suspicious_sanderson 
 +4f157e179134        nginx               "nginx -g 'daemon of…"   3 hours ago         Exited (0) 3 hours ago                        stoic_roentgen 
 +04b5ab87539a        ubuntu              "/bin/bash"              3 hours ago         Exited (0) 3 hours ago                        i2tch
 </code> </code>
  
-La liste de clefs peut être visualisée avec la commande suivante :+Utilisez la nouvelle image pour lancer un conteneur nommé **mongo** :
  
 <code> <code>
-root@debian12:~# gpg --list-keys +root@debian9:~# docker run -it --name mongo i2tch/mongodb 
-gpg: checking the trustdb +[root@d20fb56a38b0 /]# ls /usr/bin/mongo* 
-gpg: marginals needed: 3  completes needed: 1  trust model: pgp +/usr/bin/mongo   /usr/bin/mongodump    /usr/bin/mongofiles   /usr/bin/mongooplog  /usr/bin/mongorestore  /usr/bin/mongostat 
-gpg: depth: 0  valid:    signed:    trust: 0-, 0q, 0n, 0m, 0f, 1u +/usr/bin/mongod  /usr/bin/mongoexport  /usr/bin/mongoimport  /usr/bin/mongoperf   /usr/bin/mongos        /usr/bin/mongotop 
-/root/.gnupg/pubring.kbx +[root@d20fb56a38b0 /]# ps aux 
------------------------- +USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND 
-pub   rsa3072 2025-11-28 [SC+root          0.1  0.1  11828  2972 pts/0    Ss   17:22   0:00 bash 
-      B6022CC107539B4036A90FAEABAD13CD27F9E686 +root        15  0.0  0.1  51748  3468 pts/0    R+   17:23   0:00 ps aux
-uid           [ultimate] ITTRAINING (Test key) <infos@ittraining.team> +
-sub   rsa3072 2025-11-28 [E]+
 </code> </code>
  
-Pour importer la clef d'un correspondant dans sa trousse de clefs il convient d'utiliser la commande suivante :+Editez le fichier /etc/bashrc :
  
-<WRAP center round important 50%+<code
-**Important** La commande suivante est un exemple. Ne la saisissez **PAS**+[root@d20fb56a38b0 /]# echo "/usr/bin/mongod --config /etc/mongod.conf &" >> /etc/bashrc 
-</WRAP>+[root@d20fb56a38b0 /]# tail /etc/bashrc 
 +                . "$i" >/dev/null 
 +            fi 
 +        fi 
 +    done
  
-  # gpg --import la-clef.asc+    unset i 
 +    unset -f pathmunge 
 +fi 
 +# vim:ts=4:sw=4 
 +/usr/bin/mongod --config /etc/mongod.conf & 
 +</code>
  
-Pour exporter sa clef publique, il convient d'utiliser la commande suivante :+Consultez la liste des conteneurs et relevez le CONTAINER ID du conteneur **mongo** :
  
 <code> <code>
-root@debian12:~# gpg --export --armor ITTRAINING ~/mykey.asc+[root@d20fb56a38b0 /]# exit 
 +exit 
 +root@debian9:~# docker ps -
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                NAMES 
 +d20fb56a38b0        i2tch/mongodb       "bash"                   2 minutes ago       Exited (0) 4 seconds ago                        mongo 
 +c080793965de        nginx               "nginx -g 'daemon of…"   32 minutes ago      Up 32 minutes              0.0.0.0:81->80/tcp   suspicious_sanderson 
 +4f157e179134        nginx               "nginx -g 'daemon of…"   3 hours ago         Exited (0) 3 hours ago                          stoic_roentgen 
 +04b5ab87539a        ubuntu              "/bin/bash"              3 hours ago         Exited (0) 3 hours ago                          i2tch 
 +</code>
  
-root@debian12:~# cat mykey.asc +Utilisez la commande commit pour "sauvegarder" la modification dans l'image :
------BEGIN PGP PUBLIC KEY BLOCK-----+
  
-mQGNBGkpk+gBDACq6M7rUNQFu/R6J+1p3RAB1+gwnszs/jZuBAo6y9i1buBsySP9 +<code> 
-oV9JmFfRe4P2QG/mgmSaGgeO0sE5m+r2Jhif2fShjHYLd6VTSVZRyfO+NW3MDbkm +root@debian9:~# docker commit d20f i2tch/mongodb 
-MtIf4LlXRrTALGE5TclLWFz5a2iqRjtT8IjSPAu1M9TLUaMXtWXN6jQY1YOnjxPN +sha256:620057baa411b78a0030e192fdfbde0bb0c5ceae7bdeb115892d9946e542ee07
-3HL8bwdaY0k8icKr8JRbmEijCWo2F4t2qTtdOXuRFAImxBpX49eJR0oC5bzXZPYx +
-LbirNsEwSULIyQ71gdF5OUb0aOSiQLXLuTLAs2BnxAJ82tB/dM8qP0ez0lXLJvvF +
-+t0eHdWzUHH4qlXuNtBXK7pEbvjqftO69PJLDp/PwjEfUsELcxDyUFpphhZDJ8zN +
-qvRgll3fojjr91WWWqr8YTd4EiTvq9KfUyAiTOfKm8k4iRQRTJir267Fq8Mno8/+
-My1tNeHWzCXMs3k/GKyi36Uu15wY50hRTPDYexa+aou0QEs4iY3EXjzaOD3BVvRQ +
-XTBUX/CS3ZmLC3MAEQEAAbQtSVRUUkFJTklORyAoVGVzdCBrZXkpIDxpbmZvc0Bp +
-dHRyYWluaW5nLnRlYW0+iQHOBBMBCgA4FiEEtgIswQdTm0A2qQ+uq60TzSf55oYF +
-Amkpk+gCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQq60TzSf55oZEsAv+ +
-Ky14vHWjMzU1ieE+XStqGYfjfAHhaNrpkWCz6miozuh+ESifNWpJd96bzwgNLGob +
-E5mA9oja5jyAEQUGT+gEwgvkbYVe4sf4UcXPRrvDqKiEOkN5rra3kYYdhHhpiFes +
-BmwQvW2dyElNO1ee/zzQOZ0Hd3vM/vdbmZRg8zKoV5eQz/MA2jpxF9IkXEDtUMzZ +
-C5kqTMRXdoWR2ZP2HLZjUstRX7d9BP/8oeg+2lMq9UlULWrYyVaD85dEAmCt9mQz +
-TqtAMmtp5IXalT+vKwhMu0MwUfyXyvl7ery4kxfmFtEeJQyxrdK2gihDxr0ndxBH +
-mowlIoBiGYMhUr/aF0lM00blpRAUoGv1rO2DUWh8TXzRJq6FJ4pzo9XRwR0dP7A6 +
-VBlBdhX2SlE9XJOjLq9ppV5Vr9u6ZauwEI6kBLoagjWOF3t34Gnvel8zO+H5fhhq +
-UKMOAbC0SYmLVIPNUauHYoKiJlWb+Dlr96NsPm0sYBbB047hr0evBUmkJNrulI3N +
-uQGNBGkpk+gBDADZu1B0itmBIGzxjGmUjK9UagW3HNLNVX3jn2Jwe7yl3vL/d3Fk +
-qBRydky32P4whbUSiJN71Tze9l+WOxeXGa0orKPPha/oQtlnmqyM6WBfOmvjSQkn +
-xCrS131SYjFb5dcQXoqTtUk8Wu4qoMHu/Mi9jtx8GrrENWzR7DFG2MDWwcM4TmUk +
-zs6azU/jaQX/YrGmYU3vB/zpKEZSo89pJ/S2FQ/6Fr+nnh7El3thNJxLRH40UlZs +
-FIpfm95Q+wtC224wckro/Xf/+t7oBssSqCZEkCItN+AlDpm13h161dypVRpC1M5Y +
-IITHq92gQSAKFhwSauaPtJ++oQNRgz5vJhCg78XfyBGpwDS6P0NM5RVEz6LMhQzI +
-4LziGmYH/iWj0pv45Uze7hOZaWhBPlPWFixJ97nl3soxA7hV1MLt/Ohy5jxGC8U3 +
-CrtEjyAIQxCmEUF0vPa7X1KB+FxCpJ8mYXBZ5w1DwBN7qsOnnHZKFcaPGW8r1am6 +
-Ab25ee028mua9RkAEQEAAYkBtgQYAQoAIBYhBLYCLMEHU5tANqkPrqutE80n+eaG +
-BQJpKZPoAhsMAAoJEKutE80n+eaGCRgMAJiG7Q8oF6oMkn6Xh7kXVH2yF4CKN9/+
-/qtImK/ikn14+/QNYpUbF4kIGadeCVgpKZZ+R9QLXTW7WQV4hgoOW3yiET3FTEBc +
-YoxDxegwlk9+gPiOMJ0+9R43IUs+jFrra1jcUpSg+1Nv2IijdPwape3HyPhYgDmZ +
-VxORrNtqBCkhtLpJO5VTiThAny+rNBHk1t1vQg4tEkCLGcOD8bsdxhACZnM0DVYY +
-rA6afeDnm7CTfVtc3QFAi2+ltYcDIrMxMF0b1VASlbU14TE6ep2Ic30ScpDJL8De +
-skhWi2/0v2WwhbmdGzfv5K5V3Z6NtoB3OUaHzKqzgEQeqjudgRaL440UsDtEFRHE +
-vh6kVR0MPTFjg+8khUjjrSYUzqiiK6iJDxn+m0XJvHzQTeCHQlgRrPj9HGp7isyK +
-o9Wf8fVvnksR8xc/2NcJwp0fo7ULwdADjgMtPUR155ukI8Xt9Aws+5OsYrIxBMMc +
-DTh6aJal6iGcG4aXbTzwIFXHW9WipS5B4A== +
-=rrxA +
------END PGP PUBLIC KEY BLOCK-----+
 </code> </code>
  
-Cette clef peut ensuite être jointe à des messages électroniques ou bien déposée sur un serveur de clefs tel http://www.keyserver.net. +Démarrez de nouveau le conteneur pour vérifier que mongod fonctionne :
- +
-===Signer un message=== +
- +
-Créez maintenant un message à signer :+
  
 <code> <code>
-root@debian12:~# vi message.txt+root@debian9:~# docker rm d20f 
 +d20f 
 +root@debian9:~# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS                NAMES 
 +c080793965de        nginx               "nginx -g 'daemon of…"   33 minutes ago      Up 33 minutes            0.0.0.0:81->80/tcp   suspicious_sanderson 
 +4f157e179134        nginx               "nginx -g 'daemon of…"   3 hours ago         Exited (0) 3 hours ago                        stoic_roentgen 
 +04b5ab87539a        ubuntu              "/bin/bash"              3 hours ago         Exited (0) 3 hours ago                        i2tch 
 +root@debian9:~# docker run -it --name mongo i2tch/mongodb 
 +[root@bcec3f27ed58 /]# about to fork child process, waiting until server is ready for connections. 
 +forked process: 16 
 +child process started successfully, parent exiting
  
-root@debian12:~cat message.txt +[1]+  Done                    /usr/bin/mongod --config /etc/mongod.conf 
-# ~/message.txt +[root@bcec3f27ed58 /]ps aux 
-Ceci est un message de test pour GnuPG+USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND 
 +root          0.0  0.1  11828  2920 pts/0    Ss   17:26   0:00 bash 
 +root        16  2.0  2.4 298788 49276 ?        Sl   17:26   0:01 /usr/bin/mongod --config /etc/mongod.conf 
 +root        39  0.0  0.1  51748  3476 pts/0    R+   17:27   0:00 ps aux 
 +[root@bcec3f27ed58 /]# 
 </code> </code>
  
-Pour signer ce message en format binaire, il convient d'utiliser la commande suivante :+====1.23 - Se connecter au serveur du conteneur de l'extérieur====
  
-<WRAP center round important 50%> +Pour pouvoir se connecter à mongodb depuis la machine hôte, il convient d'éditer le fichier /etc/mongod.conf :
-**Important** - Entrez votre Passphrase quand gpg vous la demande. +
-</WRAP>+
  
 <code> <code>
-root@debian12:~gpg --default-key ITTRAINING --detach-sign message.txt +[root@bcec3f27ed58 /]vi /etc/mongod.conf 
-gpgusing "ITTRAINING" as default secret key for signing+[root@bcec3f27ed58 /]# cat /etc/mongod.conf | grep bindIp 
 +   bindIp0.0.0.0 
 +</code>
  
-root@debian12:~# ls -l | grep message +Sortez du conteneur, re-créez une image, supprimez le conteneur utilisé et relancez de nouveau le conteneur :
--rw-r--r-- 1 root    root         55 Nov 28 13:28 message.txt +
--rw-r--r-1 root    root        461 Nov 28 13:28 message.txt.sig+
  
-root@debian12:~# cat message.txt.sig+<code> 
 +[root@bcec3f27ed58 /]# exit 
 +exit 
 +root@debian9:~# docker commit mongo i2tch/mongodb 
 +sha256:eca7835d4fe6a3a769046bd735ef4ad7534ac1f9bb37832d6da5db3b938d258f 
 +root@debian9:~# docker rm mongo 
 +mongo 
 +root@debian9:~# docker run -it --name mongo i2tch/mongodb 
 +[root@d2ddb4f8ca8a /]# about to fork child process, waiting until server is ready for connections. 
 +forked process: 16 
 +[root@d2ddb4f8ca8a /]# child process started successfully, parent exiting
  
-4!,S@6'i)infos@ittraining.team +[1]+  Done                    /usr/bin/mongod --config /etc/mongod.conf 
-        '| +[root@d2ddb4f8ca8a /]# 
-                M<~,#5@^0F6ܝӎl`6fA(897>"Bj\     N!M.=F[3tC"%Fk@{6ƒbbEcc2'Smhlwmޚ)<AICA$U^*DPI0ʘ)'p-4d{EiU\P`9}%L0RНGڕ(-y$i'fǬCBH^c      ;pQbٜbJeqKh7I/6FLc7kUi}/%3xeOv;i13Ĭ+
 </code> </code>
  
-Pour signer ce message en format asciiil convient d'utiliser la commande suivante :+Dans votre machine hôteconfigurez le dépôt de mongodb :
  
 <code> <code>
-root@debian12:~#  gpg --default-key ITTRAINING --armor --detach-sign message.txt+[root@f5b45072b831 /]# exit 
 +root@debian9:~# 
 +root@debian9:~# apt-get install dirmngr 
 +root@debian9:~# 
 +root@debian9:~# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4 
 +Executing: /tmp/apt-key-gpghome.xMuszKS6JM/gpg.1.sh --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4 
 +gpg: key 68818C72E52529D4: public key "MongoDB 4.0 Release Signing Key <packaging@mongodb.com>" imported 
 +gpg: Total number processed: 1 
 +gpg:               imported:
 +root@debian9:~#  
 +root@debian9:~# echo "deb http://repo.mongodb.org/apt/debian stretch/mongodb-org/4.0 main" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list 
 +deb http://repo.mongodb.org/apt/debian stretch/mongodb-org/4.0 main 
 +root@debian9:~#  
 +root@debian9:~# apt-get update 
 +</code>
  
-gpgusing "ITTRAINING" as default secret key for signing+Cette fois, installez uniquement le client de mongodb :
  
-root@debian12:~# ls -l | grep message +<code> 
--rw-r--r-- 1 root    root         55 Nov 28 13:28 message.txt +root@debian9:~# apt-get install mongodb-org-shell 
--rw-r--r-- 1 root    root        691 Nov 28 13:31 message.txt.asc +Lecture des listes de paquets... Fait 
--rw-r--r-- 1 root    root        461 Nov 28 13:28 message.txt.sig +Construction de l'arbre des dépendances        
- +Lecture des informations d'état... Fait 
-root@debian12:~# cat message.txt.asc +Les NOUVEAUX paquets suivants seront installés : 
------BEGIN PGP SIGNATURE----- +  mongodb-org-shell 
- +0 mis à jour, nouvellement installés, 0 à enlever et 95 non mis à jour. 
-iQHKBAABCgA0FiEEtgIswQdTm0A2qQ+uq60TzSf55oYFAmkplgkWHGluZm9zQGl0 +Il est nécessaire de prendre 9 809 ko dans les archives
-dHJhaW5pbmcudGVhbQAKCRCrrRPNJ/nmhiteC/kBXVFzjOQYIzdt4ALI37gCmd7x +Après cette opération, 39,8 Mo d'espace disque supplémentaires seront utilisés. 
-Ml72F9permfoLc83fj+zZfigUxZe4DHx0TslVtFhntkg+7wF1H3MmUyKOhwCXFO4 +Réception de:1 http://repo.mongodb.org/apt/debian stretch/mongodb-org/4.0/main amd64 mongodb-org-shell amd64 4.0.8 [9 809 kB] 
-ccyE9/DDJR384muuAP1q05bnXz0SHkTQaXVteCvAfHB8kzqQg04ePCBcIWK6YQVv +9 809 ko réceptionnés en 7s (1 245 ko/s)                                                                                                                                 
-MBVm2O4pFDXWu1+0S69YnAelElZrzoqCaqprkQCcJvekBSV2NUNPLcwcBGq966+q +Sélection du paquet mongodb-org-shell précédemment désélectionné. 
-T9bGxPtW/5oTaPfFRzWwT/47ajpB66v3kEyGlc+gMpD4PFKZhLoEpgpByBWRWvhm +(Lecture de la base de données... 91513 fichiers et répertoires déjà installés.) 
-ZQsz2eby3oyv5KduA2emMnstQGCBq6zukYUpTgtzXB6jF1S71okiow11NsPra0m+ +Préparation du dépaquetage de .../mongodb-org-shell_4.0.8_amd64.deb ... 
-9CAcg3tiylnkUJEgsvfZ45uctN+2UqBNAXMgVsHGUhJtugfPzfwWpfC/BMMdLS46 +Dépaquetage de mongodb-org-shell (4.0.8) ... 
-g2nTttJexAGjjtw4Y0uFIYbNI0xXeH8ooh0AgQcXS5IOVH2zYs0GIdMxzRYFhRmc +Paramétrage de mongodb-org-shell (4.0.8) ... 
-nVRd/mHfQ21Mi1C5AnxDkqx6RpeH1maaLsPOFlo= +Traitement des actions différées (« triggers ») pour man-db (2.7.6.1-2) ...
-=2N1N +
------END PGP SIGNATURE----- +
 </code> </code>
  
-Pour signer ce message **dans le message lui-même** en format ascii, il convient d'utiliser la commande suivante :+Notez qu'à ce stade le conteneur ne possède pas d'adresse IP car il n'est pas démarré :
  
 <code> <code>
-root@debian12:~# gpg --default-key ITTRAINING --clearsign message.txt +root@debian9:~# docker inspect mongo | grep IP 
-gpgusing "ITTRAININGas default secret key for signing +            "LinkLocalIPv6Address": "", 
-File 'message.txt.asc' exists. Overwrite? (y/N) y +            "LinkLocalIPv6PrefixLen": 0, 
- +            "SecondaryIPAddresses": null, 
-root@debian12:~# ls -l | grep message +            "SecondaryIPv6Addresses"null, 
--rw-r--r-- 1 root    root         55 Nov 28 13:28 message.txt +            "GlobalIPv6Address""", 
--rw-r--r-- 1 root    root        795 Nov 28 13:33 message.txt.asc +            "GlobalIPv6PrefixLen"0, 
--rw-r--r-- 1 root    root        461 Nov 28 13:28 message.txt.sig+            "IPAddress""", 
 +            "IPPrefixLen": 0, 
 +            "IPv6Gateway": "", 
 +                    "IPAMConfig": null, 
 +                    "IPAddress": "", 
 +                    "IPPrefixLen": 0, 
 +                    "IPv6Gateway": "", 
 +                    "GlobalIPv6Address": "", 
 +                    "GlobalIPv6PrefixLen": 0, 
 +</code>
  
-root@debian12:~# cat message.txt.asc +Démarrez donc le conteneur et cherchez l'adresse IP de celui-ci :
------BEGIN PGP SIGNED MESSAGE----- +
-HashSHA512+
  
-# ~/message.txt +<code> 
-Ceci est un message de test pour GnuPG +root@debian9:~docker start mongo 
------BEGIN PGP SIGNATURE----- +mongo 
- +root@debian9:~# docker inspect mongo | grep IP 
-iQHKBAEBCgA0FiEEtgIswQdTm0A2qQ+uq60TzSf55oYFAmkplpsWHGluZm9zQGl0 +            "LinkLocalIPv6Address": "", 
-dHJhaW5pbmcudGVhbQAKCRCrrRPNJ/nmhopQC/wJYnC83AnA54x9O9FzHIQ0YVqO +            "LinkLocalIPv6PrefixLen": 0, 
-QzcoDIIDMF71lizXIQ4DL2GCKhO3pelEWfyofUxd1sddT2qIHIsRTULaqHPRRjOU +            "SecondaryIPAddresses": null, 
-9e/Wm9i65aUnQ/o5oDLSuHooi/r3HYPr8tHDhNSXT81a/QQ0BYVpMHVW/LREtw+L +            "SecondaryIPv6Addresses": null, 
-qNPNlSZ4kzim3LyASyg8SYTGfft35S1S+7bjoY7LHfJUlGuSFRtlDMlhTbrrDqhI +            "GlobalIPv6Address": "", 
-S3TL6EeNFCdEVoxCPamsAKvuk4BV8Fe2rCjQqm/D6f0l+bgdnGFnd5y+nCiz0xXF +            "GlobalIPv6PrefixLen": 0, 
-i7lQkZz+IjoTqwrjboL1mPWt6DMgiBX0IWas4kxKiBeZzyDZm6HGNeeMsqnReTcR +            "IPAddress": "172.17.0.3", 
-TPNM9FdDmpcxYzrRbYAoWTmdhiPdD/aXPEp+McyNIwwHgduUWuRGcifP2PVw6j0N +            "IPPrefixLen": 16, 
-i3yOFw/rJEZMQnjwuL0GUSO3o8j1WMcSsTOHqsgu5FSKSjiIelNK2gzHTkuFiJ/7 +            "IPv6Gateway": "", 
-scYMCHrlrUfErpkLD1H6eFhSA4StmdZPmAA5DBA= +                    "IPAMConfig": null, 
-=07RM +                    "IPAddress": "172.17.0.3", 
------END PGP SIGNATURE-----+                    "IPPrefixLen": 16, 
 +                    "IPv6Gateway": "", 
 +                    "GlobalIPv6Address": "", 
 +                    "GlobalIPv6PrefixLen": 0,
 </code> </code>
  
-Pour vérifier la signature d'un message signé en mode ascii, il convient d'utiliser la commande :+Connectez-vous maintenant à votre mongodb à partir de la machine hôte :
  
 <code> <code>
-root@debian12:~# gpg --verify message.txt.asc +root@debian9:~# mongo --host 172.17.0.3 
-gpgSignature made Fri 28 Nov 2025 01:33:31 PM CET +MongoDB shell version v4.0.8 
-gpg               using RSA key B6022CC107539B4036A90FAEABAD13CD27F9E686 +connecting tomongodb://172.17.0.3:27017/?gssapiServiceName=mongodb 
-gpg               issuer "infos@ittraining.team" +WARNINGNo implicit session: Logical Sessions are only supported on server versions 3.6 and greater. 
-gpgGood signature from "ITTRAINING (Test key) <infos@ittraining.team>[ultimate] +Implicit sessiondummy session 
-gpg: WARNING: not a detached signature; file 'message.txt' was NOT verified!+MongoDB server version: 4.2.2 
 +WARNINGshell and server versions do not match 
 +Welcome to the MongoDB shell. 
 +For interactive help, type "help". 
 +For more comprehensive documentation, see 
 + http://docs.mongodb.org/ 
 +Questions? Try the support group 
 + http://groups.google.com/group/mongodb-user 
 +Server has startup warnings:  
 +2019-04-09T17:31:33.827+0000 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended. 
 +2019-04-09T17:31:33.827+0000 I CONTROL  [initandlisten]  
 +>   
 </code> </code>
  
-<WRAP center round important 50%> +=====LAB #2 Création d'un Utilisateur de Confiance pour Contrôler le Daemon Docker=====
-**Important** Pour vérifier la signature d'un message signé en mode ascii et produit en dehors du message lui-même, il convient d'utiliser la commande :+
  
-  # gpg --verify message.txt.asc message.txt +Au contraire des solutions classiques de gestion de machines virtuelles où l'accès est souvent conditionné à l'attribution de rôles, Docker ne possède pas ce type de mécanismeDe ce fait toute personne ayant accès à l'hôte soit par **sudo** soit en étant membre du groupe **docker** peut accéder à tous les conteneurs voire les arrêter, supprimer et en créer d'autres.
-</WRAP>+
  
-===Chiffrer un message===+<code> 
 +root@debian9:~# cat /etc/group | grep docker 
 +docker:x:999: 
 +root@debian9:~# usermod -aG docker trainee 
 +root@debian9:~# exit 
 +déconnexion 
 +trainee@manager:~$ docker ps 
 +Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/json: dial unix /var/run/docker.sock: connect: permission denied 
 +trainee@manager:~$ newgrp docker 
 +trainee@manager:~$ docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                 NAMES 
 +d02c6115724c        alpine              "/bin/sh"                6 days ago          Exited (0) 6 days ago                               alpine1 
 +trainee@manager:~$ docker rm alpine1 
 +alpine1 
 +trainee@manager:~$ docker run -d --name alpine1 alpine sleep 99999 
 +a214e2df0499c97e8da25a6c9ea751ac75344c9bcd7d238f8cb8d5c777510ab9 
 +trainee@manager:~$ docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES 
 +a214e2df0499        alpine              "/bin/sh"           6 seconds ago       Up 5 seconds                            alpine1 
 +</code>
  
-Pour chiffrer un message, il faut disposer de la clef publique du destinataire du messageCe dernier utilisera ensuite sa clef privée pour déchiffrer le message. Il convient de préciser le destinataire du message, ou plus précisément la clef publique à utiliser, lors d'un chiffrement :+=====LAB #3 - Le Script docker-bench-security.sh=====
  
-    gpg --recipient <destinataire> --encrypt <message>+Le **Center for Internet Security (CIS)** est une organisation indépendante à but non-lucratif qui publie des best practices dans de nombreux domaines de l'informatique. Le guide pour Docker peut être téléchargé à partir de l'adresse [[https://www.cisecurity.org/benchmark/docker/]].
  
-  * //<destinataire>// représente toute information permettant de distinguer sans ambigüité une clef publique dans votre trousseau. Cette information peut-être le nom ou l'adresse email associé à la clef publique que vous voulez utiliser,  +Le guide est divisé en plusieurs sections :
-  * //<message>// représente le message à chiffrer.+
  
-Par exemple pour chiffrer un message en mode binaireil convient de saisir la commande suivante :+  * La configuration de l'hôte Docker, 
 +  * La configuration du daemon Docker, 
 +  * Les fichiers de configuration du daemon Docker, 
 +  * Les images ainsi que les fichiers servant à la construction des images, 
 +  * Le container runtime, 
 +  * Les opérations sécuritaires relatives à Docker, 
 +  * La configuration de Docker Swarm.
  
-<code> +Ce guide est à utiliser avec le script **Docker Benchmark Security**.
-root@debian12:~# gpg --recipient ITTRAINING --encrypt message.txt+
  
-root@debian12:~# ls -l | grep message +Clonez le script **docker-bench-security.sh** en utilisant **git** :
--rw-r--r-- 1 root    root         55 Nov 28 13:28 message.txt +
--rw-r--r-- 1 root    root        795 Nov 28 13:33 message.txt.asc +
--rw-r--r-- 1 root    root        510 Nov 28 13:35 message.txt.gpg +
--rw-r--r-- 1 root    root        461 Nov 28 13:28 message.txt.sig+
  
-root@debian12:~# cat message.txt.gpg +<code> 
-ӛS4 +trainee@manager:~$ su - 
-   t>25H@H:x+H  n֩ˁ+B.^2Zھ~~~´4sd27J    ~:W^}ĀzmI]/e=kS׈n9tȘQ=Cj5{Q +Mot de passe : fenestros 
-                                                                   #0"  @qw,\[B$(:BU舏9^8_Qa  +root@debian9:~# git clone https://github.com/docker/docker-bench-security.git 
-                                                                                             e^4,鹫     k/Pj#y:j~PU(}K#tTT-AZu  1z!%]t{ +Clonage dans 'docker-bench-security'... 
-                                                                                                                                        5?"a5Vdnn$\V#(ctWhce6/-qThy^Ъmk-$$Dn +remoteEnumerating objects: 18, done. 
-                                                                                                                                                                            ^&Mw.*ԬYrɺޕr}o/Q[X_)Wr?U0gMV,">9Croot@debian12:~#+remoteCounting objects: 100% (18/18)done. 
 +remoteCompressing objects: 100(16/16), done. 
 +remote: Total 1921 (delta 5), reused 6 (delta 2), pack-reused 1903 
 +Réception d'objets: 100% (1921/1921), 2.90 MiB | 908.00 KiB/s, fait. 
 +Résolution des deltas100% (1339/1339), fait.
 </code> </code>
  
-Et pour chiffrer un message en mode ascii, il convient de saisir la commande suivante :+Exécutez maintenant le script **Docker Benchmark Security** :
  
 <code> <code>
-root@debian12:~# gpg --recipient ITTRAINING --armor --encrypt message.txt +root@debian9:~# cd docker-bench-security/ 
-File 'message.txt.asc' existsOverwrite? (y/Ny+root@debian9:~/docker-bench-security# ./docker-bench-security.sh 
 +# ------------------------------------------------------------------------------ 
 +# Docker Bench for Security v1.3.
 +
 +# Docker, Inc. (c2015- 
 +
 +# Checks for dozens of common best-practices around deploying Docker containers in production. 
 +# Inspired by the CIS Docker Benchmark v1.2.0. 
 +# ------------------------------------------------------------------------------
  
-root@debian12:~# ls -l | grep message +Initializing vendredi 8 novembre 2019, 12:12:03 (UTC+0100)
--rw-r--r-- 1 root    root         55 Nov 28 13:28 message.txt +
--rw-r--r-- 1 root    root        752 Nov 28 13:38 message.txt.asc +
--rw-r--r-- 1 root    root        510 Nov 28 13:36 message.txt.gpg +
--rw-r--r-- 1 root    root        461 Nov 28 13:28 message.txt.sig+
  
-root@debian12:~# cat message.txt.asc 
------BEGIN PGP MESSAGE----- 
  
-hQGMA9ObUzTZ86GvAQwAxAGoxKHBMh53+bPqHs338vhWjxAZs19aItMm+CM2pKu5 +[INFO] 1 Host Configuration
-i4euJ36o+oVfbVTcqVNh4Q8I72QTOYTRTeXRWaUtVjp055A07BtlxGPbps9GXkVv +
-1faIs8viwHF1FHDC3Iz/SSf7u7tSF6sxbU6B4c/fHPneKjUxesH0XmKjduEdpDPj +
-ylZxPngzTOR4RDbMbkZ5OvJKXNrOOiHUSDOMmI9o9nu7sxnMiPP3NUqilN/0NtFz +
-xveV/mqDOEHT7Q1IHR+kN0e7WHqCl4NOvh0BXhL5u+9m18pgRe6ZvC6E94e+yPxZ +
-21umlYbcIPtw87+h9twBj7vK5FUi7j8C5QWoDoM4XERf/v21A1fTlx2cDn8E1lOC +
-dTaZlgTtxM3CY7/iWlG7TXWfUQfdZWhf/Mz1bHguljeOqVMGTI/zCElDnS3Ezzhg +
-bIlrpLbs6yqtjant1bkZ5PuNhB1bRNxrSKZUZKdEMeY5M+C0GjKskjN84+OqgjRV +
-39GkfPDwqw/eBj0ldvc60m0B5H2ZIIRApWl4j9RGhe2ZbvS+ZmI2vSf75RPDcNyH +
-PKDwHyTKCGN3NQKOIrw9LbIXehYEdrdFwGizGUXba1EWwVs+qMsmFueoQfcvA19N +
-CJ2HPuO3qAVIDpYyX+vwdKQASbb8AMQIIksoQv7i +
-=481C +
------END PGP MESSAGE----- +
-</code>+
  
-Pour décrypter un message il convient d'utiliser la commande suivante :+[INFO] 1.1 - General Configuration 
 +[NOTE] 1.1.1  - Ensure the container host has been Hardened 
 +[INFO] 1.1.2  - Ensure Docker is up to date 
 +[INFO]        * Using 19.03.4, verify is it up to date as deemed necessary 
 +[INFO]        * Your operating system vendor may provide support and security maintenance for Docker
  
-<code> +[INFO] 1.2 - Linux Hosts Specific Configuration 
-root@debian12:~# gpg --decrypt message.txt.asc +[WARN] 1.2.Ensure a separate partition for containers has been created 
-gpg: encrypted with 3072-bit RSA key, ID D39B5334D9F3A1AF, created 2025-11-28 +...
-      "ITTRAINING (Test key) <infos@ittraining.team>" +
-# ~/message.txt +
-Ceci est un message de test pour GnuPG+
 </code> </code>
  
-=====LAB #3 - Mise en place de SSH et SCP=====+Ce script sert à automatiser le contrôle des points précédemment cités et produit un rapport contenant des annotations :
  
-====3.1 - Introduction====+  * **[PASS]** : Concerne les points qui n'ont pas besoin d'être modifiés, 
 +  * **[WARN]** : Concerne les points qui **doivent** être modifiés, 
 +  * **[INFO]** : Concerne les points qui doivent être passés en revue selon les besoins de votre configuration, 
 +  * **[NOTE]** : Vous informe d'un **best practice**.
  
-La commande **[[wpfr>Ssh|ssh]]** est le successeur et la remplaçante de la commande **[[wpfr>Rlogin|rlogin]]**. Il permet d'établir des connexions sécurisées avec une machine distante. SSH comporte cinq acteurs :+=====LAB #4 - Sécurisation de la Configuration de l'Hôte Docker=====
  
-  * Le **serveur SSH** +Lors de l'exécution du scriptvous devez obtenir un résultat similaire à ceci en ce qui concerne la Sécurité de la Configuration de l'hôte Docker :
-    * le démon sshd, qui s'occupe des authentifications et autorisations des clients,  +
-  * Le **client SSH** +
-    * ssh ou scp, qui assure la connexion et le dialogue avec le serveur, +
-  * La **session** qui représente la connexion courante et qui commence juste après l'authentification réussie, +
-  * Les **clefs** +
-    * **Couple de clef utilisateur asymétriques** et persistantes qui assurent l'identité d'un utilisateur et qui sont stockés sur disque dur, +
-    * **Clef hôte asymétrique et persistante** garantissant l'identité du serveur er qui est conservé sur disque dur +
-    * **Clef serveur asymétrique et temporaire** utilisée par le protocole SSH1 qui sert au chiffrement de la clé de session, +
-    * **Clef de session symétrique qui est générée aléatoirement** et qui permet le chiiffrement de la communication entre le client et le serveur. Elle est détruite en fin de session. SSH-1 utilise une seule clef tandis que SSH-2 utilise une clef par direction de la communication, +
-  * La **base de données des hôtes connus** qui stocke les clés des connexions précédentes.+
  
-SSH fonctionne de la manière suivante pour la la mise en place d'un canal sécurisé:+<file> 
 +... 
 +[INFO] 1 - Host Configuration
  
-  * Le client contacte le serveur sur son port 22, +[INFO] 1.General Configuration 
-  * Les client et le serveur échangent leur version de SSHEn cas de non-compatibilité de versions, l'un des deux met fin au processus, +[NOTE] 1.1.1  - Ensure the container host has been Hardened 
-  * Le serveur SSH s'identifie auprès du client en lui fournissant : +[INFO] 1.1.2  - Ensure Docker is up to date 
-    * Sa clé hôte, +[INFO]        Using 19.03.4verify is it up to date as deemed necessary 
-    * Sa clé serveur, +[INFO]        Your operating system vendor may provide support and security maintenance for Docker
-    * Une séquence aléatoire de huit octets à inclure dans les futures réponses du client, +
-    * Une liste de méthodes de chiffrage, compression et authentification, +
-  * Le client et le serveur produisent un identifiant identique, un haché MD5 long de 128 bits contenant la clé hôte, la clé serveur et la séquence aléatoire, +
-  Le client génère sa clé de session symétrique et la chiffre deux fois de suite, une fois avec la clé hôte du serveur et la deuxième fois avec la clé serveurLe client envoie cette clé au serveur accompagnée de la séquence aléatoire et un choix d'algorithmes supportés+
-  Le serveur déchiffre la clé de session, +
-  * Le client et le serveur mettent en place le canal sécurisé.+
  
-===SSH-1===+[INFO] 1.2 Linux Hosts Specific Configuration 
 +[WARN] 1.2.1 - Ensure a separate partition for containers has been created 
 +[INFO] 1.2.2  - Ensure only trusted users are allowed to control Docker daemon 
 +[INFO]        * docker:x:999:trainee 
 +[WARN] 1.2.3  - Ensure auditing is configured for the Docker daemon 
 +[WARN] 1.2.4  - Ensure auditing is configured for Docker files and directories - /var/lib/docker 
 +[WARN] 1.2.5  - Ensure auditing is configured for Docker files and directories - /etc/docker 
 +[WARN] 1.2.6  - Ensure auditing is configured for Docker files and directories - docker.service 
 +[WARN] 1.2.7  - Ensure auditing is configured for Docker files and directories - docker.socket 
 +[WARN] 1.2.8  - Ensure auditing is configured for Docker files and directories - /etc/default/docker 
 +[INFO] 1.2.9  - Ensure auditing is configured for Docker files and directories - /etc/sysconfig/docker 
 +[INFO]        * File not found 
 +[INFO] 1.2.10  - Ensure auditing is configured for Docker files and directories - /etc/docker/daemon.json 
 +[INFO]         * File not found 
 +[WARN] 1.2.11  - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd 
 +[INFO] 1.2.12  - Ensure auditing is configured for Docker files and directories - /usr/sbin/runc 
 +[INFO]         * File not found 
 +... 
 +</file>
  
-SSH-1 utilise une paire de clefs de type RSA1. Il assure l'intégrité des données par une **[[wpfr>Contrôle_de_redondance_cyclique|Contrôle de Redondance Cyclique]]** (CRC) et est un bloc dit **monolithique**.+Les problèmes de sécurité qu'il convient à résoudre sont indiqués par les annotations **[WARN]**.
  
-Afin de s'identifier, le client essaie chacune des six méthodes suivantes :+====4.1 - [WARN] 1.2.1 - Ensure a separate partition for containers has been created====
  
-  * **Kerberos**, +Par défauttous les fichiers de Docker sont stockés dans le répertoire **/var/lib/docker**, y compris toutes les imagestous les conteneurs et tous les volumes. Sur un système hôte n'ayant qu'une seule partition il y a un risquetous comme le risque lié au répertoire **/var/log/**, que le disque devient saturé.
-  * **Rhosts**, +
-  * **%%RhostsRSA%%**, +
-  * Par **clef asymétrique**, +
-  * **TIS**, +
-  * Par **mot de passe**.+
  
-===SSH-2===+====4.2 [WARN] 1.2.3  - Ensure auditing is configured for the Docker daemon====
  
-SSH-2 utilise **DSA**,  **RSA**, **ecdsa** ou **ed25519**Il assure l'intégrité des données par l'algorithme **HMAC**SSH-2 est organisé en trois **couches** :+<file> 
 +[WARN] 1.2.4  Ensure auditing is configured for Docker files and directories - /var/lib/docker 
 +[WARN] 1.2.5  - Ensure auditing is configured for Docker files and directories - /etc/docker 
 +[WARN] 1.2.6  Ensure auditing is configured for Docker files and directories - docker.service 
 +[WARN] 1.2.7  - Ensure auditing is configured for Docker files and directories - docker.socket 
 +[WARN] 1.2.8  - Ensure auditing is configured for Docker files and directories - /etc/default/docker 
 +[WARN] 1.2.11  - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd 
 +</file>
  
-  * **SSH-TRANS** – Transport Layer Protocol, +Ces avertissements sont présents parce que **auditd** n'est pas installé et parce qu'il n'y a pas de règles spécifiques au daemon Docker et ses répertoires et fichiers associés
-  * **SSH-AUTH** – Authentification Protocol, +
-  * **SSH-CONN** – Connection Protocol.+
  
-SSH-2 diffère de SSH-1 essentiellement dans la phase authentification. +Pour installer auditd, utilisez **apt-get** : 
  
-Trois méthodes d'authentification :+<code> 
 +root@debian9:~/docker-bench-security# apt-get install auditd 
 +</code>
  
-  Par **clef asymétrique**, +Modifiez ensuite le fichier **/etc/audit/rules.d/audit.rules** :
-    * Identique à SSH-1 sauf avec l'algorithme **DSA**, **ecdsa** ou **ed25519**, +
-  * **%%RhostsRSA%%**, +
-  * Par **mot de passe**.+
  
-===L'authentification par mot de passe===+<code> 
 +root@debian9:~/docker-bench-security# vi /etc/audit/rules.d/audit.rules 
 +root@debian9:~/docker-bench-security# cat /etc/audit/rules.d/audit.rules 
 +## First rule - delete all 
 +-D
  
-L'utilisateur fournit un mot de passe au client ssh. Le client ssh le transmet de façon sécurisée au serveur ssh puis  le serveur vérifie le mot de passe et l'accepte ou non.+## Increase the buffers to survive stress events. 
 +## Make this bigger for busy systems 
 +-b 8192
  
-Avantage: +## This determine how long to wait in burst of events 
-  * Aucune configuration de clef asymétrique n'est nécessaire.+--backlog_wait_time 0
  
-Inconvénients: +## Set failure mode to syslog 
-  * L'utilisateur doit fournir à chaque connexion un identifiant et un mot de passe, +-f 1
-  * Moins sécurisé qu'un système par clef asymétrique.+
  
-===L'authentification par clef asymétrique===+##Docker 
 +-w /usr/bin/docker -p wa 
 +-w /var/lib/docker -p wa 
 +-w /etc/docker -p wa 
 +-w /lib/systemd/system/docker.service -p wa 
 +-w /lib/systemd/system/docker.socket -p wa 
 +-w /etc/default/docker -p wa 
 +-w /etc/docker/daemon.json -p wa 
 +-w /usr/bin/docker-containerd -p wa 
 +-w /usr/bin/docker-runc -p wa 
 +-w /usr/bin/containerd -p wa 
 +</code>
  
-  * Le **client** envoie au serveur une requête d'authentification par clé asymétrique qui contient le module de la clé à utiliser, +<WRAP center round important 60%> 
-  Le **serveur** recherche une correspondance pour ce module dans le fichier des clés autorisés **~/.ssh/authorized_keys**, +**Important** : L'option **-w** indique **watch** et concerne le fichier qui suitL'option **-p** journalise les modifications éventuelles. 
-    * Dans le cas où une correspondance n'est pas trouvée, le serveur met fin à la communication, +</WRAP>
-    Dans le cas contraire le serveur génère une chaîne aléatoire de 256 bits appelée un **challenge** et la chiffre avec la **clé publique du client**, +
-  * Le **client** reçoit le challenge et le décrypte avec la partie privée de sa cléIl combine le challenge avec l'identifiant de session et chiffre le résultat. Ensuite il envoie le résultat chiffré au serveur. +
-  Le **serveur** génère le même haché et le compare avec celui reçu du client. Si les deux hachés sont identiques, l'authentification est réussie.+
  
-====3.2 Configuration du Serveur==== +Re-démarrez ensuite auditd :
- +
-La configuration du serveur s'effectue dans le fichier **/etc/ssh/sshd_config** :+
  
 <code> <code>
-root@debian12:~# cat /etc/ssh/sshd_config+root@debian9:~/docker-bench-securitysystemctl restart auditd 
 +</code>
  
-# This is the sshd server system-wide configuration file.  See +Vérifiez ensuite la prise en charge des règles :
-# sshd_config(5) for more information.+
  
-# This sshd was compiled with PATH=/usr/local/bin:/usr/bin:/bin:/usr/games+<code> 
 +root@debian9:~/docker-bench-security# cat /etc/audit/audit.rules 
 +## This file is automatically generated from /etc/audit/rules.d 
 +-D 
 +-b 8192 
 +-f 1 
 +--backlog_wait_time 0 
 +-w /usr/bin/docker -p wa 
 +-w /var/lib/docker -p wa 
 +-w /etc/docker -p wa 
 +-w /lib/systemd/system/docker.service -p wa 
 +-w /lib/systemd/system/docker.socket -p wa 
 +-w /etc/default/docker -p wa 
 +-w /etc/docker/daemon.json -p wa 
 +-w /usr/bin/docker-containerd -p wa 
 +-w /usr/bin/docker-runc -p wa 
 +-w /usr/bin/containerd -p wa 
 +</code>
  
-# The strategy used for options in the default sshd_config shipped with +<WRAP center round important 60%> 
-# OpenSSH is to specify options with their default value where +**Important** - Pour plus d'information concernant la création de règles personalisées avec auditdconsultez cette **[[https://www.linux.com/tutorials/customized-file-monitoring-auditd/|page]]**. 
-# possiblebut leave them commented Uncommented options override the +</WRAP>
-# default value.+
  
-Include /etc/ssh/sshd_config.d/*.conf+Ré-exécutez le script **Docker Benchmark Security** :
  
-#Port 22 +<code> 
-#AddressFamily any +root@debian9:~/docker-bench-security./docker-bench-security.sh  
-#ListenAddress 0.0.0.0 +... 
-#ListenAddress ::+[PASS] 1.2.4  - Ensure auditing is configured for Docker files and directories - /var/lib/docker 
 +[PASS] 1.2.5  - Ensure auditing is configured for Docker files and directories - /etc/docker 
 +[PASS] 1.2.6  - Ensure auditing is configured for Docker files and directories - docker.service 
 +[PASS] 1.2.7  - Ensure auditing is configured for Docker files and directories - docker.socket 
 +[PASS] 1.2.8  - Ensure auditing is configured for Docker files and directories - /etc/default/docker 
 +... 
 +[PASS] 1.2.11  - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd 
 +... 
 +</code>
  
-#HostKey /etc/ssh/ssh_host_rsa_key +=====LAB #5 - Sécurisation de la Configuration du daemon Docker=====
-#HostKey /etc/ssh/ssh_host_ecdsa_key +
-#HostKey /etc/ssh/ssh_host_ed25519_key+
  
-# Ciphers and keying +Exécutez de nouveau le script **docker-bench-security.sh**. Vous devez obtenir un résultat similaire à ceci en ce qui concerne la sécurité de la configuration du daemon Docker :
-#RekeyLimit default none+
  
-# Logging +<file> 
-#SyslogFacility AUTH +... 
-#LogLevel INFO+[INFO] 2 - Docker daemon configuration 
 +[WARN] 2.1  - Ensure network traffic is restricted between containers on the default bridge 
 +[PASS] 2.2  - Ensure the logging level is set to 'info' 
 +[PASS] 2.3  - Ensure Docker is allowed to make changes to iptables 
 +[PASS] 2.4  - Ensure insecure registries are not used 
 +[PASS] 2.5  - Ensure aufs storage driver is not used 
 +[INFO] 2.6  - Ensure TLS authentication for Docker daemon is configured 
 +[INFO]      * Docker daemon not listening on TCP 
 +[INFO] 2.7  - Ensure the default ulimit is configured appropriately 
 +[INFO]      * Default ulimit doesn't appear to be set 
 +[WARN] 2.8  - Enable user namespace support 
 +[PASS] 2.9  - Ensure the default cgroup usage has been confirmed 
 +[PASS] 2.10  - Ensure base device size is not changed until needed 
 +[WARN] 2.11  - Ensure that authorization for Docker client commands is enabled 
 +[WARN] 2.12  - Ensure centralized and remote logging is configured 
 +[PASS] 2.13  - Ensure live restore is Enabled (Incompatible with swarm mode) 
 +[WARN] 2.14  - Ensure Userland Proxy is Disabled 
 +[PASS] 2.15  - Ensure that a daemon-wide custom seccomp profile is applied if appropriate 
 +[PASS] 2.16  - Ensure that experimental features are not implemented in production 
 +[WARN] 2.17  - Ensure containers are restricted from acquiring new privileges 
 +... 
 +</file>
  
-# Authentication:+Les problèmes de sécurité qu'il convient à résoudre sont indiqués par les annotations **[WARN]**.
  
-#LoginGraceTime 2m +====5.1 [WARN] 2.1  - Ensure network traffic is restricted between containers on the default bridge====
-#PermitRootLogin prohibit-password +
-#StrictModes yes +
-#MaxAuthTries 6 +
-#MaxSessions 10+
  
-#PubkeyAuthentication yes+Par défaut Docker permet un trafic réseau sans restrictions entre des conteneurs sur le même hôte. Il est cependant possible de modifier la configuration par défaut. Pour empêcher ceci, il faut fixer la valeur de **icc** à **false**. De cette façon, docker crée des conteneurs qui peuvent communiquer entre eux **uniquement** s'il existe un lien.
  
-# Expect .ssh/authorized_keys2 to be disregarded by default in future. +Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/userguide/networking/|page]]**.
-#AuthorizedKeysFile     .ssh/authorized_keys .ssh/authorized_keys2+
  
-#AuthorizedPrincipalsFile none+====5.2 - [WARN] 2.8  - Enable user namespace support====
  
-#AuthorizedKeysCommand none +Cet avertissement nous indique que l'utilisation des **user namespaces** n'est pas activée. Le support des **user namespaces** du noyau Linux permet d'attribuer une plage d'UIDs et de GIDs unique à un processus et donc à un conteneur, en dehors de la plage traditionnelle utilisée par l'hôte Docker. L'avantage ici est que les processus ayant l'UID de root dans le conteneur seront mappés à un UID sans privilèges dans l'hôte Docker. Pour utiliser user namespace, il faut fixer la valeur de **userns-remap** à **default**. Dans ce cas précis Docker crée un utilisateur dénommé **dockremap**. Notez qu'il est aussi possible de fixer vos propres valeurs avec **"userns-remap": "user:group"**.
-#AuthorizedKeysCommandUser nobody+
  
-# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts +Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/security/userns-remap/|page]]**.
-#HostbasedAuthentication no +
-# Change to yes if you don't trust ~/.ssh/known_hosts for +
-# HostbasedAuthentication +
-#IgnoreUserKnownHosts no +
-# Don't read the user's ~/.rhosts and ~/.shosts files +
-#IgnoreRhosts yes+
  
-# To disable tunneled clear text passwords, change to no here! +====5.3 - [WARN] 2.11  - Ensure that authorization for Docker client commands is enabled====
-#PasswordAuthentication yes +
-#PermitEmptyPasswords no+
  
-# Change to yes to enable challenge-response passwords (beware issues with +Par défaut, Docker permet un accès sans restrictions aux daemon Docker. Il est possible de restreindre l'accès à des utilisateurs authentifiés en utilisant un plug-in. Cette ligne est sans importance parce que l'accès au socket local Docker est limité aux membres du groupe **docker** (voir DOF202 - La Sécurité de la Configuration de l'Hôte Docker)
-# some PAM modules and threads) +
-KbdInteractiveAuthentication no+
  
-# Kerberos options +Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/extend/plugins_authorization/|page]]**.
-#KerberosAuthentication no +
-#KerberosOrLocalPasswd yes +
-#KerberosTicketCleanup yes +
-#KerberosGetAFSToken no+
  
-# GSSAPI options +====5.4 - [WARN] 2.12  - Ensure centralized and remote logging is configured====
-#GSSAPIAuthentication no +
-#GSSAPICleanupCredentials yes +
-#GSSAPIStrictAcceptorCheck yes +
-#GSSAPIKeyExchange no+
  
-# Set this to 'yesto enable PAM authentication, account processing, +Cet avertissement indique que la configuration de rsyslog ne permet pas l'envoie des traces vers un serveur de journalisation distant. Elle indique aussi que la valeur de **log-driver** n'a pas été spécifiéePour activer cette configuration, il faut fixer la valeur de **log-driver** à **syslog** puis configurer **syslog** ainsi que la valeur de **log-opts** correctement.
-# and session processing. If this is enabled, PAM authentication will +
-# be allowed through the KbdInteractiveAuthentication and +
-# PasswordAuthentication Depending on your PAM configuration, +
-# PAM authentication via KbdInteractiveAuthentication may bypass +
-# the setting of "PermitRootLogin prohibit-password"+
-# If you just want the PAM account and session checks to run without +
-# PAM authentication, then enable this but set PasswordAuthentication +
-# and KbdInteractiveAuthentication to 'no'. +
-UsePAM yes+
  
-#AllowAgentForwarding yes +Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/admin/logging/overview/|page]]**.
-#AllowTcpForwarding yes +
-#GatewayPorts no +
-X11Forwarding yes +
-#X11DisplayOffset 10 +
-#X11UseLocalhost yes +
-#PermitTTY yes +
-PrintMotd no +
-#PrintLastLog yes +
-#TCPKeepAlive yes +
-#PermitUserEnvironment no +
-#Compression delayed +
-#ClientAliveInterval 0 +
-#ClientAliveCountMax 3 +
-#UseDNS no +
-#PidFile /run/sshd.pid +
-#MaxStartups 10:30:100 +
-#PermitTunnel no +
-#ChrootDirectory none +
-#VersionAddendum none+
  
-# no default banner path +====5.5 - [WARN] 2.14  - Ensure Userland Proxy is Disabled====
-#Banner none+
  
-# Allow client to pass locale environment variables +Il existe deux méthodes pour qu'un conteneur puisse router vers l'extérieur :
-AcceptEnv LANG LC_*+
  
-# override default of no subsystems +  * le mode **Hairpin NAT**, 
-Subsystem       sftp    /usr/lib/openssh/sftp-server+  * **Userland Proxy**.
  
-# Example of overriding settings on a per-user basis +Il est préférable d'utiliser le mode Hairpin NAT qui peut utilise Iptables et qui possède de meilleures performances. La plupart des systèmes d'opération modernes peuvent utiliser le mode Hairpin NAT. Pour désactiver Userland Proxy, il faut fixer la valeur de **userland-proxy** à **false**.
-#Match User anoncvs +
-#       X11Forwarding no +
-#       AllowTcpForwarding no +
-#       PermitTTY no +
-#       ForceCommand cvs server +
-</code>+
  
-Pour ôter les lignes de commentaires dans ce fichierutilisez la commande suivante :+Pour plus d'informationsconsultez cette **[[https://docs.docker.com/engine/userguide/networking/default_network/binding/|page]]**.
  
-<code> +====5.6 [WARN] 2.17  - Ensure containers are restricted from acquiring new privileges====
-root@debian12:~# cd /tmp ; grep -E -v '^(#|$)'  /etc/ssh/sshd_config > sshd_config+
  
-root@debian12:/tmp# cat sshd_config +Par défaut un conteneur peut obtenir une escalade de privilèges en utilisant les binaires setuid ou setgidPour interdire ceci il faut fixer la valeur de **no-new-privileges** à **true**.
-Include /etc/ssh/sshd_config.d/*.conf +
-KbdInteractiveAuthentication no +
-UsePAM yes +
-X11Forwarding yes +
-PrintMotd no +
-AcceptEnv LANG LC_* +
-Subsystem       sftp    /usr/lib/openssh/sftp-server +
-</code>+
  
-Pour sécuriser le serveur sshajoutez ou modifiez les directives suivantes :+Pour plus d'informationsconsultez cette **[[https://docs.docker.com/engine/userguide/networking/default_network/binding/|page]]**.
  
-<file> +====5.7 - Le Fichier /etc/docker/daemon.json ====
-AllowGroups adm +
-Banner /etc/issue.net +
-HostbasedAuthentication no +
-IgnoreRhosts yes +
-LoginGraceTime 60 +
-LogLevel INFO +
-PermitEmptyPasswords no +
-PermitRootLogin no +
-PrintLastLog yes +
-Protocol 2 +
-StrictModes yes +
-X11Forwarding no +
-</file>+
  
-Votre fichier ressemblera à celui-ci :+Créez le fichier **/etc/docker/daemon.json** 
  
 <code> <code>
-root@debian12:/tmpcat sshd_config +root@debian9:~/docker-bench-securityvi /etc/docker/daemon.json 
-Include /etc/ssh/sshd_config.d/*.conf +root@debian9:~/docker-bench-security# cat /etc/docker/daemon.json 
-KbdInteractiveAuthentication no +{ 
-UsePAM yes +    "icc": false, 
-PrintMotd no +    "userns-remap": "default", 
-AcceptEnv LANG LC_* +    "log-driver": "syslog", 
-AllowGroups adm +    "live-restore": true, 
-HostbasedAuthentication no +    "userland-proxy": false, 
-IgnoreRhosts yes +    "no-new-privileges": true 
-LoginGraceTime 60 +}
-LogLevel INFO +
-PermitEmptyPasswords no +
-PermitRootLogin no +
-PrintLastLog yes +
-Protocol 2 +
-StrictModes yes +
-X11Forwarding no +
-Subsystem       sftp    /usr/lib/openssh/sftp-server+
 </code> </code>
  
-Mettez l'utilisateur **trainee** dans le groupe **adm**+Notez ici que **live-restore** est fixé à **true**. Ceci permet aux conteneurs de continuer à fonctionner même quand le daemon Docker ne fonctionne pas. Ceci est utile pendant la mise-à-jour de Docker. 
 + 
 +Re-démarrez le service Docker :
  
 <code> <code>
-root@debian12:/tmpgroups trainee +root@debian9:~/docker-bench-securitysystemctl restart docker 
-trainee : trainee cdrom floppy audio dip video plugdev netdev lpadmin scanner vboxusers+</code>
  
-root@debian12:/tmp# usermod -a -G adm trainee+Vérifiez la présence de l'utilisateur dénommé **dockremap** :
  
-root@debian12:/tmpgroups trainee +<code> 
-trainee : trainee adm cdrom floppy audio dip video plugdev netdev lpadmin scanner vboxusers+root@debian9:~/docker-bench-securityid dockremap 
 +uid=116(dockremap) gid=121(dockremap) groupes=121(dockremap)
 </code> </code>
  
-Renommez le fichier **/etc/ssh/sshd_config** en **/etc/ssh/sshd_config.old** puis copiez le fichier **/tmp/sshd_config** vers **/etc/ssh/** :+Ré-exécutez le script **Docker Benchmark Security** :
  
 <code> <code>
-root@debian12:/tmpmv /etc/ssh/sshd_config /etc/ssh/sshd_config.old +root@debian9:~cd docker-bench-security
- +root@debian9:~/docker-bench-security./docker-bench-security.sh  
-root@debian12:/tmpcp sshd_config /etc/ssh+... 
 +[PASS] 2.1  - Ensure network traffic is restricted between containers on the default bridge 
 +... 
 +[PASS] 2.8  - Enable user namespace support 
 +... 
 +[WARN] 2.11  - Ensure that authorization for Docker client commands is enabled 
 +[PASS] 2.12  - Ensure centralized and remote logging is configured 
 +... 
 +[PASS] 2.14  - Ensure Userland Proxy is Disabled 
 +... 
 +[PASS] 2.17  - Ensure containers are restricted from acquiring new privileges 
 +...
 </code> </code>
  
-Redémarrez ensuite le serveur ssh :+Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file/|page]]**.
  
-<code> +=====LAB #6 - Sécurisation des Images et les Fichiers de Construction=====
-root@debian12:/tmpsystemctl restart ssh+
  
-root@debian12:/tmp# systemctl status ssh +Créez le conteneur mysql :
-● ssh.service - OpenBSD Secure Shell server +
-     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; preset: enabled) +
-     Active: active (running) since Fri 2025-11-28 15:18:55 CET; 7s ago +
-       Docs: man:sshd(8) +
-             man:sshd_config(5) +
-    Process: 10882 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS) +
-   Main PID: 10883 (sshd) +
-      Tasks: 1 (limit: 19123) +
-     Memory: 1.4M +
-        CPU: 28ms +
-     CGroup: /system.slice/ssh.service +
-             └─10883 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"+
  
-Nov 28 15:18:55 debian12 systemd[1]Starting ssh.service - OpenBSD Secure Shell server... +<code> 
-Nov 28 15:18:55 debian12 sshd[10883]Server listening on 0.0.0.0 port 22. +root@debian9:~/docker-bench-security# docker container run -d --name mysql -e MYSQL_ROOT_PASSWORD=password mysql 
-Nov 28 15:18:55 debian12 sshd[10883]Server listening on :: port 22. +Unable to find image 'mysql:latest' locally 
-Nov 28 15:18:55 debian12 systemd[1]Started ssh.service OpenBSD Secure Shell server.+latestPulling from library/mysql 
 +80369df48736Pull complete  
 +e8f52315cb10Pull complete  
 +cf2189b391fcPull complete  
 +cc98f645c682Pull complete  
 +27a27ac83f74Pull complete  
 +fa1f04453414Pull complete  
 +d45bf7d22d33Pull complete  
 +3dbac26e409cPull complete  
 +9017140fb8c1Pull complete  
 +b76dda2673aePull complete  
 +bea9eb46d12aPull complete  
 +e1f050a38d0f: Pull complete  
 +Digest: sha256:7345ce4ce6f0c1771d01fa333b8edb2c606ca59d385f69575f8e3e2ec6695eee 
 +Status: Downloaded newer image for mysql:latest 
 +54606c03c52c5e3ec0328029d69b869d4b285fb433015576dedc8b8dd4ad0494 
 +root@debian9:~/docker-bench-security# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                 NAMES 
 +54606c03c52c        mysql               "docker-entrypoint.s…"   5 seconds ago       Up 4 seconds               3306/tcp, 33060/tcp   mysql
 </code> </code>
  
-Pour générer les clefs sur le serveur saisissez la commande suivante en tant que **root**+Exécutez de nouveau le script **docker-bench-security.sh**. Vous devez obtenir un résultat similaire à ceci en ce qui concerne la sécurité des images et les fichiers de leur construction :
- +
-<WRAP center round important 50%> +
-**Important** - Lors de la génération de la clef, la passphrase doit être **vide**. +
-</WRAP>+
  
 <code> <code>
-root@debian12:/tmpssh-keygen -t dsa +root@debian9:~/docker-bench-security./docker-bench-security.sh 
-Generating public/private dsa key pair+... 
-Enter file in which to save the key (/root/.ssh/id_dsa): /etc/ssh/ssh_host_dsa_key +[INFO] 4 - Container Images and Build File 
-Enter passphrase (empty for no passphrase):  +[WARN] 4.1  - Ensure a user for the container has been created 
-Enter same passphrase again:  +[WARN]      * Running as root: mysql 
-Your identification has been saved in /etc/ssh/ssh_host_dsa_key +[NOTE4.2  Ensure that containers use only trusted base images 
-Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub +[NOTE] 4.3  - Ensure that unnecessary packages are not installed in the container 
-The key fingerprint is: +[NOTE] 4.4  - Ensure images are scanned and rebuilt to include security patches 
-SHA256:mP/fGCXEcyZQ+afGDrQK4S1TYVIw3pnBre25MPU2b3g root@debian12 +[WARN] 4. - Ensure Content trust for Docker is Enabled 
-The key's randomart image is+[WARN] 4.6  - Ensure that HEALTHCHECK instructions have been added to container images 
-+---[DSA 1024]----+ +[WARN]      * No Healthcheck found: [alpine:latest] 
-|        o++o..   | +[WARN]      * No Healthcheck found: [mysql:latest] 
-|       ..o+*o    | +[INFO] 4. - Ensure update instructions are not use alone in the Dockerfile 
-|        .o++=. | +[INFO]      Update instruction found: [mysql:latest] 
-|       oo.+=. .| +[NOTE] 4.8  - Ensure setuid and setgid permissions are removed 
-     o.S+ +.=.o | +[PASS] 4.9  - Ensure that COPY is used instead of ADD in Dockerfiles 
-|       .= + =oB  | +[NOTE] 4.10  Ensure secrets are not stored in Dockerfiles 
-|        .+ +.+ | +[NOTE4.11  Ensure only verified packages are installed 
-|         .. .+o E| +...
-|          ..o .o | +
-+----[SHA256]-----++
 </code> </code>
  
-<WRAP center round important 50%> +====6.1 - [WARN] 4.1  - Ensure a user for the container has been created==== 
-**Important** Le chemin à indiquer pour le fichier est **/etc/ssh/ssh_host_dsa_key**. De la même façon, il est possible de générer les clefs au format **[[https://fr.wikipedia.org/wiki/Chiffrement_RSA|RSA]]**, **[[https://fr.wikipedia.org/wiki/Elliptic_curve_digital_signature_algorithm|ECDSA]]** et **[[https://fr.wikipedia.org/wiki/EdDSA|ED25519]]**.  + 
-</WRAP>+Les processus dans le conteneur **root-nginx** tourne sous l'UID de rootCeci est l'action par défaut de Docker. 
 + 
 +Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/security/security/|page]]**. 
 + 
 +====6.2 - [WARN4.5  - Ensure Content trust for Docker is Enabled==== 
 + 
 +Cette ligne indique que le support de Content trust n'a pas été activé. Content trust permet de s'assurer de la provenance des images utilisées car celles-ci sont signées.
  
-Les clefs publiques générées possèdent l'extension **.pub**. Les clefs privées n'ont pas d'extension :+Pour activer le Content trust, il faut positionner la valeur de la variable **DOCKER_CONTENT_TRUST** à **1** :
  
 <code> <code>
-root@debian12:/tmpls /etc/ssh +root@debian9:~/docker-bench-securityecho "DOCKER_CONTENT_TRUST=1" | sudo tee -a /etc/environment 
-moduli      ssh_config.d  sshd_config.d    ssh_host_dsa_key      ssh_host_ecdsa_key      ssh_host_ed25519_key      ssh_host_rsa_key +DOCKER_CONTENT_TRUST=1 
-ssh_config  sshd_config   sshd_config.old  ssh_host_dsa_key.pub  ssh_host_ecdsa_key.pub  ssh_host_ed25519_key.pub  ssh_host_rsa_key.pub+root@debian9:~/docker-bench-security# source /etc/environment
 </code> </code>
  
-Re-démarrez ensuite le service sshd :+Re-démarrez la machine virtuelle **Manager** et démarrez le conteneur **mysql** :
  
 <code> <code>
-root@debian12:/tmpsystemctl restart ssh+root@debian9:~/docker-bench-securitydocker container start mysql 
 +mysql 
 +root@debian9:~/docker-bench-security# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES 
 +54606c03c52c        mysql               "docker-entrypoint.s…"   10 minutes ago      Up 2 seconds        3306/tcp, 33060/tcp   mysql
 </code> </code>
  
-Saisissez maintenant les commandes suivantes en tant que **trainee** : +Exécutez de nouveau le script et notez le contenu de la section 4 :
- +
-<WRAP center round important 50%> +
-**Important** - Lors de la génération des clefs, la passphrase doit être **vide**. +
-</WRAP>+
  
 <code> <code>
-root@debian12:/tmpexit +root@debian9:~/docker-bench-security./docker-bench-security.sh 
-logout+... 
 +[INFO] 4 - Container Images and Build File 
 +[WARN] 4.1  - Ensure a user for the container has been created 
 +[WARN]      * Running as root: mysql 
 +[NOTE] 4.2  - Ensure that containers use only trusted base images 
 +[NOTE] 4.3  - Ensure that unnecessary packages are not installed in the container 
 +[NOTE] 4.4  - Ensure images are scanned and rebuilt to include security patches 
 +[PASS] 4.5  - Ensure Content trust for Docker is Enabled 
 +[WARN] 4.6  - Ensure that HEALTHCHECK instructions have been added to container images 
 +[WARN]      * No Healthcheck found: [alpine:latest] 
 +[WARN]      * No Healthcheck found: [mysql:latest] 
 +[INFO] 4.7  - Ensure update instructions are not use alone in the Dockerfile 
 +[INFO]      * Update instruction found: [mysql:latest] 
 +[NOTE] 4.8  - Ensure setuid and setgid permissions are removed 
 +[PASS] 4.9  - Ensure that COPY is used instead of ADD in Dockerfiles 
 +[NOTE] 4.10  - Ensure secrets are not stored in Dockerfiles 
 +[NOTE] 4.11  - Ensure only verified packages are installed 
 +... 
 +</code>
  
-trainee@debian12:~$ ssh-keygen -t dsa +Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/security/trust/content_trust/|page]]**.
-Generating public/private dsa key pair. +
-Enter file in which to save the key (/home/trainee/.ssh/id_dsa):  +
-Created directory '/home/trainee/.ssh'+
-Enter passphrase (empty for no passphrase):  +
-Enter same passphrase again:  +
-Your identification has been saved in /home/trainee/.ssh/id_dsa +
-Your public key has been saved in /home/trainee/.ssh/id_dsa.pub +
-The key fingerprint is: +
-SHA256:97XNFS0p/j8IaR7sByO1jVTE3sP23l/qDRUwU9TFRpw trainee@debian12 +
-The key's randomart image is: +
-+---[DSA 1024]----+ +
-|            o=o**+
-|             o+E*| +
-|            + =+.+
-|           + o *o| +
-|        S = * o =| +
-|         o % + =o| +
-|          = * =.=| +
-|           o o *+| +
-|            ..o *| +
-+----[SHA256]-----++
  
-trainee@debian12:~$ ssh-keygen -t rsa +====6.- [WARN4.6  Ensure that HEALTHCHECK instructions have been added to container images====
-Generating public/private rsa key pair. +
-Enter file in which to save the key (/home/trainee/.ssh/id_rsa):  +
-Enter passphrase (empty for no passphrase):  +
-Enter same passphrase again:  +
-Your identification has been saved in /home/trainee/.ssh/id_rsa +
-Your public key has been saved in /home/trainee/.ssh/id_rsa.pub +
-The key fingerprint is: +
-SHA256:p2xPZdoPCICy/D5x0g+nHilsV6Ar4UMwmHeRnHDnBQw trainee@debian12 +
-The key's randomart image is: +
-+---[RSA 3072]----+ +
-|  .oE=o..        | +
-|.. .+=..         | +
-|o o +          | +
-+ . o         | +
-|  = ..  S . o    | +
-| o +o.++.+ *     | +
-|  + *++=+ + o    | +
-|   =.o.o.o     | +
-|    .o.     +
-+----[SHA256]-----++
  
-trainee@debian12:~$ ssh-keygen -t ecdsa +Quand une image est construite, il est possible d'y mettre un **HEALTHCHECK** dont le statut peut être vérifié par Docker afin de relancer le conteneur si nécessaire
-Generating public/private ecdsa key pair. +
-Enter file in which to save the key (/home/trainee/.ssh/id_ecdsa):  +
-Enter passphrase (empty for no passphrase):  +
-Enter same passphrase again:  +
-Your identification has been saved in /home/trainee/.ssh/id_ecdsa +
-Your public key has been saved in /home/trainee/.ssh/id_ecdsa.pub +
-The key fingerprint is: +
-SHA256:zA3muePCJZ7SCIvuKe+X5veMqWpP0UTr6HAVv+LPBCo trainee@debian12 +
-The key's randomart image is: +
-+---[ECDSA 256]---+ +
-|      o          | +
-|     . +         | +
-|      + +        | +
-|     = =       | +
-|  . + = S .      | +
-|  .+ +.o..       | +
-| .Eo+*.++        | +
-|o +oBO       | +
-|+B+*++oo*        | +
-+----[SHA256]-----++
  
-trainee@debian12:~$ ssh-keygen -t ed25519 +Pour mettre en place un HEALTHCHECK, il conviendrait, par exemple, d'inclure la ligne suivante dans le fichier DOCKERFILE servant à construire l'image :
-Generating public/private ed25519 key pair. +
-Enter file in which to save the key (/home/trainee/.ssh/id_ed25519):  +
-Enter passphrase (empty for no passphrase):  +
-Enter same passphrase again:  +
-Your identification has been saved in /home/trainee/.ssh/id_ed25519 +
-Your public key has been saved in /home/trainee/.ssh/id_ed25519.pub +
-The key fingerprint is: +
-SHA256:f5GzguZoS5SN2EQDyj7zAqES+7PDOBSJRg+lD+vpn3Q trainee@debian12 +
-The key's randomart image is: +
-+--[ED25519 256]--+ +
-|  ....o          | +
-| +.. . .         | +
-|=o*            | +
-|oO+. + +       | +
-|*.=.. = S      | +
-|o+.+ .       | +
-|.=+..E. o o o    | +
-|+ ++o..+       | +
-| oo+ .o..        | +
-+----[SHA256]-----+ +
-</code>+
  
-<WRAP center round important 50%+<file
-**Important** Les clés générées seront placées dans le répertoire **~/.ssh/**. +HEALTHCHECK --interval=20s --timeout=3s CMD curl -f http://localhost:8000|| exit 1 
-</WRAP>+</file>
  
-====3.3 - Utilisation====+Ce test permet de vérifier que le conteneur peut atteindre l'URL indiqué tous les 20 secondes et produit une erreur au bout de secondes.
  
-La commande ssh prend la forme suivante:+Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/reference/builder/#healthcheck|page]]**.
  
-  ssh -l nom_de_compte numero_ip (nom_de_machine)+=====LAB #7 Sécurisation du Container Runtime=====
  
-En saisissant cette commande sur votre propre machine, vous obtiendrez un résultat similaire à celle-ci :+Exécutez de nouveau le script **docker-bench-security.sh**, vous devez obtenir un résultat similaire à ceci en ce qui concerne la sécurité du Container Runtime :
  
 <code> <code>
-trainee@debian12:~$ su +root@debian9:~/docker-bench-security# ./docker-bench-security.sh 
-Password: fenestros +... 
-root@debian12:~# +[INFO] 5 - Container Runtime 
- +[WARN] 5.1  - Ensure that, if applicable, an AppArmor Profile is enabled  
-root@debian12:~# ssh -l trainee localhost +[WARN]      * No AppArmorProfile Foundmysql 
-The authenticity of host 'localhost (::1)' can't be established+[WARN] 5.2  Ensure that, if applicable, SELinux security options are set 
-ED25519 key fingerprint is SHA256:SS9CpX7JFHIB54TWQWTtyswnwaXZ/Y8Kvr6dxPtisgE+[WARN]      * No SecurityOptions Foundmysql 
-This key is not known by any other names+[PASS] 5.3  - Ensure Linux Kernel Capabilities are restricted within containers 
-Are you sure you want to continue connecting (yes/no/[fingerprint])? yes +[PASS] 5.4  - Ensure that privileged containers are not used 
-Warning: Permanently added 'localhost' (ED25519) to the list of known hosts+[PASS] 5.5  - Ensure sensitive host system directories are not mounted on containers 
-trainee@localhost'password:  +[PASS] 5.6  - Ensure sshd is not run within containers 
-Linux debian12 6.1.0-41-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.158-1 (2025-11-09) x86_64 +[PASS] 5.7  - Ensure privileged ports are not mapped within containers 
- +[NOTE5.8  - Ensure that only needed ports are open on the container 
-The programs included with the Debian GNU/Linux system are free software; +[PASS] 5.9  - Ensure the host's network namespace is not shared 
-the exact distribution terms for each program are described in the +[WARN] 5.10  - Ensure that the memory usage for containers is limited 
-individual files in /usr/share/doc/*/copyright+[WARN]      * Container running without memory restrictions: mysql 
- +[WARN] 5.11  - Ensure CPU priority is set appropriately on the container 
-Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent +[WARN]      * Container running without CPU restrictions: mysql 
-permitted by applicable law+[WARN] 5.12  - Ensure that the container'root filesystem is mounted as read only 
-Last loginThu Nov 27 17:21:12 2025 from 10.0.2.1+[WARN]      * Container running with root FS mounted R/Wmysql 
 +[PASS] 5.13  - Ensure that incoming container traffic is bound to a specific host interface 
 +[WARN] 5.14  Ensure that the 'on-failure' container restart policy is set to '5' 
 +[WARN]      * MaximumRetryCount is not set to 5: mysql 
 +[PASS] 5.15  - Ensure the host's process namespace is not shared 
 +[PASS] 5.16  Ensure the host's IPC namespace is not shared 
 +[PASS] 5.17  Ensure that host devices are not directly exposed to containers 
 +[INFO] 5.18  Ensure that the default ulimit is overwritten at runtime if needed 
 +[INFO]      * Container no default ulimit override: mysql 
 +[PASS] 5.19  - Ensure mount propagation mode is not set to shared 
 +[PASS] 5.20  - Ensure the host's UTS namespace is not shared 
 +[PASS] 5.21  - Ensure the default seccomp profile is not Disabled 
 +[NOTE] 5.22  - Ensure docker exec commands are not used with privileged option 
 +[NOTE] 5.23  - Ensure that docker exec commands are not used with the user=root option 
 +[PASS] 5.24  - Ensure that cgroup usage is confirmed 
 +[WARN] 5.25  - Ensure that the container is restricted from acquiring additional privileges 
 +[WARN]      Privileges not restricted: mysql 
 +[WARN] 5.26  - Ensure that container health is checked at runtime 
 +[WARN]      * Health check not set: mysql 
 +[INFO] 5.27  - Ensure that Docker commands always make use of the latest version of their image 
 +[WARN] 5.28  - Ensure that the PIDs cgroup limit is used 
 +[WARN]      * PIDs limit not setmysql 
 +[INFO] 5.29  - Ensure that Docker's default bridge 'docker0' is not used 
 +[INFO]      * Container in docker0 networkmysql 
 +[PASS] 5.30  - Ensure that the host's user namespaces are not shared 
 +[PASS] 5.31  - Ensure that the Docker socket is not mounted inside any containers 
 +...
 </code> </code>
  
-====3.4 - Mise en place des clefs====+Les problèmes de sécurité qu'il convient à résoudre sont indiqués par les annotations **[WARN]**.
  
-Il convient maintenant de se connecter sur le <<serveur>> en utilisant ssh et vérifiez la présence du répertoire ~/.ssh :+====7.1 - [WARN] 5.1  - Ensure AppArmor Profile is Enabled====
  
-En saisissant cette commande, vous obtiendrez une fenêtre similaire à celle-ci :+Cet avertissement est présent parce que le conteneur n'utilise pas AppArmor.
  
-<code> +Pour plus d'informations, consultez cette **[[https://cloud.google.com/container-optimized-os/docs/how-to/secure-apparmor|page]]**.
-root@debian12:~# exit +
-logout+
  
-trainee@debian12:~$ ssh -l trainee 127.0.0.1 +====7.[WARN] 5.2  Ensure SELinux security options are set, if applicable====
-trainee@127.0.0.1's password: trainee +
-Linux debian12 6.1.0-41-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.158-1 (2025-11-09) x86_64+
  
-The programs included with the Debian GNU/Linux system are free software; +Cet avertissement est présent parce que le conteneur n'utilise pas SELinux.
-the exact distribution terms for each program are described in the +
-individual files in /usr/share/doc/*/copyright.+
  
-Debian GNU/Linux comes with ABSOLUTELY NO WARRANTYto the extent +Pour plus d'informationsconsultez cette **[[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_atomic_host/7/html/container_security_guide/docker_selinux_security_policy|page]]**.
-permitted by applicable law. +
-Last loginFri Nov 28 15:31:58 2025 from 10.0.2.46+
  
-trainee@debian12:~$ ls -la | grep .ssh +====7.3 [WARN] 5.10  Ensure memory usage for container is limited====
-drwx------   2 trainee trainee 4096 Nov 28 15:29 .ssh+
  
-trainee@debian12:~$ exit +Cet avertissement est du au fait que les conteneurs ont automatiquement accès à la totalité de la RAM de l'hôte Docker :
-logout +
-Connection to 127.0.0.1 closed. +
-</code> +
- +
-<WRAP center round important 50%> +
-**Important** - Si le dossier distant .ssh n'existe pas dans le répertoire personnel de l'utilisateur connecté, il faut le créer avec des permissions de 700. Dans votre cas, puisque votre machine joue le rôle de serveur **et** du client, le dossier /home/trainee/.ssh existe **déjà**. +
-</WRAP> +
- +
-Ensuite, il convient de transférer le fichier local **.ssh/id_ecdsa.pub** du <<client>> vers le <<serveur>> en le renommant en **authorized_keys** :+
  
 <code> <code>
-trainee@debian12:~$ scp .ssh/id_ecdsa.pub trainee@127.0.0.1:/home/trainee/.ssh/authorized_keys +root@debian9:~# docker run -d -p 8081:80 nginx 
-trainee@127.0.0.1's password:  +b04b2a6f0dd93da21a8b7640afc319406e42868a141f90936dbcf52ab5bffb0d 
-id_ecdsa.pub                                                                                                                                                                    100%  178   399.6KB/s   00:00 +root@debian9:~# docker stats 
 +CONTAINER ID        NAME                 CPU %               MEM USAGE LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS 
 +b04b2a6f0dd9        dazzling_blackburn   0.00%               1.789MiB / 1.957GiB   0.09%               2.38kB 0B         0B / 0B             2 
 +^C
 </code> </code>
  
-Connectez-vous via ssh et insérer les clefs publiques restantes dans le fichier .ssh/authorized_keys :+Supprimez le conteneur et re-créez le avec une limite de mémoire :
  
 <code> <code>
-trainee@debian12:~$ ssh -l trainee localhost +root@debian9:~# docker ps -a 
-Linux debian12 6.1.0-41-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.158-(2025-11-09) x86_64+CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                        PORTS                  NAMES 
 +b04b2a6f0dd9        nginx               "nginx -g 'daemon of…"   About a minute ago   Up About a minute             0.0.0.0:8081->80/tcp   dazzling_blackburn 
 +5b31fe1e13bc        ubuntu              "bash -c ':() { : | …"   14 minutes ago       Exited (254) 13 minutes ago                          pensive_fermat 
 +7788c67c3b69        mysql               "docker-entrypoint.s…"   About an hour ago    Exited (255) 18 minutes ago   3306/tcp, 33060/tcp    mysql 
 +root@debian9:~# docker rm -f b0 
 +b0 
 +root@debian9:~# docker run -d -p 8081:80 --memory="256m" nginx 
 +095472e5096a57277230ff94822d9bd0ad479ad26a33cbf83ec381cdb02910e1 
 +root@debian9:~# docker stats 
 +CONTAINER ID        NAME                     CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS 
 +095472e5096a        affectionate_goldstine   0.00%               1.805MiB / 256MiB   0.70%               2.38kB / 0B         0B / 0B             2 
 +^C 
 +</code>
  
-The programs included with the Debian GNU/Linux system are free software; +Pour plus d'informations, consultez cette **[[https://docs.docker.com/config/containers/resource_constraints/|page]]**.
-the exact distribution terms for each program are described in the +
-individual files in /usr/share/doc/*/copyright.+
  
-Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent +====7.4 - [WARN] 5.11  - Ensure CPU priority is set appropriately on the container====
-permitted by applicable law. +
-Last login: Fri Nov 28 15:57:32 2025 from 127.0.0.1+
  
-trainee@debian12:~$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys+Cet avertissement est du au fait que les conteneurs ont automatiquement accès à tous les CPU de l'hôte DockerPour limiter cet accès, plusieurs options sont possibles dont le plus couramment utilisée est **--cpu-shares**.
  
-trainee@debian12:~$ cat .ssh/id_dsa.pub >> .ssh/authorized_keys+La valeur de cpu-shares est relative à la valeur par défaut de **1024**Un valeur de 512 permet au conteneur d'accéder à 50% des cycles du CPU mais uniquement quand les cycles sont limitésQuand les cycles de CPU ne sont par restreints, chaque conteneur utilise autant qu'il en a besoin.
  
-trainee@debian12:~$ cat .ssh/id_ed25519.pub >> .ssh/authorized_keys+Pour plus d'informations, consultez cette **[[https://docs.docker.com/config/containers/resource_constraints/|page]]**.
  
-trainee@debian12:~$ cat .ssh/authorized_keys +====7.[WARN] 5.12  Ensure the container's root filesystem is mounted as read only====
-ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBwIXLMYJtWVgqSTqJfsFjS2ubtP+mHkC7XRU1rBWTBLYoJp8VOwtpKK1NTFSaeJhnjCvFuhYm8egqHI0gp3oBAtrainee@debian12 +
-ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDcV1OmeHZlWhLumCozdg7snul5MrkzhZjiUKWNJmGBBOauOq2CgMGYWYIhjyeVeaeiezq+wSe0jO09p8a1EbvYUibJsY9FOi8JcXTpxvlcqpuawudErjSsOf6JaIlbGpwDIMzmjeubfQx9jMZzfQIW9zfTDUi2tGquR/1TQPocGmmI9JFtoMqylk4+KsIHpriMBEVD/aKiGr1wjLHR1v3er8P1o8YOd+9tZXouJxWLHIA1swrnpXt8doVWYGx0E9jWsScqI4JPTy8kb2hfWeZWqONIqgJty0kOeTt6IynOauf9fSjxOG9Y4jyTV/OvTrBrmOCabjTIVMaIOWjLIPjNKJ8+eLnv+FuKUCc9mrAjbkXaP8T3JF43ofaBgSk09S3yo6wI3XI8ZlgROLDt7xxbFKosK/tYe8uOkpladNQHq3+EhAmzsfZJIstY0tNeK7aQ2KlsH6hZkLpqHsoKdzsLhRpMuPnV7wNlrikrbcvousDdQBpnzhNaXcm2BW+jmOstrainee@debian12 +
-ssh-dss AAAAB3NzaC1kc3MAAACBAMbFW6WkZFJ/ueao6xjxBb+wbbIhIyiH/GM6W/7ayiNmCfFlYCxw9nNAVghYJYNcP2hB+l0qZ0JYrOMUX82sXAvtYbbO1xSZWNTTrbYEyR+o2ZWlgYBDz0DYj++dLCl0zCGHOfRq2VHtCx93mCxCiw5NXNflxOuy2WoY7hawxV/RAAAAFQDURMf0f29i5or5GrE4JWlFVZbiIwAAAIBqGpwpz+uQTKpJmgiisVA1t/0MRP2YstUVnU29Nr/C7EJ3bom3wx4At/bbQEfc7iVf0pwRUSJhdTy4t2vnFWghoeoj2ALUA4QVarVr7m0TY7m8bYgAlPVBx674DDmHfUh99PTwYcrcJUJMpVd+mwVccnXGigpHhs84QvD6csmxCwAAAIAEtC/YVdYAxFUd+ScG0zrBSsPHA/cigCF5cywNeu+OZqrK2y6yiJwp9T9bCL2nvzTWeTg/2Ev7v7Zh2oNKE5/mUoTDDn22omefi9Ecxl9W6Pyi8R6PxV+8mXtjHKPVNEQyqA8tAG1VN33MMgWz5HUEdwdUrOcmrkpyXNsRzvgD6w== trainee@debian12 +
-ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILP736HSOOTZBe6+CHy8PINQ4gb9kKB4xj0JWWZy1Wgl trainee@debian12 +
-</code>+
  
-<WRAP center round important 50%> +Afin de minimiser le risque de compromettre un conteneur par la présence de code malicieux, il est conseillé de démarrer les conteneurs en lecture seule, sauf pour les volumes qui nécessitent un accès en écriture/lecture.
-**Important** - Notez que lors de la connexion au serveur, l'authentification utilise le couple de clefs asymétrique et aucun mot de passe n'est requis. +
-</WRAP> +
- +
-===Options de la commande===+
  
-Les options de cette commande sont :+Créez le fichier **write_a_file** dans le conteneur **mysql** :
  
 <code> <code>
-trainee@debian12:~$ ssh --help +root@debian9:~/docker-bench-security# docker container exec mysql touch /write_a_file
-unknown option -- - +
-usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] +
-           [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] +
-           [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] +
-           [-i identity_file] [-J [user@]host[:port]] [-L address] +
-           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] +
-           [-Q query_option] [-R address] [-S ctl_path] [-W host:port] +
-           [-w local_tun[:remote_tun]] destination [command [argument ...]]+
 </code> </code>
  
-====3.5 - Tunnels SSH====+La Commande **docker container diff** indique les différences apportées au conteneur par rapport à l'image dont il est issu :
  
-Le protocole SSH peut être utilisé pour sécuriser les protocoles tels telnet, pop3 etc.. En effet, on peut créer un //tunnel// SSH dans lequel passe les communications du protocole non-sécurisé.+<code> 
 +root@debian9:~/docker-bench-security# docker container diff mysql 
 +A /write_a_file 
 +C /run 
 +C /run/mysqld 
 +A /run/mysqld/mysqld.sock 
 +A /run/mysqld/mysqld.sock.lock 
 +/run/mysqld/mysqlx.sock 
 +/run/mysqld/mysqlx.sock.lock 
 +A /run/mysqld/mysqld.pid 
 +</code>
  
-La commande pour créer un tunnel ssh prend la forme suivante :+<WRAP center round important 60%> 
 +**Important** Notez que la sortie indique les changements apportés au conteneur. 
 +</WRAP>
  
-  ssh -N -f compte@<hôte_local> -L<port-local>:<hôte_distant>:<port_distant> +Arrêtez et supprimez le conteneur :
- +
-Dans votre cas, vous allez créer un tunnel entre Debian 12 et CentOS 8 entre le port 15023 et le port 23 :+
  
 <code> <code>
-trainee@debian12:~$ su +root@debian9:~/docker-bench-security# docker container stop mysql 
-Passwordfenestros+mysql 
 +root@debian9:~/docker-bench-security# docker container rm mysql 
 +mysql 
 +</code>
  
-root@debian12:~# ssh --f trainee@localhost -L15023:10.0.2.45:23+Lancez un conteneur mysql en lecture seule : 
 + 
 +<code> 
 +root@debian9:~/docker-bench-securitydocker container run ---name mysql --read-only -v /var/lib/mysql -v /tmp -v /var/run/mysqld -e MYSQL_ROOT_PASSWORD=password mysql 
 +7788c67c3b692515f63f4659a8f40af397bfbde97485e2e40c500c16b158045b 
 +root@debian9:~/docker-bench-security# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES 
 +7788c67c3b69        mysql               "docker-entrypoint.s…"   5 seconds ago       Up 5 seconds        3306/tcp, 33060/tcp   mysql
 </code> </code>
  
-Installez maintenant le client et le serveur telnet dans la VM CentOS 8:+Créez le fichier **write_a_file** dans le conteneur **mysql** :
  
 <code> <code>
-root@debian12:~# ssh -l trainee 10.0.2.45 +root@debian9:~/docker-bench-securitydocker container exec mysql touch /write_a_file 
-The authenticity of host '10.0.2.45 (10.0.2.45)' can't be established. +touchcannot touch '/write_a_file': Read-only file system 
-ED25519 key fingerprint is SHA256:YRt3r4qD/pZ8PoJ2irS3bH2miZj6/O3/kS4CBlcbz84. +</code>
-This key is not known by any other names. +
-Are you sure you want to continue connecting (yes/no/[fingerprint])? yes +
-WarningPermanently added '10.0.2.45(ED25519) to the list of known hosts. +
-trainee@10.0.2.45's passwordtrainee +
-Activate the web console with: systemctl enable --now cockpit.socket+
  
-Last loginThu Nov  6 04:13:03 2025 from 10.0.2.45+<WRAP center round important 60%> 
 +**Important** Notez l'erreur **touchcannot touch '/write_a_file'Read-only file system**. 
 +</WRAP>
  
-[trainee@centos8 ~]$ su - +Exécutez la commande **docker container diff** 
-Passwordfenestros+
  
-[root@centos8 ~]dnf install telnet-server+<code> 
 +root@debian9:~/docker-bench-securitydocker container diff mysql 
 +root@debian9:~/docker-bench-security# 
 </code> </code>
  
-Telnet n'est ni démarré ni activéIl convient donc de le démarrer et de l'activer :+<WRAP center round important 60%> 
 +**Important** : Notez que la commande ne retourne aucune sortieEn effet le conteneur étant en lecture seule, aucun changement ne peut intervenir. 
 +</WRAP>
  
-<code> +====7.6 - [WARN5.14  Ensure 'on-failure' container restart policy is set to '5'====
-[root@centos8 ~]# systemctl status telnet.socket +
-● telnet.socket Telnet Server Activation Socket +
-   Loaded: loaded (/usr/lib/systemd/system/telnet.socket; disabled; vendor preset: disabled) +
-   Active: inactive (dead) +
-     Docs: man:telnetd(8) +
-   Listen: [::]:23 (Stream) +
- Accepted: 0; Connected: 0;+
  
-[root@centos8 ~]# systemctl start telnet.socket+Cet avertissement concerne la politique de re-démarrage du conteneur. La politique **on-failure[:max-retries]** implique que le conteneur est re-démarré en cas d'arrêt du à une erreur qui se manifeste en tant que code de retour autre que zéro. La valeur de **max-retries** est le nombre de fois que Docker va essayer de re-démarrer le conteneurCette politique peut être mise en place au démarrage du conteneur, par exemple :
  
-[root@centos8 ~]systemctl status telnet.socket +  docker container run -d --name mysql --read-only --restart on-failure:5 -v /var/lib/mysql -v /tmp -/var/run/mysqld -e MYSQL_ROOT_PASSWORD=password mysql
-● telnet.socket Telnet Server Activation Socket +
-   Loadedloaded (/usr/lib/systemd/system/telnet.socket; disabled; vendor preset: disabled) +
-   Active: active (listening) since Fri 2025-11-28 09:42:52 EST; 2s ago +
-     Docs: man:telnetd(8) +
-   Listen: [::]:23 (Stream) +
- Accepted: 0; Connected: 0; +
-   CGroup: /system.slice/telnet.socket+
  
-Nov 28 09:42:52 centos8.ittraining.loc systemd[1]: Listening on Telnet Server Activation Socket.+Pour plus d'informations, consultez cette **[[https://docs.docker.com/config/containers/start-containers-automatically/|page]]**.
  
-[root@centos8 ~]# systemctl enable telnet.socket +====7.7 - [WARN5.25  - Ensure the container is restricted from acquiring additional privileges====
-Created symlink /etc/systemd/system/sockets.target.wants/telnet.socket → /usr/lib/systemd/system/telnet.socket.+
  
-[root@centos8 ~]# systemctl status telnet.socket +Pour complémenter la configuration précédemment mise en place, il convient de lancer le conteneur en utilisant l'option **--security-opt** :
-● telnet.socket Telnet Server Activation Socket +
-   Loaded: loaded (/usr/lib/systemd/system/telnet.socket; enabled; vendor preset: disabled) +
-   Active: active (listening) since Fri 2025-11-28 09:42:52 EST; 43s ago +
-     Docs: man:telnetd(8) +
-   Listen: [::]:23 (Stream) +
- Accepted: 0; Connected: 0; +
-   CGroup/system.slice/telnet.socket+
  
-Nov 28 09:42:52 centos8.ittraining.loc systemd[1]: Listening on Telnet Server Activation Socket. +  # docker container run -d --name mysql --read-only --restart on-failure:5 --security-opt="no-new-privileges:true" -v /var/lib/mysql -v /tmp -v /var/run/mysqld -e MYSQL_ROOT_PASSWORD=password mysql
-</code>+
  
-Arrêtez le service firewalld :+Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/reference/run/|page]]**.
  
-<code> +====7.8 - [WARN5.26  - Ensure container health is checked at runtime====
-[root@centos8 ~]# systemctl stop firewalld+
  
-[root@centos8 ~]# iptables -L +Voir l'avertissement 4.6.
-Chain INPUT (policy ACCEPT) +
-target     prot opt source               destination         +
  
-Chain FORWARD (policy ACCEPT) +====7.9 - [WARN] 5.28  - Ensure PIDs cgroup limit is used====
-target     prot opt source               destination         +
  
-Chain OUTPUT (policy ACCEPT) +Sans l'utilisation de l'option **--pids-limit** un conteneur pourrait être victime d'une attaque de type **[[https://fr.wikipedia.org/wiki/Fork_bomb|Fork Bomb]]**, un type spécifique de dénie de service. Ce type d'attaque peut faire crasher l'hôte Docker et le seul remède est de re-démarrer l'hôte. Voici un exemple d'un Fork Bomb : 
-target     prot opt source               destination+ 
 +<code> 
 +root@debian9:~/docker-bench-security# docker run -u 1000 ubuntu bash -c ":() { : | : & }; :; while [[ true ]]; do sleep 1; done"
 </code> </code>
  
-Connectez-vous ensuite via telnet sur CentOS 8 en utilisant le port 15023 de votre VM Debian 12 :+L'hôte Docker **manager** crash. Après avoir re-démarrer la machine virtuelle, créez de nouveau le conteneur en utilisant l'option **--pids-limit** :
  
 <code> <code>
-root@debian12:~# telnet localhost 15023 +root@debian9:~# docker ps -a 
-Trying ::1... +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS                 NAMES 
-Connected to localhost. +05b11e44e595        ubuntu              "bash -c ':() { | …"   6 minutes ago       Exited (255) 3 minutes ago                         upbeat_turing 
-Escape character is '^]'.+... 
 +root@debian9:~# docker rm 05 
 +05 
 +root@debian9:~# docker run -u 1000 --pids-limit 100 ubuntu bash -c ":() { : | : & }; :; while [[ true ]]; do sleep 1; done" 
 +environment: fork: retry: Resource temporarily unavailable 
 +environment: fork: retry: Resource temporarily unavailable 
 +environment: fork: retry: Resource temporarily unavailable 
 +environment: fork: retry: Resource temporarily unavailable 
 +environment: fork: retry: Resource temporarily unavailable 
 +environment: fork: retry: Resource temporarily unavailable 
 +^C 
 +</code>
  
-Kernel 4.18.0-348.7.1.el8_5.x86_64 on an x86_64 +Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/reference/commandline/run/#options|page]]**.
-centos8 login: trainee +
-Password:  +
-Last login: Fri Nov 28 09:45:22 from 10.0.2.46+
  
-[trainee@centos8 ~]$ pwd +Supprimez maintenant tous les conteneurs déjà créées :
-/home/trainee+
  
-[trainee@centos8 ~]$ exit +<code> 
-logout +root@debian9:~# docker ps -a 
-Connection closed by foreign host+CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                  NAMES 
-root@debian12:~# +095472e5096a        nginx               "nginx -g 'daemon of…"   13 minutes ago      Up 13 minutes                 0.0.0.0:8081->80/tcp   affectionate_goldstine 
 +5b31fe1e13bc        ubuntu              "bash -c ':() { : | …"   28 minutes ago      Exited (254) 28 minutes ago                          pensive_fermat 
 +7788c67c3b69        mysql               "docker-entrypoint.s…"   About an hour ago   Exited (255) 33 minutes ago   3306/tcp, 33060/tcp    mysql 
 +root@debian9:~# docker stop 095 
 +095 
 +root@debian9:~# docker rm `docker ps -aq` 
 +5b31fe1e13bc 
 +7788c67c3b69 
 +095472e5096a 
 +root@debian9:~# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES 
 </code> </code>
  
-<WRAP center round important 50%> +Re-créez le conteneur mysql en intégrant les points vus ci-dessus :
-**Important** Notez bien que votre communication telnet passe par le tunnel SSH. +
-</WRAP>+
  
-====3.6 SCP====+<code> 
 +root@debian9:~# cd docker-bench-security/ 
 +root@debian9:~/docker-bench-security# docker container run -d --name mysql --read-only --restart on-failure:5 --security-opt="no-new-privileges:true" --pids-limit 100 --memory="256m" --cpu-shares 512 -v /var/lib/mysql -v /tmp -v /var/run/mysqld -e MYSQL_ROOT_PASSWORD=password mysql 
 +df54974ebc11fe357f6e8e9b0f8499aee2658af435e32a45058a1e49fcd3dc24 
 +root@debian9:~/docker-bench-security# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES 
 +df54974ebc11        mysql               "docker-entrypoint.s…"   5 seconds ago       Up 4 seconds        3306/tcp, 33060/tcp   mysql 
 +</code>
  
-===Introduction===+Exécutez de nouveau le script **docker-bench-security.sh**, vous devez obtenir un résultat similaire à ceci en ce qui concerne la sécurité du Container Runtime :
  
-La commande **scp** est le successeur et la remplaçante de la commande **rcp** de la famille des commandes **remote**. Il permet de faire des transferts sécurisés à partir d'une machine distante :+<code> 
 +root@debian9:~/docker-bench-security# ./docker-bench-security.sh 
 +... 
 +[INFO] 5 - Container Runtime 
 +[WARN] 5.1  - Ensure that, if applicable, an AppArmor Profile is enabled  
 +[WARN]      No AppArmorProfile Found: mysql 
 +[PASS] 5.2  - Ensure that, if applicable, SELinux security options are set 
 +[PASS] 5.3  - Ensure Linux Kernel Capabilities are restricted within containers 
 +[PASS] 5.4  - Ensure that privileged containers are not used 
 +[PASS] 5.5  - Ensure sensitive host system directories are not mounted on containers 
 +[PASS] 5.6  - Ensure sshd is not run within containers 
 +[PASS] 5.7  - Ensure privileged ports are not mapped within containers 
 +[NOTE] 5.8  - Ensure that only needed ports are open on the container 
 +[PASS] 5.9  - Ensure the host's network namespace is not shared 
 +[PASS] 5.10  - Ensure that the memory usage for containers is limited 
 +[PASS] 5.11  - Ensure CPU priority is set appropriately on the container 
 +[PASS] 5.12  - Ensure that the container's root filesystem is mounted as read only 
 +[PASS] 5.13  - Ensure that incoming container traffic is bound to a specific host interface 
 +[PASS] 5.14  - Ensure that the 'on-failure' container restart policy is set to '5' 
 +[PASS] 5.15  - Ensure the host's process namespace is not shared 
 +[PASS] 5.16  - Ensure the host's IPC namespace is not shared 
 +[PASS] 5.17  - Ensure that host devices are not directly exposed to containers 
 +[INFO] 5.18  - Ensure that the default ulimit is overwritten at runtime if needed 
 +[INFO]      Container no default ulimit override: mysql 
 +[PASS] 5.19  - Ensure mount propagation mode is not set to shared 
 +[PASS] 5.20  - Ensure the host's UTS namespace is not shared 
 +[PASS] 5.21  - Ensure the default seccomp profile is not Disabled 
 +[NOTE] 5.22  - Ensure docker exec commands are not used with privileged option 
 +[NOTE] 5.23  - Ensure that docker exec commands are not used with the user=root option 
 +[PASS] 5.24  - Ensure that cgroup usage is confirmed 
 +[PASS] 5.25  - Ensure that the container is restricted from acquiring additional privileges 
 +[WARN] 5.26  - Ensure that container health is checked at runtime 
 +[WARN]      Health check not set: mysql 
 +[INFO] 5.27  - Ensure that Docker commands always make use of the latest version of their image 
 +[PASS] 5.28  - Ensure that the PIDs cgroup limit is used 
 +[INFO] 5.29  - Ensure that Docker's default bridge 'docker0' is not used 
 +[INFO]      * Container in docker0 networkmysql 
 +[PASS] 5.30  - Ensure that the host's user namespaces are not shared 
 +[PASS] 5.31  - Ensure that the Docker socket is not mounted inside any containers 
 +... 
 +</code>
  
-  $ scp compte@numero_ip(nom_de_machine):/chemin_distant/fichier_distant /chemin_local/fichier_local+=====LAB #8 - Sécurisation des Images avec Docker Content Trust=====
  
-ou vers une machine distante :+**Docker Content Trust (DCT)** a été introduit avec Docker Engine 1.8 et Docker CS Engine 1.9.0. DCT permet la vérification de l'authenticité, de l'intégrité et la date de publication d'une image Docker dans un registry. Par défaut, DCT est **désactivé**.
  
-  $ scp /chemin_local/fichier_local compte@numero_ip(nom_de_machine):/chemin_distant/fichier_distant+DCT est utilisé par le **Docker Hub Registry** mais peut aussi être mis en place dans des Registry privés, notamment grâce à la mise en place du **[[https://www.docker.com/products/image-registry|Docker Container Registry]]** qui est inclus avec **Docker Enterprise**.
  
-===Utilisation===+DCT est basé sur l'utilisation de l'outil **[[https://docs.docker.com/notary/service_architecture/|Docker Notary]]** pour publier et gérer du contenu ainsi que **[[https://theupdateframework.github.io/|The Update Framework (TUF)]]**.
  
-Nous allons maintenant utiliser **scp** pour chercher un fichier sur le <<serveur>> :+Pour plus d'information concernant DCT, consultez cette **[[https://docs.docker.com/engine/security/trust/content_trust/|page]]**.
  
-Créez le fichier **/home/trainee/scp_test** :+====8.1 - DOCKER_CONTENT_TRUST==== 
 + 
 +Pour utiliser **Docker Content Trust (DCT)**, il convient de vérifier que la valeur de la variable **DOCKER_CONTENT_TRUST** est **1** :
  
 <code> <code>
-trainee@debian12:~$ touch /home/trainee/scp_test+root@debian9:~# echo $DOCKER_CONTENT_TRUST 
 +1
 </code> </code>
  
-Récupérez le fichier **scp_test** en utilisant scp :+Dans le cas contraire, il faut fixer la valeur de la variable à 1 :
  
 <code> <code>
- +root@debian9:~# export DOCKER_CONTENT_TRUST=
-trainee@debian12:~$ scp trainee@127.0.0.1:/home/trainee/scp_test /tmp/scp_test +root@debian9:~# echo $DOCKER_CONTENT_TRUST 
- +1
-trainee@debian12:~$ ls /tmp/scp_test +
-/tmp/scp_test+
 </code> </code>
  
-=====LAB #4 Mise en place d'un VPN avec OpenVPN=====+====8.2 DCT et la commande docker pull====
  
-====4.1 - Présentation====+Afin d'utiliser un registry privé du Docker Hub, il est nécessaire de se connecter :
  
-**%%OpenVPN%%** :+<code> 
 +root@debian9:~# docker login 
 +Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. 
 +Username: <votre_compte> 
 +Password: <votre_mot_de_passe> 
 +WARNING! Your password will be stored unencrypted in /root/.docker/config.json. 
 +Configure a credential helper to remove this warning. See 
 +https://docs.docker.com/engine/reference/commandline/login/#credentials-store
  
-  * permet à des pairs de s'authentifier entre eux à l'aide : +Login Succeeded 
-    * d'une **clé privée partagée** à l'avance,  +</code>
-    * de **certificats** ou,  +
-    * à partir de la version 2.0 et à condition que le serveur possède un certificat, de **couples de noms d'utilisateur/mot de passe** sans besoin d'un certificat client +
-  * utilise de manière intensive la bibliothèque d'authentification **%%OpenSSL%%** ainsi que le protocole **SSLv3/TLSv1**,  +
-  * n'est pas compatible avec IPsec ou d'autres logiciels VPN.  +
- +
-====Configuration commune au client et au serveur====+
  
-Installez le paquet openvpn :+Pour constater l'impact de l'utilisation de DCT, il convient simplement de faire un **pull** d'une image non-signée :
  
 <code> <code>
-root@debian12:~# apt install openvpn+root@debian9:~# docker image pull i2tch/docker:unsigned 
 +Error: remote trust data does not exist for docker.io/i2tch/docker: notary.docker.io does not have trust data for docker.io/i2tch/docker
 </code> </code>
  
-Naviguez au répertoire **/etc/openvpn** et créez la clef partagée :+<WRAP center round important 60%> 
 +**Important** : Notez l'erreur **Error: remote trust data does not exist for docker.io/i2tch/docker ...**. En effet Docker Trust empêche l'utilisation des images non-signées. 
 +</WRAP>
  
-<code> +Par contre, toutes les images de type **official** sont signées :
-[root@centos7 ~]# cd /etc/openvpn/+
  
-root@debian12:/etc/openvpnopenvpn --genkey secret static.key +<code> 
- +root@debian9:~docker image pull centos 
-root@debian12:/etc/openvpn# cat static.key +Using default tag: latest 
-# +Pull (1 of 1): centos:latest@sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9 
-# 2048 bit OpenVPN static key +sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9: Pulling from library/centos 
-# +729ec3a6ada3: Pull complete  
------BEGIN OpenVPN Static key V1----- +Digest: sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9 
-77b47829a9d17aacc71b05a2bfa9bcba +Status: Downloaded newer image for centos@sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9 
-e90370cc07238a5adb74ef479e87547d +Tagging centos@sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9 as centos:latest 
-fc18a69c3c5307bdc1ca27c7aa6f3a35 +docker.io/library/centos:latest
-e09e815a27f50c28699be3af28decd3c +
-b319923c2fe3826c2afb41d2e0239229 +
-fee9bc33566941e09e2f905f1bcbb59a +
-55cf8d535334ac46eda3f35be0b7e22b +
-c3261de182f7cde5cc7d756420907514 +
-0399672d104cebee31a44ca6d89663c7 +
-784b928e893c4d3a6e7d294e94266e1b +
-5a98f80f797651199069902be01d2bbd +
-94765d310f8d0466484a0e7cbf10bb98 +
-d247127aa53a6c18a6def6ed73a28b69 +
-b7d052209318057e2ccb9660fc42543b +
-d79dab314ecbc19a6b8936255c17d673 +
-fb0bdc3856a034ffc3931a7d645d6d96 +
------END OpenVPN Static key V1-----+
 </code> </code>
 +
 +Cette image est maintenant présente sur **manager.i2tch.loc** :
  
 <code> <code>
-root@debian12:~# scp /etc/openvpn/static.key trainee@10.0.2.45:/tmp/static.key +root@debian9:~# docker images 
-trainee@10.0.2.45's password:  +REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 
-static.key                                                                                                                                                                      100%  636     1.2MB/  00:00+ubuntu              latest              775349758637        9 days ago          64.2MB 
 +nginx               latest              540a289bab6c        weeks ago         126MB 
 +alpine              latest              965ea09ff2eb        weeks ago         5.55MB 
 +mysql               latest              c8ee894bd2bd        3 weeks ago         456MB 
 +centos              latest              0f3e07c0138f        5 weeks ago         220MB
 </code> </code>
  
-====Configuration du client====+===L'option disable-content-trust=== 
 + 
 +Il est aussi possible d'activer ou de désactiver l'utilisation de DCT avec les options **--disable-content-trust=false/true** lors de l'utilisation des commandes **docker build**, **docker push** et **docker pull**, **docker create** et **docker run** :
  
 <code> <code>
-root@debian12:/etc/openvpnssh -l trainee 10.0.2.45 +root@debian9:~docker image pull --disable-content-trust=true i2tch/docker:unsigned 
-trainee@10.0.2.45's passwordtrainee +unsignedPulling from i2tch/docker 
-Activate the web console withsystemctl enable --now cockpit.socket+10d70a43a9f9Pull complete  
 +4f4fb700ef54: Pull complete  
 +8951e3a91277: Pull complete  
 +d1814ff35b8b: Pull complete  
 +ff2a2bbf6141: Pull complete  
 +b7205da5c3c9: Pull complete  
 +458ea241cc75: Pull complete  
 +74d1c0702786: Pull complete  
 +c66f3692932d: Pull complete  
 +9224bd1b9757: Pull complete  
 +Digest: sha256:885fc831cb853700ded04029b4fa70ed502947042f6f154e432395cb35619d11 
 +Status: Downloaded newer image for i2tch/docker:unsigned 
 +docker.io/i2tch/docker:unsigned
  
-Last loginFri Nov 28 09:47:05 2025 from ::ffff:10.0.2.46+root@debian9:~# docker image ls 
 +REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 
 +ubuntu              latest              775349758637        9 days ago          64.2MB 
 +nginx               latest              540a289bab6c        2 weeks ago         126MB 
 +alpine              latest              965ea09ff2eb        weeks ago         5.55MB 
 +mysql               latest              c8ee894bd2bd        3 weeks ago         456MB 
 +centos              latest              0f3e07c0138f        5 weeks ago         220MB 
 +i2tch/docker        unsigned            9b915a241e29        3 years ago         212MB
  
-[trainee@centos8 ~]$ su - +root@debian9:~# docker rmi i2tch/docker:unsigned 
-Passwordfenestros+Untagged: i2tch/docker:unsigned 
 +Untagged: i2tch/docker@sha256:885fc831cb853700ded04029b4fa70ed502947042f6f154e432395cb35619d11 
 +Deleted: sha256:9b915a241e29dc2767980445e3109412b1905b6f1617aea7098e7ac1e5837ae2 
 +Deleted: sha256:27eb08aec7b41dbfa2fd49bc2b3fad9b020fe40b0bc8289af7f53770f0843e7d 
 +Deleted: sha256:7ad0aff4b88909fcff6372fdd26c24d688803b06845426b5a90bcd2f2cae93f4 
 +Deleted: sha256:b93bcd594116ac8886f2daa0fc8d75a59da00161731dab24ababea853d031908 
 +Deleted: sha256:54eda0a22e4b2a1b166cf996eb0651a4f53dec7e9dfad3549bbfe6078f2238a4 
 +Deleted: sha256:36575f1e2764d54fdb92b5296cf4e993499836d6dd9a006f32e173865835070e 
 +Deleted: sha256:27074774f844bdeba18e786585604c8b6352e925a7bd560deb66252bc8ccb861 
 +Deleted: sha256:0da68695f8bc66fcea8f09004b5cb078861f5d99748f8b7ed035690e02c41477 
 +Deleted: sha256:5dbda9873cdda8ff912b0ae5c34790ee06d7117fa27b193610fa2f7063bf55ff 
 +Deleted: sha256:149690c37bdc8680ec66b0e2cc138f6d63caad74b091acf86a2a18111b90ea79 
 +Deleted: sha256:2caf8a80130d6e9f4ed22e1ec1c3abd2c3f4330d2df9ec62f3b751300190b9e4 
 +Deleted: sha256:1445a9131f2b28a12ff6396faebd6b4beb2cccd7af8eae28d5ff659d65de03ad 
 +Deleted: sha256:4d9799a0754804f5cd623ab744757d16ec81862ee6e5d6986d9d1b0c5e5d5637 
 +Deleted: sha256:dd833146402e8e6e67c48a6ae79a3c86101123e3d6ab1fc7999685eeea06ccba 
 +Deleted: sha256:08d8e6ed6c3a5ac1bfee00f7b11f0a870d6bdc4af6d34169fa1e032c241a63a6 
 +Deleted: sha256:0f3637356bb908638dda037c9c6aa4a2be8a19dbcf452a00cd733a8a456077ac 
 +Deleted: sha256:aedb1b3b3b6e70ae4a342dfdcea874495b9d095ed6ba8eb4bc08f90ad9e83125 
 +Deleted: sha256:05903cd969529ea56beec880bbeb7e90f1bdc281882f1cf3755760e41b181409 
 +Deleted: sha256:d124781fc06a73b05a8644958397994bae668aba2f06f397fe1387c676b0d86f
 </code> </code>
  
-<code> +====8.3 DCT et la commande docker push====
-[root@centos8 ~]# dnf install epel-release +
-</code>+
  
-<code> +Pour envoyer l'image dont l'IMAGE ID est **965ea09ff2eb** dans le registry privé, le tag de l'image doit être modifié :
-[root@centos8 ~]# dnf install openvpn +
-</code>+
  
 <code> <code>
-[root@centos8 ~]mv /tmp/static.key /etc/openvpn +root@debian9:~# docker image tag alpine:latest <votre_compte>/docker:alpine
-[root@centos8 ~]# ls /etc/openvpn +
-client  server  static.key+
 </code> </code>
  
-Créez le fichier **/etc/openvpn/client/client.conf** :+L'image dont l'IMAGE ID est **965ea09ff2eb** a maintenant deux tags **alpine:latest** et **<votre_compte>/docker:alpine** :
  
 <code> <code>
-[root@centos8 ~]vi /etc/openvpn/client/client.conf +root@debian9:~# docker image ls 
-[root@centos8 ~]# cat /etc/openvpn/client/client.conf +REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE 
-remote 10.0.2.46 +ubuntu                 latest              775349758637        9 days ago          64.2MB 
-dev tun +nginx                  latest              540a289bab6c        2 weeks ago         126MB 
-port 1194 +<votre_compte>/docker  alpine              965ea09ff2eb        2 weeks ago         5.55MB 
-proto udp +alpine                 latest              965ea09ff2eb        weeks ago         5.55MB 
-comp-lzo +mysql                  latest              c8ee894bd2bd        3 weeks ago         456MB 
-ifconfig 10.0.0.2 10.0.0.1 +centos                 latest              0f3e07c0138f        5 weeks ago         220MB
-secret /etc/openvpn/static.key+
 </code> </code>
  
-Lancez openvpn en ligne de commande et en arrière plan en spécifiant une journalisation :+Lors du push vers le registry privé, il faut créer des passphrases pour **deux** clefs : 
 + 
 +  * la **root** key aussi connue sous le nom **offline** key (ID 192fc7e), qui est uniquement demandée la **première** fois après la mise en place de DCT lors de la création d'un **repositry**, 
 +  * la **repository** key aussi connue sous le nom **tagging** key (ID 168c754), utilisée pour signer l'image en y apposant un **tag**. La signature est spécifique au **repositry**.
  
 <code> <code>
-[root@centos8 ~]openvpn --config /etc/openvpn/client/client.conf > /var/log/vpn 2>&1 & +root@debian9:~# docker push <votre_compte>/docker:alpine 
-[1] 14598+The push refers to repository [docker.io/<votre_compte>/docker] 
 +77cae8ab23bf: Mounted from library/alpine  
 +alpine: digest: sha256:e4355b66995c96b4b468159fc5c7e3540fcef961189ca13fee877798649f531a size: 528 
 +Signing and pushing trust metadata 
 +You are about to create a new root signing key passphraseThis passphrase 
 +will be used to protect the most sensitive key in your signing system. Please 
 +choose a long, complex passphrase and be careful to keep the password and the 
 +key file itself secure and backed up. It is highly recommended that you use a 
 +password manager to generate the passphrase and keep it safe. There will be no 
 +way to recover this key. You can find the key in your config directory. 
 +Enter passphrase for new root key with ID 192fc7e: fenestros 
 +Repeat passphrase for new root key with ID 192fc7e: fenestros 
 +Enter passphrase for new repository key with ID 168c754: fenestros 
 +Repeat passphrase for new repository key with ID 168c754: fenestros 
 +Finished initializing "docker.io/<votre_compte>/docker" 
 +Successfully signed docker.io/<votre_compte>/docker:alpine
 </code> </code>
  
-Vérifiez ensuite que le **socket** d'openvpn soit ouvert :+Les clefs sont stockées dans le répertoire **~/.docker/trust/private** :
  
 <code> <code>
-[root@centos8 ~]netstat -an | grep 1194 +root@debian9:~# ls -l ~/.docker/trust 
-udp        0      0 0.0.0.0:1194            0.0.0.0:*     +total 8 
-</code>+drwx------ 2 root root 4096 nov 10 14:49 private 
 +drwx------ 3 root root 4096 nov  8 13:48 tuf
  
-Constatez ensuite la table de routage :+root@debian9:~# ls -l ~/.docker/trust/private 
 +total 8 
 +-rw------- 1 root root 447 nov.  10 14:49 168c754ea8f36ce7fbcbe2299b6d91fc0f4d594c9ed9b86916687b618d8438ac.key 
 +-rw------- 1 root root 416 nov.  10 14:49 192fc7ed9543ad4bceec58886ab1d605b7433c35f7462d7343d0780d8fddf1db.key 
 +root@debian9:~# cat ~/.docker/trust/private/168c754ea8f36ce7fbcbe2299b6d91fc0f4d594c9ed9b86916687b618d8438ac.key  
 +-----BEGIN ENCRYPTED PRIVATE KEY----- 
 +gun: docker.io/i2tch/docker 
 +role: targets
  
-<code>                             +MIHuMEkGCSqGSIb3DQEFDTA8MBsGCSqGSIb3DQEFDDAOBAhm7HwR0y8FFAICCAAw 
-[root@centos8 ~]netstat -ar +HQYJYIZIAWUDBAEqBBC729tU73wKHFQSbmZ1EVZaBIGgmGiFSs4lM5tElSGukl1B 
-Kernel IP routing table +HrELT9aFooFgW7oSXNLM8aFfF/vJ+BSjsgfqWLdvuH+DUXXdUidxcoGMEWnVZNIC 
-Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface +3m40g3MywHilW4rUcjoHVTTUXABGXUQ3f7h+nI15CXcZ11qRLyWbf2uywE9yYH9O 
-default         _gateway        0.0.0.0         UG        0 0          0 ens18 +M7GLUcE+pTENJKfZAhRGBEL+LgXNfGI1aAVqaEbBDcDnKKf4Uj1Xu4oLJ7je8+nT 
-10.0.0.1        0.0.0.0         255.255.255.255 UH        0 0          0 tun0 +dg== 
-10.0.2.0        0.0.0.0         255.255.255.0           0 0          0 ens18 +-----END ENCRYPTED PRIVATE KEY----- 
-192.168.122.0   0.0.0.0         255.255.255.0           0 0          0 virbr0+ 
 +root@debian9:~# cat ~/.docker/trust/private/192fc7ed9543ad4bceec58886ab1d605b7433c35f7462d7343d0780d8fddf1db.key  
 +-----BEGIN ENCRYPTED PRIVATE KEY----
 +role: root 
 + 
 +MIHuMEkGCSqGSIb3DQEFDTA8MBsGCSqGSIb3DQEFDDAOBAiAtCzEar3AhgICCAAw 
 +HQYJYIZIAWUDBAEqBBAO7hHWVoqOo6xcETQQDXRdBIGgPUoLzTz07Ajx8K3D8+Vv 
 +2NUiflMYhH/0I9PL6iA2JJCmD0l+8Ueljy+vHRCu7UAIyWXyIHFN5Aab40mk9/Pg 
 +V2BwSlXp7t1Cnqp/ah7g0T40+OnT64JkTS+l3cS0CaCf2E4l6nY8g4cl40hZIFJz 
 +KREO8uEq3v7HcSBBqFm0+TU+92d7hVuDApPaj0lZYP+3f7H6AjUOqu6hUoK8Ck/
 +Ig== 
 +-----END ENCRYPTED PRIVATE KEY-----
 </code> </code>
  
-Notez la présence de la route via **tun0**.+====8.4 - DCT et la commande docker build====
  
-Constatez ensuite le montage du tunnel en regardant le contenu du fichier de journalisation **/var/log/vpn** :+L'exemple suivant démontre un Dockerfile qui référence une image parente non signée :
  
 <code> <code>
-[root@centos7 ~]tail /var/log/vpn+root@debian9:~# mkdir nottrusted 
 +root@debian9:~# cd nottrusted/ 
 +root@debian9:~/nottrusted# vi Dockerfile 
 +root@debian9:~/nottrusted# cat Dockerfile 
 +FROM docker/trusttest:latest 
 +RUN echo
 </code> </code>
  
-L'architecture réseau sera donc la suivante :+Lors du build de l'image **<votre_compte>/docker:nottrusted** qui utilise ce Dockerfile, une erreur est retournée car sa création n'est pas conforme à l'utilisation de DCT :
  
-<file+<code
-                                   serveur <------------Votre réseau-------------client +root@debian9:~/nottrusted# docker build -t <votre_compte>/docker:nottrusted 
-                                      |                                               | +Sending build context to Docker daemon 
-                                      |                                               | +
-                                  eth0@ifxxx                                      eth0@ifxxx +
-                                  172.yy.0.3                                      172.yy.0.4  +
-</file>+
  
-====Configuration du serveur====+error during connect: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/build?buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=i2tch%2Fdocker%3Anottrusted&target=&ulimits=null&version=1: Error: remote trust data does not exist for docker.io/docker/trusttest: notary.docker.io does not have trust data for docker.io/docker/trusttest 
 +</code>
  
-Créez le fichier **/etc/openvpn/server/server.conf** :+L'utilisation de l'option **--disable-content-trust** permet la construction de l'image **<votre_compte>/docker:nottrusted** :
  
 <code> <code>
-root@debian12:~# vi /etc/openvpn/server/server.conf+root@debian9:~/nottrusteddocker build --disable-content-trust -t <votre_compte>/docker:nottrusted . 
 +Sending build context to Docker daemon  2.048kB 
 +Step 1/2 : FROM docker/trusttest:latest 
 +latest: Pulling from docker/trusttest 
 +Image docker.io/docker/trusttest:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/ 
 +aac0c133338d: Pull complete  
 +a3ed95caeb02: Pull complete  
 +Digest: sha256:50c0cdd0577cc7ab7c78e73a0a89650b222f6ce2b87d10130ecff055981b702f 
 +Status: Downloaded newer image for docker/trusttest:latest 
 + ---> cc7629d1331a 
 +Step 2/2 : RUN echo 
 + ---> Running in 694e79d3cd88
  
-root@debian12:~# cat /etc/openvpn/server/server.conf +Removing intermediate container 694e79d3cd88 
-dev tun + ---> 686e85ee76b8 
-ifconfig 10.0.0.1 10.0.0.2 +Successfully built 686e85ee76b8 
-secret /etc/openvpn/static.key +Successfully tagged <votre_compte>/docker:nottrusted
-port 1194 +
-proto udp +
-user nobody +
-group nobody +
-daemon +
-comp-lzo +
-keepalive 10 60 +
-ping-timer-rem +
-persist-tun +
-persist-key +
-log /var/log/vpn +
-verb 1+
 </code> </code>
  
-Arrêtez le service **firewalld** :+Lors du push de l'image **<votre_compte>/docker:nottrusted** vers le repositry distant, celle-ci est **signée** :
  
 <code> <code>
-root@debian12:~# systemctl stop firewalld+root@debian9:~/nottrusteddocker push <votre_compte>/docker:nottrusted 
 +The push refers to repository [docker.io/<votre_compte>/docker] 
 +5f70bf18a086: Layer already exists  
 +c22f7bc058a9: Mounted from docker/trusttest  
 +nottrusted: digest: sha256:1183c62a5d31e202b5f5f528e9e7cdc36140aa3212c938e1d471c6b3b59f01bc size: 734 
 +Signing and pushing trust metadata 
 +Enter passphrase for repository key with ID 168c754: fenestros 
 +Successfully signed docker.io/<votre_compte>/docker:nottrusted 
 +</code>
  
-root@debian12:~# iptables -L +<WRAP center round important 60%> 
-Chain INPUT (policy ACCEPT) +**Important** : Notez l'utilisation de la même root key que lors du push de l'image **<votre_compte>/docker:alpine** car il s'agit du même repositry.  
-target     prot opt source               destination         +</WRAP>
  
-Chain FORWARD (policy ACCEPT) +===Créer un deuxième Repositry===
-target     prot opt source               destination         +
  
-Chain OUTPUT (policy ACCEPT) +Par contre en modifiant le tag de l'image **<votre_compte>/docker:nottrusted** à **<votre_compte>/otherimage:latest**, un autre repositry sera créé lors du push de l'image renommée :
-target     prot opt source               destination +
-</code> +
- +
-Lancez openvpn en ligne de commande et en arrière plan en spécifiant une journalisation :+
  
 <code> <code>
-root@debian12:~# openvpn --config /etc/openvpn/server/server.conf > /var/log/vpn 2>&1 & +root@debian9:~/nottrusteddocker tag <votre_compte>/docker:nottrusted <votre_compte>/otherimage:latest 
-[111644+root@debian9:~/nottrusted# docker images 
 +REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE 
 +<votre_compte>/docker        nottrusted          686e85ee76b8        9 minutes ago       5.03MB 
 +<votre_compte>/otherimage    latest              686e85ee76b8        9 minutes ago       5.03MB 
 +ubuntu                       latest              775349758637        9 days ago          64.2MB 
 +nginx                        latest              540a289bab6c        2 weeks ago         126MB 
 +<votre_compte>/docker        alpine              965ea09ff2eb        weeks ago         5.55MB 
 +alpine                       latest              965ea09ff2eb        2 weeks ago         5.55MB 
 +mysql                        latest              c8ee894bd2bd        3 weeks ago         456MB 
 +centos                       latest              0f3e07c0138f        5 weeks ago         220MB 
 +docker/trusttest             latest              cc7629d1331a        4 years ago         5.03MB 
 + 
 +root@debian9:~/nottrusted# docker push docker.io/<votre_compte>/otherimage:latest 
 +The push refers to repository [docker.io/<votre_compte>/otherimage] 
 +5f70bf18a086: Mounted from <votre_compte>/docker  
 +c22f7bc058a9: Mounted from <votre_compte>/docker  
 +latest: digest: sha256:1183c62a5d31e202b5f5f528e9e7cdc36140aa3212c938e1d471c6b3b59f01bc size: 734 
 +Signing and pushing trust metadata 
 +Enter passphrase for root key with ID 192fc7e: fenestros 
 +Enter passphrase for new repository key with ID 7b13d02: fenestros 
 +Repeat passphrase for new repository key with ID 7b13d02: fenestros 
 +Finished initializing "docker.io/<votre_compte>/otherimage" 
 +Successfully signed docker.io/<votre_compte>/otherimage:latest
 </code> </code>
  
-Vérifiez ensuite que le **socket** d'openvpn soit ouvert :+<WRAP center round important 60%> 
 +**Important** : Notez la création d'une deuxième repositry key (ID 7b13d02 au lieu de ID 168c754) lors du push de l'image **<votre_compte>/otherimage:latest** car il s'agit d'un autre repositry.  
 +</WRAP> 
 + 
 +La présence de cette deuxième repositry key (**7b13d02d74264624fb201e7ae13ae694286b9f761aa86adddefd0408c7234a58.key**) peut être constatée dans le répertoire **~/.docker/trust/private** :
  
 <code> <code>
-[root@centos7 ~]netstat -an | grep 1194 +root@debian9:~/nottrustedls -l ~/.docker/trust/private 
-udp        0      0 0.0.0.0:1194                0.0.0.0:*    +total 12 
 +-rw------- 1 root root 447 nov 10 14:49 168c754ea8f36ce7fbcbe2299b6d91fc0f4d594c9ed9b86916687b618d8438ac.key 
 +-rw------- 1 root root 416 nov 10 14:49 192fc7ed9543ad4bceec58886ab1d605b7433c35f7462d7343d0780d8fddf1db.key 
 +-rw------- 1 root root 451 nov 10 17:37 7b13d02d74264624fb201e7ae13ae694286b9f761aa86adddefd0408c7234a58.key
 </code> </code>
  
-Constatez ensuite la table de routage :+En inspectant les clefs des images créées, l'utilisation des différentes clefs est démontrées très clairement :
  
-<code>                             +<code> 
-[root@centos7 ~]# netstat -ar  +root@debian9:~/nottrusted# docker trust inspect <votre_compte>/docker:alpine 
-Kernel IP routing table +
-Destination     Gateway         Genmask         Flags   MSS Fenêtre irtt Iface +    { 
-0.0.0.0         10.0.2.2        0.0.0.0         UG        0 0          0 enp0s3 +        "Name": "<votre_compte>/docker:alpine", 
-10.0.0.1        0.0.0.0         255.255.255.255 UH        0 0          0 tun0 +        "SignedTags":
-10.0.2.0        0.0.0.0         255.255.255.0           0 0          0 enp0s3+            { 
 +                "SignedTag": "alpine", 
 +                "Digest": "e4355b66995c96b4b468159fc5c7e3540fcef961189ca13fee877798649f531a", 
 +                "Signers":
 +                    "Repo Admin" 
 +                ] 
 +            } 
 +        ], 
 +        "Signers": [], 
 +        "AdministrativeKeys":
 +            { 
 +                "Name": "Root", 
 +                "Keys":
 +                    { 
 +                        "ID": "d4074334a4ff5a9a43ebd1320ad77c2df88c990ec812f90eb045c603c01ab698" 
 +                    } 
 +                ] 
 +            }, 
 +            { 
 +                "Name": "Repository", 
 +                "Keys":
 +                    { 
 +                        "ID": "168c754ea8f36ce7fbcbe2299b6d91fc0f4d594c9ed9b86916687b618d8438ac" 
 +                    } 
 +                ] 
 +            } 
 +        ] 
 +    } 
 +
 +root@debian9:~/nottrusteddocker trust inspect <votre_compte>/docker:nottrusted 
 +[ 
 +    { 
 +        "Name": "<votre_compte>/docker:nottrusted", 
 +        "SignedTags":
 +            { 
 +                "SignedTag": "nottrusted", 
 +                "Digest": "1183c62a5d31e202b5f5f528e9e7cdc36140aa3212c938e1d471c6b3b59f01bc", 
 +                "Signers":
 +                    "Repo Admin" 
 +                ] 
 +            } 
 +        ], 
 +        "Signers": [], 
 +        "AdministrativeKeys":
 +            { 
 +                "Name": "Root", 
 +                "Keys":
 +                    { 
 +                        "ID": "d4074334a4ff5a9a43ebd1320ad77c2df88c990ec812f90eb045c603c01ab698" 
 +                    } 
 +                ] 
 +            }, 
 +            { 
 +                "Name": "Repository", 
 +                "Keys":
 +                    { 
 +                        "ID": "168c754ea8f36ce7fbcbe2299b6d91fc0f4d594c9ed9b86916687b618d8438ac" 
 +                    } 
 +                ] 
 +            } 
 +        ] 
 +    } 
 +]
 </code> </code>
  
-Constatez ensuite le montage du tunnel en regardant le contenu du fichier de journalisation **/var/log/vpn** :+<WRAP center round important 60%> 
 +**Important** : Notez que les clefs utilisées sont les mêmes pour les deux images.  
 +</WRAP>
  
 <code> <code>
-[root@centos7 ~]tail /var/log/vpn+root@debian9:~/nottrusteddocker trust inspect <votre_compte>/otherimage:latest 
 +
 +    { 
 +        "Name": "<votre_compte>/otherimage:latest", 
 +        "SignedTags":
 +            { 
 +                "SignedTag": "latest", 
 +                "Digest": "1183c62a5d31e202b5f5f528e9e7cdc36140aa3212c938e1d471c6b3b59f01bc", 
 +                "Signers":
 +                    "Repo Admin" 
 +                ] 
 +            } 
 +        ], 
 +        "Signers": [], 
 +        "AdministrativeKeys":
 +            { 
 +                "Name": "Root", 
 +                "Keys":
 +                    { 
 +                        "ID": "26f00698f51be2824c6fe85a14722c279bbd487125fe8fa18c0fc8f76dd6280d" 
 +                    } 
 +                ] 
 +            }, 
 +            { 
 +                "Name": "Repository", 
 +                "Keys":
 +                    { 
 +                        "ID": "7b13d02d74264624fb201e7ae13ae694286b9f761aa86adddefd0408c7234a58" 
 +                    } 
 +                ] 
 +            } 
 +        ] 
 +    } 
 +]
 </code> </code>
  
-====Tests====+<WRAP center round important 60%> 
 +**Important** : Notez que les clefs utilisées sont différentes.  
 +</WRAP>
  
-===Du client vers le serveur===+===Supprimer une Signature===
  
-Sur le client, utilisez la commande ping pour envoyer des paquets dans le tunnel :+Dernièrement il est possible de supprimer la signature d'une image avec la commande **docker trust revoke** :
  
 <code> <code>
-[root@centos6 ~]ping -c3 10.0.0.1 +root@debian9:~# docker trust revoke <votre_compte>/docker:alpine 
-PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. +Enter passphrase for repository key with ID 168c754:  
-64 bytes from 10.0.0.1icmp_seq=1 ttl=64 time=7.62 ms +Successfully deleted signature for <votre_compte>/docker:alpine 
-64 bytes from 10.0.0.1icmp_seq=2 ttl=64 time=1.35 ms +root@debian9:~# docker trust inspect <votre_compte>/docker:alpine 
-64 bytes from 10.0.0.1icmp_seq=3 ttl=64 time=0.000 ms +
- +    { 
---- 10.0.0.1 ping statistics --- +        "Name""<votre_compte>/docker:alpine", 
-3 packets transmitted3 received0% packet losstime 2047ms +        "SignedTags": [], 
-rtt min/avg/max/mdev = 0.000/2.994/7.629/3.323 ms+        "Signers": [], 
 +        "AdministrativeKeys":
 +            { 
 +                "Name": "Root", 
 +                "Keys":
 +                    { 
 +                        "ID": "d4074334a4ff5a9a43ebd1320ad77c2df88c990ec812f90eb045c603c01ab698" 
 +                    } 
 +                ] 
 +            }, 
 +            { 
 +                "Name": "Repository"
 +                "Keys":
 +                    { 
 +                        "ID": "168c754ea8f36ce7fbcbe2299b6d91fc0f4d594c9ed9b86916687b618d8438ac" 
 +                    } 
 +                ] 
 +            } 
 +        ] 
 +    } 
 +]
 </code> </code>
  
-===Du serveur vers le client=== 
  
-Sur le serveur, utilisez la commande ping pour envoyer des paquets dans le tunnel :+----- 
 +Copyright © 2025 Hugh NORRIS
  
-<code> 
-[root@centos7 ~]# ping -c5 10.0.0.2 
-PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. 
-64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=2.59 ms 
-64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=9.08 ms 
-64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=7.24 ms 
-64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=7.03 ms 
-64 bytes from 10.0.0.2: icmp_seq=5 ttl=64 time=4.08 ms 
- 
---- 10.0.0.2 ping statistics --- 
-5 packets transmitted, 5 received, 0% packet loss, time 4034ms 
-rtt min/avg/max/mdev = 2.597/6.008/9.084/2.340 ms 
-</code> 
- 
------ 
-Copyright © 2025 Hugh Norris. 
Menu