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:32] adminelearning:workbooks:debian:11:sec:l109 [2025/12/07 16:38] (Version actuelle) admin
Ligne 11: Ligne 11:
   * **LDF409 - Gestion de la Sécurité de Docker**   * **LDF409 - Gestion de la Sécurité de Docker**
     * Contenu du Module     * Contenu du Module
-    * Présentation de Docker +    * LAB #1 - Utilisation des Docker Secrets
-    * LAB #1 - Travailler avec Docker +
-      * 1.1 - Installer docker +
-      * 1.2 - Démarrer un Conteneur +
-      * 1.3 - Consulter la Liste des Conteneurs et Images +
-      * 1.4 - Rechercher une Image dans un Dépôt +
-      * 1.5 - Supprimer un Conteneur d'une Image +
-      * 1.6 - Créer une Image à partir d'un Conteneur Modifié +
-      * 1.7 - Supprimer une Image +
-      * 1.8 - Créer un Conteneur avec un Nom Spécifique +
-      * 1.9 - Exécuter une Commande dans un Conteneur +
-      * 1.10 - Injecter des Variables d'Environnement dans un Conteneur +
-      * 1.11 - Modifier le Nom d'Hôte d'un Conteneur +
-      * 1.12 - Mapper des Ports d'un Conteneur +
-      * 1.13 - Démarrer un Conteneur en mode Détaché +
-      * 1.14 - Accéder aux Services d'un Conteneur de l'Extérieur +
-      * 1.15 - Arrêter et Démarrer un Conteneur +
-      * 1.16 - Utiliser des Signaux avec un Conteneur +
-      * 1.17 - Forcer la Suppression d'un Conteneur en cours d'Exécution +
-      * 1.18 - Utilisation Simple d'un Volume +
-      * 1.19 - Télécharger une image sans créer un conteneur +
-      * 1.20 - S'attacher à un conteneur en cours d'exécution +
-      * 1.21 - Installer un logiciel dans le conteneur +
-      * 1.22 - Utilisation de la commande docker commit +
-      * 1.23 - Se connecter au serveur du conteneur de l'extérieur+
     * LAB #2 - Création d'un Utilisateur de Confiance pour Contrôler le Daemon Docker     * LAB #2 - Création d'un Utilisateur de Confiance pour Contrôler le Daemon Docker
     * LAB #3 - Le Script docker-bench-security.sh     * LAB #3 - Le Script docker-bench-security.sh
     * LAB #4 - Sécurisation de la Configuration de l'Hôte Docker     * LAB #4 - Sécurisation de la Configuration de l'Hôte Docker
-      * 4.1 - [WARN] 1.2.1 - Ensure a separate partition for containers has been created 
-      * 4.2 - [WARN] 1.2.3 - Ensure auditing is configured for the Docker daemon 
     * LAB #5 - Sécurisation de la Configuration du daemon Docker     * LAB #5 - Sécurisation de la Configuration du daemon Docker
-      * 5.1 - [WARN] 2.1 - Ensure network traffic is restricted between containers on the default bridge +      * 5.1 - Le Fichier /etc/docker/daemon.json
-      * 5.2 - [WARN] 2.8 - Enable user namespace support +
-      * 5.3 - [WARN] 2.11 - Ensure that authorization for Docker client commands is enabled +
-      * 5.4 - [WARN] 2.12 - Ensure centralized and remote logging is configured +
-      * 5.5 - [WARN] 2.14 - Ensure Userland Proxy is Disabled +
-      * 5.6 - [WARN] 2.17 - Ensure containers are restricted from acquiring new privileges +
-      * 5.7 - Le Fichier /etc/docker/daemon.json+
     * LAB #6 - Sécurisation des Images et les Fichiers de Construction     * LAB #6 - Sécurisation des Images et les Fichiers de Construction
-      * 6.1 - [WARN] 4.1 - Ensure a user for the container has been created 
-      * 6.2 - [WARN] 4.5 - Ensure Content trust for Docker is Enabled 
-      * 6.3 - [WARN] 4.6 - Ensure that HEALTHCHECK instructions have been added to container images 
     * LAB #7 - Sécurisation du Container Runtime     * LAB #7 - Sécurisation du Container Runtime
-      * 7.1 - [WARN] 5.1 - Ensure AppArmor Profile is Enabled 
-      * 7.2 - [WARN] 5.2 - Ensure SELinux security options are set, if applicable 
-      * 7.3 - [WARN] 5.10 - Ensure memory usage for container is limited 
-      * 7.4 - [WARN] 5.11 - Ensure CPU priority is set appropriately on the container 
-      * 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 #8 - Sécurisation des Images avec Docker Content Trust     * LAB #8 - Sécurisation des Images avec Docker Content Trust
       * 8.1 - DOCKER_CONTENT_TRUST       * 8.1 - DOCKER_CONTENT_TRUST
Ligne 71: Ligne 27:
         * Créer un deuxième Repositry         * Créer un deuxième Repositry
         * Supprimer une Signature         * Supprimer une Signature
 +    * LAB #9 - Sécurisation du Socket du Daemon Docker
 +      * 9.1 - Création du Certificat de l'Autorité de Certification
 +      * 9.2 - Création du Certificat du Serveur Hôte du Daemon Docker
 +      * 9.3 - Création du Certificat du Client
 +      * 9.4 - Démarrage du Daemon Docker avec une Invocation Directe
 +      * 9.5 - Configuration du Client
  
-=====Présentation de Docker=====+=====LAB #1 - Utilisation des Docker Secrets=====
  
-Docker est une application de virtualisation légère qui utilise des **images** et des **conteneurs**.+Les secrets Docker sont une façon sécurisée de stocker des informations sensibles telles les noms d'utiisateurs, les mots de passe voire les fichiers. Ils ne sont compatibles qu'avec Docker en mode Swarm
  
-Une **image** est un paquet exécutable contenant tout ce qu'il est necessaire afin d'exécuter un logiciel donné, incluant :+Considérez l'exemple suivant d'un fichier Docker stack servant à créer un conteneur PostgreSQL :
  
-  * le code +<file> 
-  * un runtime +version: '3.1'
-  * des bibliothèques, +
-  * des variables d'environnement +
-  * des fichiers de configuration+
  
-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.+services:
  
-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.+  db: 
 +    image: postgres 
 +    environment: 
 +      POSTGRES_USER: postgres 
 +      POSTGRES_PASSWORD: postgres 
 +      POSTGRES_DB: database
  
-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/]]**.+  adminer: 
 +    image: adminer 
 +    ports: 
 +     8080:8080 
 +</file>
  
-=====LAB #1 Travailler avec Docker=====+On peut constater dans ce fichier la présence des informations sensibles en non-sécurisées :
  
-====1.1 - Installer docker====+  * POSTGRES_USER 
 +  * POSTGRES_PASSWORD 
 +  * POSTGRES_DB
  
-Installer Docker-CE sur **votre** ordinateur : +Afin de sécuriser ces informationscommencez par créer le contexte **postgres** :
- +
-==Mac== +
- +
-  * 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@debian9:~# docker run hello-world +root@manager:~# mkdir postgres
-Unable to find image 'hello-world:latest' locally +
-latest: Pulling from library/hello-world +
-1b930d010525: Pull complete  +
-Digest: sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535 +
-Status: Downloaded newer image for hello-world:latest +
- +
-Hello from Docker! +
-This message shows that your installation appears to be working correctly. +
- +
-To generate this message, Docker took the following steps: +
- 1. The Docker client contacted the Docker daemon. +
- 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. +
-    (amd64) +
- 3. The Docker daemon created a new container from that image which runs the +
-    executable that produces the output you are currently reading. +
- 4. The 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 ideas, visit: +
- https://docs.docker.com/get-started/+
 </code> </code>
  
-<WRAP center round important> +Créez ensuite un Docker Secret appelé **pg_user** :
-**Important** - Notez que si l'image servant à générer le conteneur n'est pas présente sur le système hôte, celle-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 +root@manager:~# cd postgres 
-Unable to find image 'ubuntu:latest' locally +root@manager:~/postgresecho "postgres" | docker secret create pg_user 
-latest: Pulling from library/ubuntu +lpk8eq80qvfiqw7z1686fmj5t
-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 50%
-**Important** Notez que dans ce cas le conteneur est lancé avec comme argument **bash** qui lancera /bin/bash dans le conteneur.+**Important** Notez l'utilisation du caractère **-** à la fin de la ligne. Celui-ci indique à la commande **docker secret** de lire le contenu du secret pg_user à partir de l'entrée standard.
 </WRAP> </WRAP>
  
-Consulter la liste des paquets installés dans le conteneur ubuntu :+Pour visualiser la liste des secrets, utilisez la commande docker secrets **ls** :
  
 <code> <code>
-root@835001339e79:/# dpkg -l +root@manager:~/postgres# docker secret ls 
-Desired=Unknown/Install/Remove/Purge/Hold +ID                          NAME                DRIVER              CREATED              UPDATED 
-| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend +lpk8eq80qvfiqw7z1686fmj5t   pg_user                                 About minute ago   About a minute ago
-|/ 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                   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> </code>
  
-Les options de la commande docker run peuvent être visualisées avec la commande : +<WRAP center round important 50%
- +**Important** Notez que la colonne **DRIVER** est vide. Ceci indique que le gestion des secrets est accomplie par Docker lui-même au lieu d'être déléguée à un plugin tiers.
-<code> +
-root@debian9:~# docker run --help +
- +
-Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] +
- +
-Run a command in a new container +
- +
-Options: +
-      --add-host list                  Add a custom host-to-IP mapping (host:ip) +
-  -a, --attach list                    Attach to STDIN, STDOUT or STDERR +
-      --blkio-weight uint16            Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0) +
-      --blkio-weight-device list       Block IO weight (relative device weight) (default []) +
-      --cap-add list                   Add Linux capabilities +
-      --cap-drop list                  Drop Linux capabilities +
-      --cgroup-parent string           Optional parent cgroup for the container +
-      --cidfile string                 Write the container ID to the file +
-      --cpu-period int                 Limit CPU CFS (Completely Fair Scheduler) period +
-      --cpu-quota int                  Limit CPU CFS (Completely Fair Scheduler) quota +
-      --cpu-rt-period int              Limit CPU real-time period in microseconds +
-      --cpu-rt-runtime int             Limit CPU real-time runtime in microseconds +
-  -c, --cpu-shares int                 CPU shares (relative weight) +
-      --cpus decimal                   Number of CPUs +
-      --cpuset-cpus string             CPUs in which to allow execution (0-3, 0,1) +
-      --cpuset-mems string             MEMs in which to allow execution (0-3, 0,1) +
-  -d, --detach                         Run container in background and print container ID +
-      --detach-keys string             Override the key sequence for detaching a container +
-      --device list                    Add a host device to the container +
-      --device-cgroup-rule list        Add a rule to the cgroup allowed devices list +
-      --device-read-bps list           Limit read rate (bytes per second) from a device (default []) +
-      --device-read-iops list          Limit read rate (IO per second) from a device (default []) +
-      --device-write-bps list          Limit write rate (bytes per second) to a device (default []) +
-      --device-write-iops list         Limit write rate (IO per second) to a device (default []) +
-      --disable-content-trust          Skip image verification (default true) +
-      --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 (0 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> +
- +
-====1.3 - Consulter la Liste des Conteneurs et Images==== +
- +
-Pour consulter tous les conteneurs, utilisez la commande **docker ps** avec l'option **-a** : +
- +
-<code> +
-root@debian9:~# docker ps -a +
-CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                       PORTS               NAMES +
-3a3f9bda6cbd        ubuntu              "bash"              About a minute ago   Exited (127) 3 seconds ago                       wizardly_buck +
-26ef17bd115d        hello-world         "/hello"            8 minutes ago        Exited (0) 8 minutes ago                         angry_chaplygin +
-</code> +
- +
-<WRAP center round important> +
-**Important** Notez que chaque conteneur peut être référencé par son **CONTAINER ID** ou par son **NAME**.+
 </WRAP> </WRAP>
  
-Pour consulter la liste des images, utilisez la commande **docker images** :+Créez maintenant les secrets **pg_password** et **pg_database** :
  
 <code> <code>
-root@debian9:~# docker images +root@manager:~/postgresecho "postgres"docker secret create pg_password - 
-REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE +h9tsfbfwz6o0sd35roklwpopi 
-ubuntu              latest              94e814e2efa8        4 weeks ago         88.9MB +root@manager:~/postgres# echo "database" | docker secret create pg_database - 
-hello-world         latest              fce289e99eb9        3 months ago        4.84kB+5lx4zydpfocwgpdto0yy1jod9
 </code> </code>
  
-<WRAP center round important> +<WRAP center round important 50%
-**Important** Notez que chaque image est référencée par son IMAGE ID.+**Important** Notez qu'un secret Docker est immuable.
 </WRAP> </WRAP>
  
-====1.4 - Rechercher une Image dans un Dépôt==== +Vérifiez la prise en compte de vos commandes :
- +
-Pour rechercher une image docker dans le dépôt par défaut, utilisez la commande **docker search** : +
- +
-<code> +
-root@debian9:~# docker search --filter=stars=5 centos +
-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> +
- +
-<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> +
- +
-====1.5 - Supprimer un Conteneur d'une Image==== +
- +
-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 : +
- +
-<code> +
-root@debian9:~# docker ps -a +
-CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES +
-3a3f9bda6cbd        ubuntu              "bash"              7 minutes ago       Exited (127) 5 minutes ago                       wizardly_buck +
-26ef17bd115d        hello-world         "/hello"            13 minutes ago      Exited (0) 13 minutes ago                        angry_chaplygin +
-root@debian9:~# docker rm wizardly_buck +
-wizardly_buck +
-root@debian9:~# docker ps -a +
-CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES +
-26ef17bd115d        hello-world         "/hello"            14 minutes ago      Exited (0) 14 minutes ago                       angry_chaplygin +
-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        4.84kB +
-</code> +
- +
-<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> +
- +
-====1.6 -Créer une Image à partir d'un Conteneur Modifié=== +
- +
-Modifier un conteneur d'une image : +
- +
-<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> +
- +
-<WRAP center round important> +
-**Important** - Notez ici la suppression du répertoire **home** dans le conteneur **54b0dae2f3a9**. +
-</WRAP> +
- +
-Consultez la différence entre le conteneur et l'image de base : +
- +
-<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> +
- +
-<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> +
- +
-Créez un autre conteneur à partir de l'image de base : +
- +
-<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> +
- +
-<WRAP center round important> +
-**Important** - Dans ce nouveau conteneur, le 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> +
- +
-Créez maintenant l'image **ubuntu_1** à partir du conteneur **competent_pasteur** en utilisant la commande **docker commit** : +
- +
-<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> +
- +
-====1.7 - Supprimer une Image==== +
- +
-Créez maintenant un conteneur à partir de la nouvelle image **ubuntu_1** : +
- +
-<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> +
- +
-<WRAP center round important> +
-**Important** - Notez l'absence du répertoire **home** dans le conteneur **904215fb79b4**. +
-</WRAP> +
- +
-Essayez de supprimer l'image **ubuntu_1** : +
- +
-<code> +
-root@debian9:~# docker rmi ubuntu_1 +
-Error response from daemon: conflict: unable to remove repository reference "ubuntu_1" (must force) - container 904215fb79b4 is using its referenced image 2ba8e0ec5e38 +
-root@debian9:~# docker ps -a +
-CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                      PORTS               NAMES +
-904215fb79b4        ubuntu_1            "/bin/bash"         About a minute ago   Exited (0) 49 seconds ago                       priceless_swirles +
-92f0d4bb7967        ubuntu              "/bin/bash"         2 minutes ago        Exited (0) 2 minutes ago                        musing_benz +
-54b0dae2f3a9        ubuntu              "/bin/bash"         6 minutes ago        Exited (0) 5 minutes ago                        tender_mendeleev +
-26ef17bd115d        hello-world         "/hello"            22 minutes ago       Exited (0) 22 minutes ago                       angry_chaplygin +
-</code> +
- +
-<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> +
- +
-Supprimez donc le conteneur **priceless_swirles** ainsi que l'image **ubuntu_1** : +
- +
-<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> +
- +
-Pour pouvoir supprimer tous les conteneurs, listez-les par leur **Container ID** : +
- +
-<code> +
-root@debian9:~# docker ps -aq +
-92f0d4bb7967 +
-54b0dae2f3a9 +
-26ef17bd115d +
-</code> +
- +
-Supprimer toutes les conteneurs : +
- +
-<code> +
-root@debian9:~# docker rm `docker ps -aq` +
-92f0d4bb7967 +
-54b0dae2f3a9 +
-26ef17bd115d +
-root@debian9:~# docker ps -aq +
-root@debian9:~#  +
-</code> +
- +
-Pour supprimer un conteneur dès la fin de son exécution, utilisez l'option **--rm** : +
- +
-<code> +
-root@debian9:~# docker run -it --rm ubuntu +
-root@d123b0112fc2:/# ls +
-bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var +
-root@d123b0112fc2:/# exit +
-exit +
-root@debian9:~# docker ps -aq +
-root@debian9:~#  +
-</code> +
- +
-====1.8 - Créer un Conteneur avec un Nom Spécifique==== +
- +
-Créez maintenant un conteneur avec un nom spécifique :+
  
 <code> <code>
-root@debian9:~# docker run -it --name=i2tch ubuntu +root@manager:~/postgres# docker secret ls 
-root@04b5ab87539a:/# ls +ID                          NAME                DRIVER              CREATED             UPDATED 
-bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var +5lx4zydpfocwgpdto0yy1jod9   pg_database                             2 minutes ago       2 minutes ago 
-root@04b5ab87539a:/# exit +h9tsfbfwz6o0sd35roklwpopi   pg_password                             3 minutes ago       3 minutes ago 
-exit +lpk8eq80qvfiqw7z1686fmj5t   pg_user                                 5 minutes ago       5 minutes ago
-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> </code>
  
-Pour obtenir de l'information concernant un conteneurutilisez la commande **docker inspect** :+Pour obtenir de l'information concernant un secretil convient d'utiliser la commande docker secret **inspect** :
  
 <code> <code>
-root@debian9:~# docker inspect i2tch+root@manager:~/postgres# docker secret inspect pg_database
 [ [
     {     {
-        "Id": "04b5ab87539aed114cbfc3ba15d10be61cd88b9cffc88c6de9bd26e203b363b5", +        "ID": "5lx4zydpfocwgpdto0yy1jod9", 
-        "Created": "2019-04-09T14:22:45.623162229Z", +        "Version": { 
-        "Path": "/bin/bash", +            "Index": 23
-        "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", +        "CreatedAt": "2021-04-15T03:49:36.344367554Z", 
-        "ResolvConfPath""/var/lib/docker/containers/04b5ab87539aed114cbfc3ba15d10be61cd88b9cffc88c6de9bd26e203b363b5/resolv.conf", +        "UpdatedAt": "2021-04-15T03:49:36.344367554Z", 
-        "HostnamePath": "/var/lib/docker/containers/04b5ab87539aed114cbfc3ba15d10be61cd88b9cffc88c6de9bd26e203b363b5/hostname", +        "Spec": { 
-        "HostsPath": "/var/lib/docker/containers/04b5ab87539aed114cbfc3ba15d10be61cd88b9cffc88c6de9bd26e203b363b5/hosts", +            "Name": "pg_database",
-        "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": {}             "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 
-                } 
-            } 
         }         }
     }     }
Ligne 843: Ligne 137:
 </code> </code>
  
-====1.9 - Exécuter une Commande dans un Conteneur====+<WRAP center round important 50%> 
 +**Important** : On peut constater dans la sortie de cette commande la valeur **CreatedAt** qui correspond à la date de création du secret ainsi que **UpdatedAt** qui correspond à la date de modification du secret. 
 +</WRAP>
  
-Pour exécuter une commande spécifique dans un conteneur, passez la commande en argument :+L'option **--pretty** de la commande fait apparaître ces informations plus clairement :
  
 <code> <code>
-root@debian9:~# docker run --rm ubuntu env +root@manager:~/postgres# docker secret inspect --pretty pg_database 
-PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +ID             5lx4zydpfocwgpdto0yy1jod9 
-HOSTNAME=77bb110031aa +Name             pg_database 
-HOME=/root +Driver            
-root@debian9:~# +Created at       2021-04-15 03:49:36.344367554 +0000 utc 
 +Updated at       2021-04-15 03:49:36.344367554 +0000 utc
 </code> </code>
  
-====1.10 - Injecter des Variables d'Environnement dans un Conteneur==== +Créez maintenant le fichier compose **postgres-secrets.yaml** :
- +
-Pour injecter une ou des variables d'environnement dans un conteneur, utilisez un fichier pré-établi :+
  
 <code> <code>
-root@debian9:~# vi env.list +root@manager:~/postgres# vi postgres-secrets.yaml 
-root@debian9:~# cat env.list +root@manager:~/postgres# cat postgres-secrets.yaml 
-EDITOR=vim +version: '3.1'
-HOSTNAME=ubuntudocker +
-</code>+
  
-<code> +services:
-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>+
  
-====1.11 Modifier le Nom d'Hôte d'un Conteneur====+    db: 
 +        image: postgres 
 +        restart: always 
 +        environment: 
 +            POSTGRES_USER_FILE: /run/secrets/pg_user 
 +            POSTGRES_PASSWORD_FILE: /run/secrets/pg_password 
 +            POSTGRES_DB_FILE: /run/secrets/pg_database 
 +        secrets: 
 +           pg_password 
 +           - pg_user 
 +           - pg_database
  
-Pour modifier le nom d'hôte d'un conteneur, utilisez l'option **-h** :+    adminer:  
 +        image: adminer  
 +        ports:  
 +         8080:8080
  
-<code> +secrets: 
-root@debian9:~# docker run -it --rm -h ubuntudocker ubuntu +  pg_user
-root@ubuntudocker:/# hostname +    externaltrue 
-ubuntudocker +  pg_password: 
-root@ubuntudocker:/# exit +    externaltrue 
-exit +  pg_database: 
-root@debian9:~# +    externaltrue
 </code> </code>
  
-====1.12 - Mapper des Ports d'un Conteneur=====+Notez que dans ce fichier les trois variables **POSTGRES_USER**, **POSTGRES_PASSWORD** et **POSTGRES_DB** ont un suffixe **_FILE** car elles référencent des **fichiers** contenant des informations plutôt que des informations elles-mêmes. Ces fichiers se trouvent dans le répertoire **/run/secrets** du **conteneur**.
  
-Démarrer un conteneur de nginx sur le port localhost 81 :+Deuxièmement la section suivantes spécifie les noms des secrets à utiliser avec le service :
  
-<code+<file
-root@debian9:~# docker run -it -p 81:80 nginx +        secrets: 
-Unable to find image 'nginx:latest' locally +           pg_password 
-latest: Pulling from library/nginx +           pg_user 
-27833a3ba0a5: Pull complete  +           - pg_database 
-e83729dd399a: Pull complete  +</file>
-ebc6a67df66d: Pull complete  +
-Digest: sha256:c8a861b8a1eeef6d48955a6c6d5dff8e2580f13ff4d0f549e082e7c82a8617a2 +
-Status: Downloaded newer image for nginx:latest +
-^Croot@debian9:~#  +
-</code>+
  
-Notez que c'est bloquant. Le fait d'avoir utiliser ^C a interrompu le processus du conteneur :+La dernière section spécifie que les secrets sont **externes** :
  
-<code+<file
-^Croot@debian9:~# docker ps -a +secrets
-CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES +  pg_user: 
-4f157e179134        nginx               "nginx -g 'daemon of…"   32 seconds ago      Exited (0) 21 seconds ago                       stoic_roentgen +    external: true 
-04b5ab87539a        ubuntu              "/bin/bash"              5 minutes ago       Exited (0) 5 minutes ago                        i2tch +  pg_password: 
-</code>+    external: true 
 +  pg_database: 
 +    external: true 
 +</file>
  
-====1.13 - Démarrer un Conteneur en mode Détaché====+<WRAP center round important 50%> 
 +**Important** : Le terme **externe** indique que les secrets ne seront pas stockés dans l'image construite mais **uniquement** dans le conteneur créé. 
 +</WRAP>
  
-Démarrez maintenant le conteneur de nginx en mode détaché grâce à l'utilisation de l'option **-d** :+Déployez maintenant le service en utilisant la commande **docker stack** :
  
 <code> <code>
-root@debian9:~# docker run -d -p 81:80 nginx +root@manager:~/postgres# docker stack deploy -c postgres-secrets.yaml postgres 
-aabb064d4b0ade1f19216b6174631fa32a2053f6aa9d59bd724ea90ce534b004 +Ignoring unsupported options: restart
-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> +
- +
-====1.14 - Accèder aux Services d'un Conteneur de l'Extérieur==== +
- +
-Installez le navigateur texte **lynx** :  +
- +
-<code> +
-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 à jour, 2 nouvellement installés, 0 à 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] o +
-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> +
- +
-Vérifiez que nginx répond aux requetes : +
- +
-<code> +
-root@debian9:~# lynx --dump http://localhost:81 +
-                               Welcome to nginx! +
- +
-   If you see this page, the nginx web server is successfully installed +
-   and working. Further configuration is required. +
- +
-   For online documentation and support please refer to [1]nginx.org. +
-   Commercial support is available at [2]nginx.com. +
- +
-   Thank you for using nginx. +
- +
-Références +
- +
-   1. http://nginx.org/ +
-   2. http://nginx.com/ +
-</code> +
- +
-====1.15 - Arrêter et Démarrer un Conteneur==== +
- +
-Arrêtez le conteneur nginx : +
- +
-<code> +
-root@debian9:~# docker ps -+
-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 (0) 3 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 -a +
-CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES +
-aabb064d4b0a        nginx               "nginx -g 'daemon of…"   2 minutes ago       Exited (0) 2 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> +
- +
-Démarrez de nouveau le conteneur de nginx : +
- +
-<code> +
-root@debian9:~# docker start aabb +
-aabb +
-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> +
- +
-====1.16 - Utiliser des Signaux avec un Conteneur==== +
- +
-Utilisez un signal pour tuer le processus du conteneur de nginx : +
- +
-<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> +
- +
-Redémarrez un conteneur en cours : +
- +
-<code> +
-root@debian9:~# docker start 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 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> +
- +
-====1.17 - Forcer la Suppression d'un Conteneur en cours d'Exécution==== +
- +
-Supprimez un conteneur en cours d'exécution : +
- +
-<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 (0) 2 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 (0) 2 hours ago                       stoic_roentgen +
-04b5ab87539a        ubuntu              "/bin/bash"              2 hours ago         Exited (0) 2 hours ago                       i2tch +
-</code> +
- +
-===1.18 - Utilisation Simple d'un Volume=== +
- +
-Créez le fichier index.html et placez-le dans le répertoire /root/www : +
- +
-<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> +
- +
-Indiquez au conteneur que son répertoire **/usr/share/nginx/html/** est remplacé par le répertoire **/root/www/** de la machine hôte : +
- +
-<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 +
  
-root@debian9:~# +Creating network postgres_default 
 +Creating service postgres_db 
 +Creating service postgres_adminer
 </code> </code>
  
-<WRAP center round important> +<WRAP center round important 50%
-**Important** Notez ici l'utilisation de **ro** - lecture seule.+**Important** Notez a présence de l'erreur **Ignoring unsupported options: restart**. Celle-ci est due au fait que la directive **restart** est compatible avec la commande **docker-compose** mais pas avec la commande **docker stack**. La directive qui aurait du être utilisée dans le fichier est **restart_policy:**.
 </WRAP> </WRAP>
  
-====1.19 Télécharger une image sans créer un conteneur====+Connectez-vous maintenant à Apache Guacamole et ouvrez un navigateur web dans la machine virtuelle. Naviguez ensuite à l'adresse du Manager sur le port **8080** et renseignez les valeurs des secrets :
  
-Téléchargez l'image de centos sans créer un conteneur :+{{ :elearning:workbooks:docker2:2021-04-15.png?direct&600 |}}
  
-<code> +Validez le formulaire et vérifiez que les secrets ont été pris en compte :
-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>+
  
-Vérifiez le contenu de l'image en créant un conteneur : +{{ :elearning:workbooks:docker2:2021-04-15_1_.png?direct&600 |}}
- +
-<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> +
- +
-====1.20 - S'attacher à un conteneur en cours d'exécution==== +
- +
-Arretez le conteneur. Démarrez le conteneur puis rattachez-vous au conteneur : +
- +
-<code> +
-[root@86252a3f00f4 /]# exit +
-exit +
-root@debian9:~# docker ps -+
-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> +
- +
-====1.21 - Installer un logiciel dans le conteneur=== +
- +
-Créez le fichier **/etc/yum.repos.d/mongodb-org-4.2.repo** : +
- +
-<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> +
- +
-Installez mongo : +
- +
-<code> +
-[root@86252a3f00f4 /]# yum install -y mongodb-org +
-</code> +
- +
-Démarrez mongod : +
- +
-<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 +
- +
-[1]+  Done                    mongod --config /etc/mongod.conf +
-[root@86252a3f00f4 /]#   +
-</code> +
- +
-Vérifiez que mongod est démarré : +
- +
-<code> +
-[root@86252a3f00f4 /]# ps aux +
-USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND +
-root          0.0  0.1  11828  2996 pts/0    Ss   16:57   0:00 bash +
-root        84  1.2  2.2 294692 46716        Sl   17:16   0:00 mongod --config /etc/mongod.conf +
-root       103  0.0  0.1  51748  3444 pts/0    R+   17:17   0:00 ps aux +
-</code> +
- +
-Utilisez le client mongo pour se connecter au serveur : +
- +
-<code> +
-[root@86252a3f00f4 /]# mongo +
-MongoDB shell version: 4.2.2 +
-connecting to: test +
-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: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> +
- +
-Sortez de mongo et du conteneur : +
- +
-<code> +
-> exit +
-bye +
-[root@86252a3f00f4 /]# exit +
-exit +
-root@debian9:~#  +
-</code> +
- +
-====1.22 - Utilisation de la commande docker commit==== +
- +
-Créez maintenant une nouvelle image à partir de votre conteneur : +
- +
-<code> +
-root@debian9:~# docker ps -a +
-CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                NAMES +
-86252a3f00f4        centos              "bash"                   23 minutes ago      Exited (0) 56 seconds ago                        vibrant_mccarthy +
-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> +
- +
-Supprimez le conteneur utilisé pour créer l'image : +
- +
-<code> +
-root@debian9:~# docker rm 8625 +
-8625 +
-root@debian9:~# docker ps -a +
-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> +
- +
-Utilisez la nouvelle image pour lancer un conteneur nommé **mongo** : +
- +
-<code> +
-root@debian9:~# docker run -it --name mongo i2tch/mongodb +
-[root@d20fb56a38b0 /]# ls /usr/bin/mongo* +
-/usr/bin/mongo   /usr/bin/mongodump    /usr/bin/mongofiles   /usr/bin/mongooplog  /usr/bin/mongorestore  /usr/bin/mongostat +
-/usr/bin/mongod  /usr/bin/mongoexport  /usr/bin/mongoimport  /usr/bin/mongoperf   /usr/bin/mongos        /usr/bin/mongotop +
-[root@d20fb56a38b0 /]# ps aux +
-USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND +
-root          0.1  0.1  11828  2972 pts/0    Ss   17:22   0:00 bash +
-root        15  0.0  0.1  51748  3468 pts/0    R+   17:23   0:00 ps aux +
-</code> +
- +
-Editez le fichier /etc/bashrc : +
- +
-<code> +
-[root@d20fb56a38b0 /]# echo "/usr/bin/mongod --config /etc/mongod.conf &" >> /etc/bashrc +
-[root@d20fb56a38b0 /]# tail /etc/bashrc +
-                . "$i" >/dev/null +
-            fi +
-        fi +
-    done +
- +
-    unset i +
-    unset -f pathmunge +
-fi +
-# vim:ts=4:sw=4 +
-/usr/bin/mongod --config /etc/mongod.conf & +
-</code> +
- +
-Consultez la liste des conteneurs et relevez le CONTAINER ID du conteneur **mongo** : +
- +
-<code> +
-[root@d20fb56a38b0 /]# exit +
-exit +
-root@debian9:~# docker ps -a +
-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> +
- +
-Utilisez la commande commit pour "sauvegarder" la modification dans l'image : +
- +
-<code> +
-root@debian9:~# docker commit d20f i2tch/mongodb +
-sha256:620057baa411b78a0030e192fdfbde0bb0c5ceae7bdeb115892d9946e542ee07 +
-</code> +
- +
-Démarrez de nouveau le conteneur pour vérifier que mongod fonctionne : +
- +
-<code> +
-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 +
- +
-[1]+  Done                    /usr/bin/mongod --config /etc/mongod.conf +
-[root@bcec3f27ed58 /]# ps aux +
-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> +
- +
-====1.23 - Se connecter au serveur du conteneur de l'extérieur==== +
- +
-Pour pouvoir se connecter à mongodb depuis la machine hôte, il convient d'éditer le fichier /etc/mongod.conf : +
- +
-<code> +
-[root@bcec3f27ed58 /]# vi /etc/mongod.conf +
-[root@bcec3f27ed58 /]# cat /etc/mongod.conf grep bindIp +
-   bindIp: 0.0.0.0 +
-</code> +
- +
-Sortez du conteneur, re-créez une image, supprimez le conteneur utilisé et relancez de nouveau le conteneur : +
- +
-<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 +
- +
-[1]+  Done                    /usr/bin/mongod --config /etc/mongod.conf +
-[root@d2ddb4f8ca8a /]#  +
-</code> +
- +
-Dans votre machine hôte, configurez le dépôt de mongodb : +
- +
-<code> +
-[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> +
- +
-Cette fois, installez uniquement le client de mongodb : +
- +
-<code> +
-root@debian9:~# apt-get install mongodb-org-shell +
-Lecture des listes de paquets... Fait +
-Construction de l'arbre des dépendances        +
-Lecture des informations d'état... Fait +
-Les NOUVEAUX paquets suivants seront installés : +
-  mongodb-org-shell +
-0 mis à jour, 1 nouvellement installés, 0 à enlever et 95 non mis à jour. +
-Il est nécessaire de prendre 9 809 ko dans les archives. +
-Après cette opération, 39,8 Mo d'espace disque supplémentaires seront utilisés. +
-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] +
-9 809 ko réceptionnés en 7s (1 245 ko/s)                                                                                                                                 +
-Sélection du paquet mongodb-org-shell précédemment désélectionné. +
-(Lecture de la base de données... 91513 fichiers et répertoires déjà installés.) +
-Préparation du dépaquetage de .../mongodb-org-shell_4.0.8_amd64.deb ... +
-Dépaquetage de mongodb-org-shell (4.0.8) ... +
-Paramétrage de mongodb-org-shell (4.0.8) ... +
-Traitement des actions différées (« triggers ») pour man-db (2.7.6.1-2) ... +
-</code> +
- +
-Notez qu'à ce stade le conteneur ne possède pas d'adresse IP car il n'est pas démarré : +
- +
-<code> +
-root@debian9:~# docker inspect mongo | grep IP +
-            "LinkLocalIPv6Address": "", +
-            "LinkLocalIPv6PrefixLen": 0, +
-            "SecondaryIPAddresses": null, +
-            "SecondaryIPv6Addresses": null, +
-            "GlobalIPv6Address": "", +
-            "GlobalIPv6PrefixLen": 0, +
-            "IPAddress": "", +
-            "IPPrefixLen": 0, +
-            "IPv6Gateway": "", +
-                    "IPAMConfig": null, +
-                    "IPAddress": "", +
-                    "IPPrefixLen": 0, +
-                    "IPv6Gateway": "", +
-                    "GlobalIPv6Address": "", +
-                    "GlobalIPv6PrefixLen": 0, +
-</code> +
- +
-Démarrez donc le conteneur et cherchez l'adresse IP de celui-ci : +
- +
-<code> +
-root@debian9:~# docker start mongo +
-mongo +
-root@debian9:~# docker inspect mongo | grep IP +
-            "LinkLocalIPv6Address": "", +
-            "LinkLocalIPv6PrefixLen": 0, +
-            "SecondaryIPAddresses": null, +
-            "SecondaryIPv6Addresses": null, +
-            "GlobalIPv6Address": "", +
-            "GlobalIPv6PrefixLen": 0, +
-            "IPAddress": "172.17.0.3", +
-            "IPPrefixLen": 16, +
-            "IPv6Gateway": "", +
-                    "IPAMConfig": null, +
-                    "IPAddress": "172.17.0.3", +
-                    "IPPrefixLen": 16, +
-                    "IPv6Gateway": "", +
-                    "GlobalIPv6Address": "", +
-                    "GlobalIPv6PrefixLen": 0, +
-</code>+
  
-Connectez-vous maintenant à votre mongodb à partir de la machine hôte :+Dernièrement, supprimez le service :
  
 <code> <code>
-root@debian9:~# mongo --host 172.17.0.3 +root@manager:~/postgresdocker stack ls 
-MongoDB shell version v4.0.8 +NAME                SERVICES            ORCHESTRATOR 
-connecting to: mongodb://172.17.0.3:27017/?gssapiServiceName=mongodb +postgres                              Swarm 
-WARNING: No implicit session: Logical Sessions are only supported on server versions 3.6 and greater. +root@manager:~/postgres# docker stack rm postgres 
-Implicit session: dummy session +Removing service postgres_adminer 
-MongoDB server version: 4.2.+Removing service postgres_db 
-WARNING: shell and server versions do not match +Removing network postgres_default
-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>
  
Ligne 1494: Ligne 254:
  
 <code> <code>
-root@debian9:~# cat /etc/group | grep docker+root@manager:~# cat /etc/group | grep docker
 docker:x:999: docker:x:999:
-root@debian9:~# usermod -aG docker trainee +root@manager:~# usermod -aG docker trainee 
-root@debian9:~# exit+root@manager:~# exit
 déconnexion déconnexion
 trainee@manager:~$ docker ps trainee@manager:~$ docker ps
Ligne 1534: Ligne 294:
 <code> <code>
 trainee@manager:~$ su - trainee@manager:~$ su -
-Mot de passe : fenestros +Password: fenestros 
-root@debian9:~# git clone https://github.com/docker/docker-bench-security.git + 
-Clonage dans 'docker-bench-security'...+root@manager:~# git clone https://github.com/docker/docker-bench-security.git 
 +Cloning in 'docker-bench-security'...
 remote: Enumerating objects: 18, done. remote: Enumerating objects: 18, done.
 remote: Counting objects: 100% (18/18), done. remote: Counting objects: 100% (18/18), done.
 remote: Compressing objects: 100% (16/16), done. remote: Compressing objects: 100% (16/16), done.
 remote: Total 1921 (delta 5), reused 6 (delta 2), pack-reused 1903 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+Receiving objects: 100% (1921/1921), 2.90 MiB | 908.00 KiB/s, done
-Résolution des deltas: 100% (1339/1339), fait.+Delta resolution: 100% (1339/1339), done.
 </code> </code>
  
Ligne 1548: Ligne 309:
  
 <code> <code>
-root@debian9:~# cd docker-bench-security/ +root@manager:~# cd docker-bench-security/ 
-root@debian9:~/docker-bench-security# ./docker-bench-security.sh + 
-# ------------------------------------------------------------------------------ +root@manager:~/docker-bench-security# ./docker-bench-security.sh 
-# Docker Bench for Security v1.3.5+-------------------------------------------------------------------------------------------- 
 +# Docker Bench for Security v1.6.0
 # #
-# Docker, Inc. (c) 2015-+# Docker, Inc. (c) 2015-2023
 # #
 # Checks for dozens of common best-practices around deploying Docker containers in production. # Checks for dozens of common best-practices around deploying Docker containers in production.
-Inspired by the CIS Docker Benchmark v1.2.0. +Based on the CIS Docker Benchmark 1.6.0. 
-# ------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------
  
-Initializing vendredi 8 novembre 2019, 12:12:03 (UTC+0100)+Initializing 2023-12-17T14:22:08+01:00
  
 +
 +Section A - Check results
  
 [INFO] 1 - Host Configuration [INFO] 1 - Host Configuration
- +[INFO] 1.1 - Linux Hosts Specific Configuration 
-[INFO] 1.1 - General Configuration +[WARN] 1.1.1 - Ensure a separate partition for containers has been created (Automated) 
-[NOTE] 1.1.1  - Ensure the container host has been Hardened +[INFO] 1.1.2 - Ensure only trusted users are allowed to control Docker daemon (Automated) 
-[INFO] 1.1.2  - Ensure Docker is up to date+[INFO]       * Users: trainee 
 +[WARN] 1.1.3 - Ensure auditing is configured for the Docker daemon (Automated) 
 +[WARN] 1.1.4 - Ensure auditing is configured for Docker files and directories -/run/containerd (Automated) 
 +[WARN] 1.1.5 - Ensure auditing is configured for Docker files and directories - /var/lib/docker (Automated) 
 +[WARN] 1.1.6 - Ensure auditing is configured for Docker files and directories - /etc/docker (Automated) 
 +[WARN] 1.1.7 - Ensure auditing is configured for Docker files and directories - docker.service (Automated) 
 +[INFO] 1.1.8 - Ensure auditing is configured for Docker files and directories - containerd.sock (Automated) 
 +[INFO]        * File not found 
 +[WARN] 1.1.9 - Ensure auditing is configured for Docker files and directories - docker.socket (Automated) 
 +[WARN] 1.1.10 - Ensure auditing is configured for Docker files and directories - /etc/default/docker (Automated) 
 +[INFO] 1.1.11 - Ensure auditing is configured for Dockerfiles and directories - /etc/docker/daemon.json (Automated) 
 +[INFO]        * File not found 
 +[WARN] 1.1.12 - 1.1.12 Ensure auditing is configured for Dockerfiles and directories - /etc/containerd/config.toml (Automated) 
 +[INFO] 1.1.13 - Ensure auditing is configured for Docker files and directories - /etc/sysconfig/docker (Automated) 
 +[INFO]        * File not found 
 +[WARN] 1.1.14 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd (Automated) 
 +[WARN] 1.1.15 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd-shim (Automated) 
 +[INFO] 1.1.16 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd-shim-runc-v1 (Automated) 
 +[INFO]         * File not found 
 +[INFO] 1.1.17 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd-shim-runc-v2 (Automated) 
 +[INFO]         * File not found 
 +[WARN] 1.1.18 - Ensure auditing is configured for Docker files and directories - /usr/bin/runc (Automated) 
 +[INFO] 1.2 - General Configuration 
 +[NOTE] 1.2.1 - Ensure the container host has been Hardened (Manual) 
 +[PASS] 1.2.2 - Ensure that the version of Docker is up to date (Manual)
 [INFO]        * Using 19.03.4, verify is it up to date as deemed necessary [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 
  
-[INFO] 1.2 - Linux Hosts Specific Configuration +[INFO] 2 - Docker daemon configuration 
-[WARN] 1.2.1 - Ensure a separate partition for containers has been created +[NOTE] 2.- Run the Docker daemon as a non-root user, if possible (Manual) 
-...+[WARN] 2.2 - Ensure network traffic is restricted between containers on the default bridge (Scored) 
 +[PASS] 2.3 - Ensure the logging level is set to 'info' (Scored) 
 +[PASS] 2.4 - Ensure Docker is allowed to make changes to iptables (Scored) 
 +[PASS] 2.5 - Ensure insecure registries are not used (Scored) 
 +[PASS] 2.6 - Ensure aufs storage driver is not used (Scored) 
 +[INFO] 2.7 - Ensure TLS authentication for Docker daemon is configured (Scored) 
 +[INFO]      * Docker daemon not listening on TCP 
 +[INFO] 2.8 - Ensure the default ulimit is configured appropriately (Manual) 
 +[INFO]      * Default ulimit doesn't appear to be set 
 +[WARN] 2.9 - Enable user namespace support (Scored) 
 +[PASS] 2.10 - Ensure the default cgroup usage has been confirmed (Scored) 
 +[PASS] 2.11 - Ensure base device size is not changed until needed (Scored) 
 +[WARN] 2.12 - Ensure that authorization for Docker client commands is enabled (Scored) 
 +[WARN] 2.13 - Ensure centralized and remote logging is configured (Scored) 
 +[WARN] 2.14 - Ensure containers are restricted from acquiring new privileges (Scored) 
 +[WARN] 2.15 - Ensure live restore is enabled (Scored) 
 +[WARN] 2.16 - Ensure Userland Proxy is Disabled (Scored) 
 +[PASS] 2.17 - Ensure that a daemon-wide custom seccomp profile is applied if appropriate (Manual) 
 +[PASS] 2.18 - Ensure that experimental features are not implemented in production (Scored) 
 + 
 +[INFO] 3 - Docker daemon configuration files 
 +[PASS] 3.- Ensure that the docker.service file ownership is set to root:root (Automated) 
 +[PASS] 3.2 - Ensure that docker.service file permissions are appropriately set (Automated) 
 +[PASS] 3.3 - Ensure that docker.socket file ownership is set to root:root (Automated) 
 +[PASS] 3.4 - Ensure that docker.socket file permissions are set to 644 or more restrictive (Automated) 
 +[PASS] 3.5 - Ensure that the /etc/docker directory ownership is set to root:root (Automated) 
 +[PASS] 3.6 - Ensure that /etc/docker directory permissions are set to 755 or more restrictively (Automated) 
 +[INFO] 3.7 - Ensure that registry certificate file ownership is set to root:root (Automated) 
 +[INFO]      * Directory not found 
 +[INFO] 3.8 - Ensure that registry certificate file permissions are set to 444 or more restrictively (Automated) 
 +[INFO]      * Directory not found 
 +[INFO] 3.9 - Ensure that TLS CA certificate file ownership is set to root:root (Automated) 
 +[INFO]      * No TLS CA certificate found 
 +[INFO] 3.10 - Ensure that TLS CA certificate file permissions are set to 444 or more restrictively (Automated) 
 +[INFO]       * No TLS CA certificate found 
 +[INFO] 3.11 - Ensure that Docker server certificate file ownership is set to root:root (Automated) 
 +[INFO]       * No TLS Server certificate found 
 +[INFO] 3.12 - Ensure that the Docker server certificate file permissions are set to 444 or more restrictively (Automated) 
 +[INFO]       * No TLS Server certificate found 
 +[INFO] 3.13 - Ensure that the Docker server certificate key file ownership is set to root:root (Automated) 
 +[INFO]       * No TLS Key found 
 +[INFO] 3.14 - Ensure that the Docker server certificate key file permissions are set to 400 (Automated) 
 +[INFO]       * No TLS Key found 
 +[PASS] 3.15 - Ensure that the Docker socket file ownership is set to root:docker (Automated) 
 +[PASS] 3.16 - Ensure that the Docker socket file permissions are set to 660 or more restrictively (Automated) 
 +[INFO] 3.17 - Ensure that the daemon.json file ownership is set to root:root (Automated) 
 +[INFO]       * File not found 
 +[INFO] 3.18 - Ensure that daemon.json file permissions are set to 644 or more restrictive (Automated) 
 +[INFO]       * File not found 
 +[PASS] 3.19 - Ensure that the /etc/default/docker file ownership is set to root:root (Automated) 
 +[PASS] 3.20 - Ensure that the /etc/default/docker file permissions are set to 644 or more restrictively (Automated) 
 +[INFO] 3.21 - Ensure that the /etc/sysconfig/docker file permissions are set to 644 or more restrictively (Automated) 
 +[INFO]       * File not found 
 +[INFO] 3.22 - Ensure that the /etc/sysconfig/docker file ownership is set to root:root (Automated) 
 +[INFO]       * File not found 
 +[PASS] 3.23 - Ensure that the Containerd socket file ownership is set to root:root (Automated) 
 +[PASS] 3.24 - Ensure that the Containerd socket file permissions are set to 660 or more restrictively (Automated) 
 + 
 +[INFO] 4 - Container Images and Build File 
 +[INFO] 4.1 - Ensure that user for the container has been created (Automated) 
 +[INFO]      * No containers running 
 +[NOTE] 4.2 - Ensure that containers use only trusted base images (Manual) 
 +[NOTE] 4.3 - Ensure that unnecessary packages are not installed in the container (Manual) 
 +[NOTE] 4.4 - Ensure images are scanned and rebuilt to include security patches (Manual) 
 +[WARN] 4.5 - Ensure Content trust for Docker is Enabled (Automated) 
 +[WARN] 4.6 - Ensure that HEALTHCHECK instructions have been added to container images (Automated) 
 +[WARN]      * No Healthcheck found: [nginx:latest] 
 +[WARN]      * No Healthcheck found: [alpine:latest] 
 +[WARN]      * No Healthcheck found: [ubuntu:latest] 
 +[WARN]      * No Healthcheck found: [centos:latest] 
 +[PASS] 4.7 - Ensure update instructions are not used alone in the Dockerfile (Manual) 
 +[NOTE] 4.8 - Ensure setuid and setgid permissions are removed (Manual) 
 +[PASS] 4.9 - Ensure that COPY is used instead of ADD in Dockerfiles (Manual) 
 +[NOTE] 4.10 - Ensure secrets are not stored in Dockerfiles (Manual) 
 +[NOTE] 4.11 - Ensure only verified packages are installed (Manual) 
 +[NOTE] 4.12 - Ensure all signed artifacts are validated (Manual) 
 + 
 +[INFO] 5 - Container Runtime 
 +[INFO]   * No containers running, skipping Section 5 
 + 
 +[INFO] 6 - Docker Security Operations 
 +[INFO] 6.1 - Ensure that image sprawl is avoided (Manual) 
 +[INFO]      * There are currently: 4 images 
 +[INFO]      * Only 0 out of 4 are in use 
 +[INFO] 6.2 - Ensure that container sprawl is avoided (Manual) 
 +[INFO]      * There are currently a total of 0 containers, with 0 of them currently running 
 + 
 +[INFO] 7 - Docker Swarm Configuration 
 +[WARN] 7.1 - Ensure swarm mode is not Enabled, if not needed (Automated) 
 +[PASS] 7.2 - Ensure that the minimum number of manager nodes have been created in a swarm (Automated) (Swarm mode not enabled) 
 +[PASS] 7.3 - Ensure that swarm services are bound to a specific host interface (Automated) (Swarm mode not enabled) 
 +[PASS] 7.4 - Ensure that all Docker swarm overlay networks are encrypted (Automated) 
 +[PASS] 7.5 - Ensure that Docker's secret management commands are used for managing secrets in a swarm cluster (Manual) (Swarm mode not enabled) 
 +[PASS] 7.6 - Ensure that swarm manager is run in auto-lock mode (Automated) (Swarm mode not enabled) 
 +[PASS] 7.7 - Ensure that the swarm manager auto-lock key is rotated periodically (Manual) (Swarm mode not enabled) 
 +[PASS] 7.8 - Ensure that node certificates are rotated as appropriate (Manual) (Swarm mode not enabled) 
 +[PASS] 7.9 - Ensure that CA certificates are rotated as appropriate (Manual) (Swarm mode not enabled) 
 +[PASS] 7.10 - Ensure that management plane traffic is separated from data plane traffic (Manual) (Swarm mode not enabled) 
 + 
 + 
 +Section C - Score 
 + 
 +[INFO] Checks: 86 
 +[INFO] Score: 1
 </code> </code>
  
Ligne 1589: Ligne 479:
 ... ...
 [INFO] 1 - Host Configuration [INFO] 1 - Host Configuration
- +[INFO] 1.1 - Linux Hosts Specific Configuration 
-[INFO] 1.1 - General Configuration +[WARN] 1.1.1 - Ensure a separate partition for containers has been created (Automated) 
-[NOTE] 1.1.1  - Ensure the container host has been Hardened +[INFO] 1.1.2 - Ensure only trusted users are allowed to control Docker daemon (Automated) 
-[INFO] 1.1.2  - Ensure Docker is up to date +[INFO]       Users: trainee 
-[INFO]        * Using 19.03.4, verify is it up to date as deemed necessary +[WARN] 1.1.3 - Ensure auditing is configured for the Docker daemon (Automated) 
-[INFO]        * Your operating system vendor may provide support and security maintenance for Docker +[WARN] 1.1.4 - Ensure auditing is configured for Docker files and directories -/run/containerd (Automated) 
- +[WARN] 1.1.5 - Ensure auditing is configured for Docker files and directories - /var/lib/docker (Automated) 
-[INFO] 1.2 - Linux Hosts Specific Configuration +[WARN] 1.1.6 - Ensure auditing is configured for Docker files and directories - /etc/docker (Automated) 
-[WARN] 1.2.1 - Ensure a separate partition for containers has been created +[WARN] 1.1.7 - Ensure auditing is configured for Docker files and directories - docker.service (Automated) 
-[INFO] 1.2.2  - Ensure only trusted users are allowed to control Docker daemon +[INFO] 1.1.8 - Ensure auditing is configured for Docker files and directories - containerd.sock (Automated)
-[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]        * File not found
-[INFO] 1.2.10  - Ensure auditing is configured for Docker files and directories - /etc/docker/daemon.json+[WARN] 1.1.9 - Ensure auditing is configured for Docker files and directories - docker.socket (Automated) 
 +[WARN] 1.1.10 - Ensure auditing is configured for Docker files and directories - /etc/default/docker (Automated) 
 +[INFO] 1.1.11 - Ensure auditing is configured for Dockerfiles and directories - /etc/docker/daemon.json (Automated) 
 +[INFO]        * File not found 
 +[WARN] 1.1.12 - 1.1.12 Ensure auditing is configured for Dockerfiles and directories - /etc/containerd/config.toml (Automated) 
 +[INFO] 1.1.13 - Ensure auditing is configured for Docker files and directories - /etc/sysconfig/docker (Automated) 
 +[INFO]        * File not found 
 +[WARN] 1.1.14 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd (Automated) 
 +[WARN] 1.1.15 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd-shim (Automated) 
 +[INFO] 1.1.16 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd-shim-runc-v1 (Automated)
 [INFO]         * File not found [INFO]         * File not found
-[WARN] 1.2.11  - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd +[INFO] 1.1.17 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd-shim-runc-v2 (Automated)
-[INFO] 1.2.12  Ensure auditing is configured for Docker files and directories /usr/sbin/runc+
 [INFO]         * File not found [INFO]         * File not found
 +[WARN] 1.1.18 - Ensure auditing is configured for Docker files and directories - /usr/bin/runc (Automated)
 +[INFO] 1.2 - General Configuration
 +[NOTE] 1.2.1 - Ensure the container host has been Hardened (Manual)
 +[PASS] 1.2.2 - Ensure that the version of Docker is up to date (Manual)
 +[INFO]        * Using 19.03.4, verify is it up to date as deemed necessary
 ... ...
 </file> </file>
Ligne 1618: Ligne 513:
 Les problèmes de sécurité qu'il convient à résoudre sont indiqués par les annotations **[WARN]**. Les problèmes de sécurité qu'il convient à résoudre sont indiqués par les annotations **[WARN]**.
  
-====4.1 - [WARN] 1.2.1 - Ensure a separate partition for containers has been created====+====[WARN] 1.1.1 - Ensure a separate partition for containers has been created (Automated)====
  
 Par défaut, tous les fichiers de Docker sont stockés dans le répertoire **/var/lib/docker**, y compris toutes les images, tous les conteneurs et tous les volumes. Sur un système hôte n'ayant qu'une seule partition il y a un risque, tous comme le risque lié au répertoire **/var/log/**, que le disque devient saturé. Par défaut, tous les fichiers de Docker sont stockés dans le répertoire **/var/lib/docker**, y compris toutes les images, tous les conteneurs et tous les volumes. Sur un système hôte n'ayant qu'une seule partition il y a un risque, tous comme le risque lié au répertoire **/var/log/**, que le disque devient saturé.
  
-====4.2 - [WARN] 1.2.3  - Ensure auditing is configured for the Docker daemon====+====[WARN] 1.1.3 - Ensure auditing is configured for the Docker daemon (Automated)====
  
 <file> <file>
-[WARN] 1.2.4  - Ensure auditing is configured for Docker files and directories - /var/lib/docker +[WARN] 1.1.4 - Ensure auditing is configured for Docker files and directories -/run/containerd (Automated) 
-[WARN] 1.2.5  - Ensure auditing is configured for Docker files and directories - /etc/docker +[WARN] 1.1.5 - Ensure auditing is configured for Docker files and directories - /var/lib/docker (Automated) 
-[WARN] 1.2.6  - Ensure auditing is configured for Docker files and directories - docker.service +[WARN] 1.1.- Ensure auditing is configured for Docker files and directories - /etc/docker (Automated) 
-[WARN] 1.2.7  - Ensure auditing is configured for Docker files and directories - docker.socket +[WARN] 1.1.- Ensure auditing is configured for Docker files and directories - docker.service (Automated) 
-[WARN] 1.2.8  - Ensure auditing is configured for Docker files and directories - /etc/default/docker +[WARN] 1.1.- Ensure auditing is configured for Docker files and directories - docker.socket (Automated) 
-[WARN] 1.2.11  - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd+[WARN] 1.1.10 - Ensure auditing is configured for Docker files and directories - /etc/default/docker (Automated) 
 +[WARN] 1.1.12 - Ensure auditing is configured for Dockerfiles and directories - /etc/containerd/config.toml (Automated) 
 +[WARN] 1.1.14 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd (Automated) 
 +[WARN] 1.1.15 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd-shim (Automated) 
 +[WARN] 1.1.18 - Ensure auditing is configured for Docker files and directories - /usr/bin/runc (Automated)
 </file> </file>
  
 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.  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. 
 +
 +Editez le fichier **/etc/apt/sources.list** selon l'exemple suivant :
 +
 +<code>
 +root@manager:~/docker-bench-security# vi /etc/apt/sources.list
 +
 +root@manager:~/docker-bench-security# cat /etc/apt/sources.list
 +deb http://archive.debian.org/debian/ stretch main
 +deb-src http://archive.debian.org/debian/ stretch main
 +deb http://archive.debian.org/debian-security stretch/updates main
 +deb-src http://archive.debian.org/debian-security stretch/updates main
 +deb [arch=amd64] https://download.docker.com/linux/debian stretch stable
 +</code>
 +
 +Exécutez la commande **apt-update** :
 +
 +<code>
 +root@manager:~/docker-bench-security# apt update
 +Ign:1 http://archive.debian.org/debian stretch InRelease
 +Atteint:2 http://archive.debian.org/debian-security stretch/updates InRelease
 +Atteint:3 http://archive.debian.org/debian stretch Release
 +Réception de:4 https://download.docker.com/linux/debian stretch InRelease [44,8 kB]
 +44,8 ko réceptionnés en 0s (107 ko/s)                     
 +Lecture des listes de paquets... Fait
 +Construction de l'arbre des dépendances       
 +Lecture des informations d'état... Fait
 +254 packages can be upgraded. Run 'apt list --upgradable' to see them.
 +</code>
  
 Pour installer auditd, utilisez **apt-get** :  Pour installer auditd, utilisez **apt-get** : 
  
 <code> <code>
-root@debian9:~/docker-bench-security# apt-get install auditd+root@manager:~/docker-bench-security# apt-get install auditd -y
 </code> </code>
  
Ligne 1644: Ligne 571:
  
 <code> <code>
-root@debian9:~/docker-bench-security# vi /etc/audit/rules.d/audit.rules +root@manager:~/docker-bench-security# vi /etc/audit/rules.d/audit.rules 
-root@debian9:~/docker-bench-security# cat /etc/audit/rules.d/audit.rules+ 
 +root@manager:~/docker-bench-security# cat /etc/audit/rules.d/audit.rules
 ## First rule - delete all ## First rule - delete all
 -D -D
Ligne 1670: Ligne 598:
 -w /usr/bin/docker-runc -p wa -w /usr/bin/docker-runc -p wa
 -w /usr/bin/containerd -p wa -w /usr/bin/containerd -p wa
 +-w /run/containerd -p wa
 +-w /etc/containerd/config.toml -p wa
 +-w /usr/bin/containerd-shim -p wa
 +-w /usr/bin/runc -p wa
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : L'option **-w** indique **watch** et concerne le fichier qui suit. L'option **-p** journalise les modifications éventuelles. **Important** : L'option **-w** indique **watch** et concerne le fichier qui suit. L'option **-p** journalise les modifications éventuelles.
 </WRAP> </WRAP>
Ligne 1679: Ligne 611:
  
 <code> <code>
-root@debian9:~/docker-bench-security# systemctl restart auditd+root@manager:~/docker-bench-security# systemctl restart auditd
 </code> </code>
  
Ligne 1685: Ligne 617:
  
 <code> <code>
-root@debian9:~/docker-bench-security# cat /etc/audit/audit.rules+root@manager:~/docker-bench-security# cat /etc/audit/audit.rules
 ## This file is automatically generated from /etc/audit/rules.d ## This file is automatically generated from /etc/audit/rules.d
 -D -D
Ligne 1701: Ligne 633:
 -w /usr/bin/docker-runc -p wa -w /usr/bin/docker-runc -p wa
 -w /usr/bin/containerd -p wa -w /usr/bin/containerd -p wa
 +-w /run/containerd -p wa
 +-w /etc/containerd/config.toml -p wa
 +-w /usr/bin/containerd-shim -p wa
 +-w /usr/bin/runc -p wa
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** - Pour plus d'information concernant la création de règles personalisées avec auditd, consultez cette **[[https://www.linux.com/tutorials/customized-file-monitoring-auditd/|page]]**. **Important** - Pour plus d'information concernant la création de règles personalisées avec auditd, consultez cette **[[https://www.linux.com/tutorials/customized-file-monitoring-auditd/|page]]**.
 </WRAP> </WRAP>
Ligne 1710: Ligne 646:
  
 <code> <code>
-root@debian9:~/docker-bench-security# ./docker-bench-security.sh  +root@manager:~/docker-bench-security# ./docker-bench-security.sh 
-... +
-[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+[PASS] 1.1.4 - Ensure auditing is configured for Docker files and directories -/run/containerd (Automated) 
 +[PASS] 1.1.5 - Ensure auditing is configured for Docker files and directories - /var/lib/docker (Automated) 
 +[PASS] 1.1.6 - Ensure auditing is configured for Docker files and directories - /etc/docker (Automated) 
 +[PASS] 1.1.7 - Ensure auditing is configured for Docker files and directories - docker.service (Automated) 
 +[PASS] 1.1.9 - Ensure auditing is configured for Docker files and directories - docker.socket (Automated) 
 +[PASS] 1.1.10 - Ensure auditing is configured for Docker files and directories - /etc/default/docker (Automated) 
 +[PASS] 1.1.12 - Ensure auditing is configured for Dockerfiles and directories - /etc/containerd/config.toml (Automated) 
 +[PASS] 1.1.14 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd (Automated) 
 +[PASS] 1.1.15 - Ensure auditing is configured for Docker files and directories - /usr/bin/containerd-shim (Automated) 
 +[PASS] 1.1.18 - Ensure auditing is configured for Docker files and directories - /usr/bin/runc (Automated)
 ... ...
 </code> </code>
Ligne 1729: Ligne 668:
 ... ...
 [INFO] 2 - Docker daemon configuration [INFO] 2 - Docker daemon configuration
-[WARN] 2.1  - Ensure network traffic is restricted between containers on the default bridge +[NOTE] 2.1 - Run the Docker daemon as a non-root user, if possible (Manual) 
-[PASS] 2.2  - Ensure the logging level is set to 'info' +[WARN] 2.2 - Ensure network traffic is restricted between containers on the default bridge (Scored) 
-[PASS] 2.3  - Ensure Docker is allowed to make changes to iptables +[PASS] 2.- Ensure the logging level is set to 'info' (Scored) 
-[PASS] 2.4  - Ensure insecure registries are not used +[PASS] 2.- Ensure Docker is allowed to make changes to iptables (Scored) 
-[PASS] 2.5  - Ensure aufs storage driver is not used +[PASS] 2.- Ensure insecure registries are not used (Scored) 
-[INFO] 2.6  - Ensure TLS authentication for Docker daemon is configured+[PASS] 2.- Ensure aufs storage driver is not used (Scored) 
 +[INFO] 2.- Ensure TLS authentication for Docker daemon is configured (Scored)
 [INFO]      * Docker daemon not listening on TCP [INFO]      * Docker daemon not listening on TCP
-[INFO] 2.7  - Ensure the default ulimit is configured appropriately+[INFO] 2.- Ensure the default ulimit is configured appropriately (Manual)
 [INFO]      * Default ulimit doesn't appear to be set [INFO]      * Default ulimit doesn't appear to be set
-[WARN] 2.8  - Enable user namespace support +[WARN] 2.- Enable user namespace support (Scored) 
-[PASS] 2.9  - Ensure the default cgroup usage has been confirmed +[PASS] 2.10 - Ensure the default cgroup usage has been confirmed (Scored) 
-[PASS] 2.10  - Ensure base device size is not changed until needed +[PASS] 2.11 - Ensure base device size is not changed until needed (Scored) 
-[WARN] 2.11  - Ensure that authorization for Docker client commands is enabled +[WARN] 2.12 - Ensure that authorization for Docker client commands is enabled (Scored) 
-[WARN] 2.12  - Ensure centralized and remote logging is configured +[WARN] 2.13 - Ensure centralized and remote logging is configured (Scored) 
-[PASS] 2.13  - Ensure live restore is Enabled (Incompatible with swarm mode+[WARN] 2.14 - Ensure containers are restricted from acquiring new privileges (Scored) 
-[WARN] 2.14  - Ensure Userland Proxy is Disabled +[WARN] 2.15 - Ensure live restore is enabled (Scored
-[PASS] 2.15  - Ensure that a daemon-wide custom seccomp profile is applied if appropriate +[WARN] 2.16 - Ensure Userland Proxy is Disabled (Scored) 
-[PASS] 2.16  - Ensure that experimental features are not implemented in production +[PASS] 2.17 - Ensure that a daemon-wide custom seccomp profile is applied if appropriate (Manual) 
-[WARN] 2.17  - Ensure containers are restricted from acquiring new privileges+[PASS] 2.18 - Ensure that experimental features are not implemented in production (Scored)
 ... ...
 </file> </file>
Ligne 1753: Ligne 693:
 Les problèmes de sécurité qu'il convient à résoudre sont indiqués par les annotations **[WARN]**. Les problèmes de sécurité qu'il convient à résoudre sont indiqués par les annotations **[WARN]**.
  
-====5.1 - [WARN] 2.1  - Ensure network traffic is restricted between containers on the default bridge====+====[WARN] 2.- Ensure network traffic is restricted between containers on the default bridge (Scored)====
  
 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. 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.
Ligne 1759: Ligne 699:
 Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/userguide/networking/|page]]**. Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/userguide/networking/|page]]**.
  
-====5.2 - [WARN] 2.8  - Enable user namespace support====+====[WARN] 2.- Enable user namespace support (Scored)====
  
 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"**. 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"**.
Ligne 1765: Ligne 705:
 Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/security/userns-remap/|page]]**. Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/security/userns-remap/|page]]**.
  
-====5.3 - [WARN] 2.11  - Ensure that authorization for Docker client commands is enabled====+====[WARN] 2.12 - Ensure that authorization for Docker client commands is enabled (Scored)====
  
 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) 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)
Ligne 1771: Ligne 711:
 Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/extend/plugins_authorization/|page]]**. Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/extend/plugins_authorization/|page]]**.
  
-====5.4 - [WARN] 2.12  - Ensure centralized and remote logging is configured====+====[WARN] 2.13 - Ensure centralized and remote logging is configured (Scored)====
  
 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ée. Pour activer cette configuration, il faut fixer la valeur de **log-driver** à **syslog** puis configurer **syslog** ainsi que la valeur de **log-opts** correctement. 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ée. Pour activer cette configuration, il faut fixer la valeur de **log-driver** à **syslog** puis configurer **syslog** ainsi que la valeur de **log-opts** correctement.
Ligne 1777: Ligne 717:
 Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/admin/logging/overview/|page]]**. Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/admin/logging/overview/|page]]**.
  
-====5.- [WARN] 2.14  - Ensure Userland Proxy is Disabled====+====[WARN] 2.14 Ensure containers are restricted from acquiring new privileges (Scored)==== 
 + 
 +Par défaut un conteneur peut obtenir une escalade de privilèges en utilisant les binaires setuid ou setgid. Pour interdire ceci il faut fixer la valeur de **no-new-privileges** à **true**. 
 + 
 +Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/userguide/networking/default_network/binding/|page]]**. 
 + 
 +====[WARN] 2.15 - Ensure live restore is enabled (Scored)==== 
 + 
 +L'option --live-restore permet une prise en charge complète des conteneurs sans démon dans Docker. Elle garantit que Docker n'arrête pas les conteneurs lors de l'arrêt ou de la restauration et qu'il se reconnecte correctement au conteneur lors du redémarrage. 
 + 
 +====[WARN] 2.16 - Ensure Userland Proxy is Disabled (Scored)====
  
 Il existe deux méthodes pour qu'un conteneur puisse router vers l'extérieur : Il existe deux méthodes pour qu'un conteneur puisse router vers l'extérieur :
Ligne 1788: Ligne 738:
 Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/userguide/networking/default_network/binding/|page]]**. Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/userguide/networking/default_network/binding/|page]]**.
  
-====5.6 - [WARN] 2.17  - Ensure containers are restricted from acquiring new privileges==== +====5.- Le Fichier /etc/docker/daemon.json ====
- +
-Par défaut un conteneur peut obtenir une escalade de privilèges en utilisant les binaires setuid ou setgid. Pour interdire ceci il faut fixer la valeur de **no-new-privileges** à **true**. +
- +
-Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/userguide/networking/default_network/binding/|page]]**. +
- +
-====5.7 - Le Fichier /etc/docker/daemon.json ====+
  
 Créez le fichier **/etc/docker/daemon.json** :  Créez le fichier **/etc/docker/daemon.json** : 
  
 <code> <code>
-root@debian9:~/docker-bench-security# vi /etc/docker/daemon.json +root@manager:~/docker-bench-security# vi /etc/docker/daemon.json 
-root@debian9:~/docker-bench-security# cat /etc/docker/daemon.json+ 
 +root@manager:~/docker-bench-security# cat /etc/docker/daemon.json
 { {
     "icc": false,     "icc": false,
Ligne 1810: Ligne 755:
 } }
 </code> </code>
- 
-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 : Re-démarrez le service Docker :
  
 <code> <code>
-root@debian9:~/docker-bench-security# systemctl restart docker+root@manager:~/docker-bench-security# systemctl restart docker
 </code> </code>
  
Ligne 1822: Ligne 765:
  
 <code> <code>
-root@debian9:~/docker-bench-security# id dockremap+root@manager:~/docker-bench-security# id dockremap
 uid=116(dockremap) gid=121(dockremap) groupes=121(dockremap) uid=116(dockremap) gid=121(dockremap) groupes=121(dockremap)
 </code> </code>
Ligne 1829: Ligne 772:
  
 <code> <code>
-root@debian9:~# cd docker-bench-security/ +root@manager:~/docker-bench-security# ./docker-bench-security.sh 
-root@debian9:~/docker-bench-security# ./docker-bench-security.sh +
 ... ...
-[PASS] 2.1  - Ensure network traffic is restricted between containers on the default bridge +[PASS] 2.- Ensure network traffic is restricted between containers on the default bridge (Scored) 
-... +[PASS] 2.3 - Ensure the logging level is set to 'info' (Scored) 
-[PASS] 2.8  - Enable user namespace support +[PASS] 2.4 - Ensure Docker is allowed to make changes to iptables (Scored) 
-... +[PASS] 2.5 - Ensure insecure registries are not used (Scored) 
-[WARN] 2.11  - Ensure that authorization for Docker client commands is enabled +[PASS] 2.6 - Ensure aufs storage driver is not used (Scored) 
-[PASS] 2.12  - Ensure centralized and remote logging is configured +[PASS] 2.- Enable user namespace support (Scored) 
-... +[PASS] 2.10 - Ensure the default cgroup usage has been confirmed (Scored) 
-[PASS] 2.14  - Ensure Userland Proxy is Disabled +[PASS] 2.11 - Ensure base device size is not changed until needed (Scored) 
-... +[PASS] 2.13 - Ensure centralized and remote logging is configured (Scored) 
-[PASS] 2.17  - Ensure containers are restricted from acquiring new privileges+[PASS] 2.14 - Ensure containers are restricted from acquiring new privileges (Scored) 
 +[PASS] 2.15 - Ensure live restore is enabled (Scored) 
 +[PASS] 2.16 - Ensure Userland Proxy is Disabled (Scored) 
 +[PASS] 2.17 - Ensure that a daemon-wide custom seccomp profile is applied if appropriate (Manual) 
 +[PASS] 2.18 - Ensure that experimental features are not implemented in production (Scored)
 ... ...
 </code> </code>
Ligne 1852: Ligne 798:
  
 <code> <code>
-root@debian9:~/docker-bench-security# docker container run -d --name mysql -e MYSQL_ROOT_PASSWORD=password mysql+root@manager:~/docker-bench-security# apt install  --only-upgrade docker-ce 
 +Lecture des listes de paquets... Fait 
 +Construction de l'arbre des dépendances        
 +Lecture des informations d'état... Fait 
 +Le paquet suivant a été installé automatiquement et n'est plus nécessaire : 
 +  libsasl2-modules 
 +Veuillez utiliser « apt autoremove » pour le supprimer. 
 +Les paquets suivants seront mis à jour : 
 +  docker-ce 
 +1 mis à jour, 0 nouvellement installés, 0 à enlever et 252 non mis à jour. 
 +Il est nécessaire de prendre 22,7 Mo dans les archives. 
 +Après cette opération, 497 ko d'espace disque supplémentaires seront utilisés. 
 +Réception de:1 https://download.docker.com/linux/debian stretch/stable amd64 docker-ce amd64 5:19.03.15~3-0~debian-stretch [22,7 MB] 
 +22,7 Mo réceptionnés en 0s (26,0 Mo/s) 
 +Lecture des fichiers de modifications (« changelog »)... Terminé 
 +(Lecture de la base de données... 112865 fichiers et répertoires déjà installés.) 
 +Préparation du dépaquetage de .../docker-ce_5%3a19.03.15~3-0~debian-stretch_amd64.deb ... 
 +Dépaquetage de docker-ce (5:19.03.15~3-0~debian-stretch) sur (5:19.03.4~3-0~debian-stretch) ... 
 +Paramétrage de docker-ce (5:19.03.15~3-0~debian-stretch) ... 
 +Traitement des actions différées (« triggers ») pour systemd (232-25+deb9u14) ... 
 + 
 +root@manager:~/docker-bench-security# docker container run -d --name mysql -e MYSQL_ROOT_PASSWORD=password mysql
 Unable to find image 'mysql:latest' locally Unable to find image 'mysql:latest' locally
 latest: Pulling from library/mysql latest: Pulling from library/mysql
-80369df48736: Pull complete  +e9f2695d7e5b: Pull complete  
-e8f52315cb10: Pull complete  +80c6055edb33: Pull complete  
-cf2189b391fc: Pull complete  +c646ab461d8b: Pull complete  
-cc98f645c682: Pull complete  +012006c6a591: Pull complete  
-27a27ac83f74: Pull complete  +929d5fa34b95: Pull complete  
-fa1f04453414: Pull complete  +17e0243877fa: Pull complete  
-d45bf7d22d33: Pull complete  +1850b459cd2f: Pull complete  
-3dbac26e409c: Pull complete  +8dceaed53baf: Pull complete  
-9017140fb8c1: Pull complete  +197b834ea1cd: Pull complete  
-b76dda2673ae: Pull complete  +8df78c25b227: Pull complete  
-bea9eb46d12a: Pull complete  +Digest: sha256:ceb98918916bd5261b3e9866ac8271d75d276b8a4db56f1dc190770342a77a9b
-e1f050a38d0f: Pull complete  +
-Digest: sha256:7345ce4ce6f0c1771d01fa333b8edb2c606ca59d385f69575f8e3e2ec6695eee+
 Status: Downloaded newer image for mysql:latest Status: Downloaded newer image for mysql:latest
-54606c03c52c5e3ec0328029d69b869d4b285fb433015576dedc8b8dd4ad0494 +e503dd98f88992ae6ed5ec4dcaa2e18982ade8ec74966869515a120763418f74 
-root@debian9:~/docker-bench-security# docker ps -a + 
-CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                 NAMES +root@manager:~/docker-bench-security# docker ps -a 
-54606c03c52c        mysql               "docker-entrypoint.s…"   5 seconds ago       Up 4 seconds               3306/tcp, 33060/tcp   mysql+CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES 
 +e503dd98f889        mysql               "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        3306/tcp, 33060/tcp   mysql
 </code> </code>
  
Ligne 1878: Ligne 844:
  
 <code> <code>
-root@debian9:~/docker-bench-security# ./docker-bench-security.sh+root@manager:~/docker-bench-security# ./docker-bench-security.sh
 ... ...
 [INFO] 4 - Container Images and Build File [INFO] 4 - Container Images and Build File
-[WARN] 4.1  - Ensure a user for the container has been created+[WARN] 4.1 - Ensure that a user for the container has been created (Automated)
 [WARN]      * Running as root: mysql [WARN]      * Running as root: mysql
-[NOTE] 4.2  - Ensure that containers use only trusted base images +[NOTE] 4.2 - Ensure that containers use only trusted base images (Manual) 
-[NOTE] 4.3  - Ensure that unnecessary packages are not installed in the container +[NOTE] 4.3 - Ensure that unnecessary packages are not installed in the container (Manual) 
-[NOTE] 4.4  - Ensure images are scanned and rebuilt to include security patches +[NOTE] 4.4 - Ensure images are scanned and rebuilt to include security patches (Manual) 
-[WARN] 4.5  - Ensure Content trust for Docker is Enabled +[WARN] 4.5 - Ensure Content trust for Docker is Enabled (Automated) 
-[WARN] 4.6  - Ensure that HEALTHCHECK instructions have been added to container images +[WARN] 4.6 - Ensure that HEALTHCHECK instructions have been added to container images (Automated)
-[WARN]      * No Healthcheck found: [alpine:latest]+
 [WARN]      * No Healthcheck found: [mysql:latest] [WARN]      * No Healthcheck found: [mysql:latest]
-[INFO] 4.7  - Ensure update instructions are not use alone in the Dockerfile +[PASS] 4.7 - Ensure update instructions are not used alone in the Dockerfile (Manual) 
-[INFO]      * Update instruction found: [mysql:latest] +[NOTE] 4.8 - Ensure setuid and setgid permissions are removed (Manual) 
-[NOTE] 4.8  - Ensure setuid and setgid permissions are removed +[PASS] 4.9 - Ensure that COPY is used instead of ADD in Dockerfiles (Manual) 
-[PASS] 4.9  - Ensure that COPY is used instead of ADD in Dockerfiles +[NOTE] 4.10 - Ensure secrets are not stored in Dockerfiles (Manual) 
-[NOTE] 4.10  - Ensure secrets are not stored in Dockerfiles +[NOTE] 4.11 - Ensure only verified packages are installed (Manual) 
-[NOTE] 4.11  - Ensure only verified packages are installed+[NOTE] 4.12 - Ensure all signed artifacts are validated (Manual)
 ... ...
 </code> </code>
  
-====6.1 - [WARN] 4.1  - Ensure a user for the container has been created====+====[WARN] 4.1 - Ensure that a user for the container has been created (Automated)====
  
-Les processus dans le conteneur **root-nginx** tourne sous l'UID de root. Ceci est l'action par défaut de Docker.+Les processus dans le conteneur **mysql** tourne sous l'UID de root. Ceci est l'action par défaut de Docker.
  
 Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/security/security/|page]]**. Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/security/security/|page]]**.
  
-====6.2 - [WARN] 4.5  - Ensure Content trust for Docker is Enabled====+====[WARN] 4.5 - Ensure Content trust for Docker is Enabled (Automated)====
  
 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. 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.
Ligne 1912: Ligne 877:
  
 <code> <code>
-root@debian9:~/docker-bench-security# echo "DOCKER_CONTENT_TRUST=1" | sudo tee -a /etc/environment+root@manager:~/docker-bench-security# echo "DOCKER_CONTENT_TRUST=1" | sudo tee -a /etc/environment
 DOCKER_CONTENT_TRUST=1 DOCKER_CONTENT_TRUST=1
-root@debian9:~/docker-bench-security# source /etc/environment+ 
 +root@manager:~/docker-bench-security# source /etc/environment
 </code> </code>
  
Ligne 1920: Ligne 886:
  
 <code> <code>
-root@debian9:~/docker-bench-security# docker container start mysql+root@manager:~/docker-bench-security# reboot 
 +Connection to 10.0.2.62 closed by remote host. 
 +Connection to 10.0.2.62 closed. 
 + 
 +root@debian11:~# ssh -l trainee 10.0.2.62 
 +trainee@10.0.2.62's password: trainee 
 +Linux manager.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 
 + 
 +The programs included with the Debian GNU/Linux system are free software; 
 +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 
 +permitted by applicable law. 
 +Last login: Sun Dec 17 18:39:07 2023 from 10.0.2.46 
 + 
 +trainee@manager:~$ su - 
 +Mot de passe : fenestros 
 + 
 +root@manager:~# cd docker-bench-security/ 
 + 
 +root@manager:~/docker-bench-security# 
 + 
 +root@manager:~/docker-bench-security# docker start mysql
 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>
  
Ligne 1930: Ligne 916:
  
 <code> <code>
-root@debian9:~/docker-bench-security# ./docker-bench-security.sh+root@manager:~/docker-bench-security# ./docker-bench-security.sh
 ... ...
 [INFO] 4 - Container Images and Build File [INFO] 4 - Container Images and Build File
-[WARN] 4.1  - Ensure a user for the container has been created+[WARN] 4.1 - Ensure that a user for the container has been created (Automated)
 [WARN]      * Running as root: mysql [WARN]      * Running as root: mysql
-[NOTE] 4.2  - Ensure that containers use only trusted base images +[NOTE] 4.2 - Ensure that containers use only trusted base images (Manual) 
-[NOTE] 4.3  - Ensure that unnecessary packages are not installed in the container +[NOTE] 4.3 - Ensure that unnecessary packages are not installed in the container (Manual) 
-[NOTE] 4.4  - Ensure images are scanned and rebuilt to include security patches +[NOTE] 4.4 - Ensure images are scanned and rebuilt to include security patches (Manual) 
-[PASS] 4.5  - Ensure Content trust for Docker is Enabled +[PASS] 4.5 - Ensure Content trust for Docker is Enabled (Automated) 
-[WARN] 4.6  - Ensure that HEALTHCHECK instructions have been added to container images +[WARN] 4.6 - Ensure that HEALTHCHECK instructions have been added to container images (Automated)
-[WARN]      * No Healthcheck found: [alpine:latest]+
 [WARN]      * No Healthcheck found: [mysql:latest] [WARN]      * No Healthcheck found: [mysql:latest]
-[INFO] 4.7  - Ensure update instructions are not use alone in the Dockerfile +[PASS] 4.7 - Ensure update instructions are not used alone in the Dockerfile (Manual) 
-[INFO]      * Update instruction found: [mysql:latest] +[NOTE] 4.8 - Ensure setuid and setgid permissions are removed (Manual) 
-[NOTE] 4.8  - Ensure setuid and setgid permissions are removed +[PASS] 4.9 - Ensure that COPY is used instead of ADD in Dockerfiles (Manual) 
-[PASS] 4.9  - Ensure that COPY is used instead of ADD in Dockerfiles +[NOTE] 4.10 - Ensure secrets are not stored in Dockerfiles (Manual) 
-[NOTE] 4.10  - Ensure secrets are not stored in Dockerfiles +[NOTE] 4.11 - Ensure only verified packages are installed (Manual) 
-[NOTE] 4.11  - Ensure only verified packages are installed+[NOTE] 4.12 - Ensure all signed artifacts are validated (Manual)
 ... ...
 </code> </code>
Ligne 1953: Ligne 938:
 Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/security/trust/content_trust/|page]]**. Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/security/trust/content_trust/|page]]**.
  
-====6.3 - [WARN] 4.6  - Ensure that HEALTHCHECK instructions have been added to container images====+====[WARN] 4.6 - Ensure that HEALTHCHECK instructions have been added to container images====
  
-Quand une image est construiteil est possible d'y mettre un **HEALTHCHECK** dont le statut peut être vérifié par Docker afin de relancer le conteneur si nécessaire. +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. 
  
 Pour mettre en place un HEALTHCHECK, il conviendrait, par exemple, d'inclure la ligne suivante dans le fichier DOCKERFILE servant à construire l'image : Pour mettre en place un HEALTHCHECK, il conviendrait, par exemple, d'inclure la ligne suivante dans le fichier DOCKERFILE servant à construire l'image :
Ligne 1972: Ligne 957:
  
 <code> <code>
-root@debian9:~/docker-bench-security# ./docker-bench-security.sh+root@manager:~/docker-bench-security# ./docker-bench-security.sh
 ... ...
 [INFO] 5 - Container Runtime [INFO] 5 - Container Runtime
-[WARN] 5.1  - Ensure that, if applicable, an AppArmor Profile is enabled +[WARN] 5.1 - Ensure that, if applicable, an AppArmor Profile is enabled (Automated)
 [WARN]      * No AppArmorProfile Found: mysql [WARN]      * No AppArmorProfile Found: mysql
-[WARN] 5.2  - Ensure that, if applicable, SELinux security options are set+[WARN] 5.2 - Ensure that, if applicable, SELinux security options are set (Automated)
 [WARN]      * No SecurityOptions Found: mysql [WARN]      * No SecurityOptions Found: mysql
-[PASS] 5.3  - Ensure Linux Kernel Capabilities are restricted within containers +[PASS] 5.3 - Ensure that Linux kernel capabilities are restricted within containers (Automated) 
-[PASS] 5.4  - Ensure that privileged containers are not used +[PASS] 5.4 - Ensure that privileged containers are not used (Automated) 
-[PASS] 5.5  - Ensure sensitive host system directories are not mounted on containers +[PASS] 5.5 - Ensure sensitive host system directories are not mounted on containers (Automated) 
-[PASS] 5.6  - Ensure sshd is not run within containers +[PASS] 5.6 - Ensure sshd is not run within containers (Automated) 
-[PASS] 5.7  - Ensure privileged ports are not mapped within containers +[PASS] 5.7 - Ensure privileged ports are not mapped within containers (Automated) 
-[NOTE] 5.8  - Ensure that only needed ports are open on the container +[PASS] 5.8 - Ensure that only needed ports are open on the container (Manual) 
-[PASS] 5.9  - Ensure the host's network namespace is not shared +[PASS] 5.9 - Ensure that the host's network namespace is not shared (Automated) 
-[WARN] 5.10  - Ensure that the memory usage for containers is limited +[WARN] 5.10 - Ensure that the memory usage for containers is limited (Automated) 
-[WARN]      * Container running without memory restrictions: mysql +[WARN]       * Container running without memory restrictions: mysql 
-[WARN] 5.11  - Ensure CPU priority is set appropriately on the container +[WARN] 5.11 - Ensure that CPU priority is set appropriately on containers (Automated) 
-[WARN]      * Container running without CPU restrictions: mysql +[WARN]       * Container running without CPU restrictions: mysql 
-[WARN] 5.12  - Ensure that the container's root filesystem is mounted as read only +[WARN] 5.12 - Ensure that the container's root filesystem is mounted as read only (Automated) 
-[WARN]      * Container running with root FS mounted R/W: mysql +[WARN]       * Container running with root FS mounted R/W: mysql 
-[PASS] 5.13  - Ensure that incoming container traffic is bound to a specific host interface +[PASS] 5.13 - Ensure that incoming container traffic is bound to a specific host interface (Automated) 
-[WARN] 5.14  - Ensure that the 'on-failure' container restart policy is set to '5' +[WARN] 5.14 - Ensure that the 'on-failure' container restart policy is set to '5' (Automated) 
-[WARN]      * MaximumRetryCount is not set to 5: mysql +[WARN]       * MaximumRetryCount is not set to 5: mysql 
-[PASS] 5.15  - Ensure the host's process namespace is not shared +[PASS] 5.15 - Ensure that the host's process namespace is not shared (Automated) 
-[PASS] 5.16  - Ensure the host's IPC namespace is not shared +[PASS] 5.16 - Ensure that the host's IPC namespace is not shared (Automated) 
-[PASS] 5.17  - Ensure that host devices are not directly exposed to containers +[PASS] 5.17 - Ensure that host devices are not directly exposed to containers (Manual) 
-[INFO] 5.18  - Ensure that the default ulimit is overwritten at runtime if needed +[INFO] 5.18 - Ensure that the default ulimit is overwritten at runtime if needed (Manual) 
-[INFO]      * Container no default ulimit override: mysql +[INFO]       * Container no default ulimit override: mysql 
-[PASS] 5.19  - Ensure mount propagation mode is not set to shared +[PASS] 5.19 - Ensure mount propagation mode is not set to shared (Automated) 
-[PASS] 5.20  - Ensure the host's UTS namespace is not shared +[PASS] 5.20 - Ensure that the host's UTS namespace is not shared (Automated) 
-[PASS] 5.21  - Ensure the default seccomp profile is not Disabled +[PASS] 5.21 - Ensure the default seccomp profile is not Disabled (Automated) 
-[NOTE] 5.22  - Ensure docker exec commands are not used with privileged option +[NOTE] 5.22 - Ensure that docker exec commands are not used with the privileged option (Automated) 
-[NOTE] 5.23  - Ensure that docker exec commands are not used with the user=root option +[NOTE] 5.23 - Ensure that docker exec commands are not used with the user=root option (Manual) 
-[PASS] 5.24  - Ensure that cgroup usage is confirmed +[PASS] 5.24 - Ensure that cgroup usage is confirmed (Automated) 
-[WARN] 5.25  - Ensure that the container is restricted from acquiring additional privileges +[PASS] 5.25 - Ensure that the container is restricted from acquiring additional privileges (Automated) 
-[WARN]      * Privileges not restricted: mysql +[WARN] 5.26 - Ensure that container health is checked at runtime (Automated) 
-[WARN] 5.26  - Ensure that container health is checked at runtime +[WARN]       * Health check not set: mysql 
-[WARN]      * Health check not set: mysql +[INFO] 5.27 - Ensure that Docker commands always make use of the latest version of their image (Manual) 
-[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 (Automated) 
-[WARN] 5.28  - Ensure that the PIDs cgroup limit is used +[WARN]       * PIDs limit not set: mysql 
-[WARN]      * PIDs limit not set: mysql +[INFO] 5.29 - Ensure that Docker's default bridge 'docker0' is not used (Manual) 
-[INFO] 5.29  - Ensure that Docker's default bridge 'docker0' is not used +[INFO]       * Container in docker0 network: mysql 
-[INFO]      * Container in docker0 network: mysql +[PASS] 5.30 - Ensure that the host's user namespaces are not shared (Automated) 
-[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 (Automated)
-[PASS] 5.31  - Ensure that the Docker socket is not mounted inside any containers+
 ... ...
 </code> </code>
Ligne 2022: Ligne 1006:
 Les problèmes de sécurité qu'il convient à résoudre sont indiqués par les annotations **[WARN]**. Les problèmes de sécurité qu'il convient à résoudre sont indiqués par les annotations **[WARN]**.
  
-====7.1 - [WARN] 5.1  - Ensure AppArmor Profile is Enabled====+====[WARN] 5.1 - Ensure that, if applicable, an AppArmor Profile is enabled (Automated)====
  
 Cet avertissement est présent parce que le conteneur n'utilise pas AppArmor. Cet avertissement est présent parce que le conteneur n'utilise pas AppArmor.
Ligne 2028: Ligne 1012:
 Pour plus d'informations, consultez cette **[[https://cloud.google.com/container-optimized-os/docs/how-to/secure-apparmor|page]]**. Pour plus d'informations, consultez cette **[[https://cloud.google.com/container-optimized-os/docs/how-to/secure-apparmor|page]]**.
  
-====7.2 - [WARN] 5.2  - Ensure SELinux security options are set, if applicable====+====[WARN] 5.2 - Ensure that, if applicable, SELinux security options are set (Automated)====
  
 Cet avertissement est présent parce que le conteneur n'utilise pas SELinux. Cet avertissement est présent parce que le conteneur n'utilise pas SELinux.
Ligne 2034: Ligne 1018:
 Pour plus d'informations, consultez cette **[[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_atomic_host/7/html/container_security_guide/docker_selinux_security_policy|page]]**. Pour plus d'informations, consultez cette **[[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_atomic_host/7/html/container_security_guide/docker_selinux_security_policy|page]]**.
  
-====7.3 - [WARN] 5.10  - Ensure memory usage for container is limited====+====[WARN] 5.10 - Ensure that the memory usage for containers is limited (Automated)====
  
 Cet avertissement est du au fait que les conteneurs ont automatiquement accès à la totalité de la RAM de l'hôte Docker : Cet avertissement est du au fait que les conteneurs ont automatiquement accès à la totalité de la RAM de l'hôte Docker :
  
 <code> <code>
-root@debian9:~# docker run -d -p 8081:80 nginx+root@manager:~# docker run -d -p 8081:80 nginx
 b04b2a6f0dd93da21a8b7640afc319406e42868a141f90936dbcf52ab5bffb0d b04b2a6f0dd93da21a8b7640afc319406e42868a141f90936dbcf52ab5bffb0d
-root@debian9:~# docker stats+root@manager:~# docker stats
 CONTAINER ID        NAME                 CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS 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 b04b2a6f0dd9        dazzling_blackburn   0.00%               1.789MiB / 1.957GiB   0.09%               2.38kB / 0B         0B / 0B             2
Ligne 2050: Ligne 1034:
  
 <code> <code>
-root@debian9:~# docker ps -a +root@manager:~/docker-bench-security# docker run -d -p 8081:80 nginx 
-CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                        PORTS                  NAMES +Unable to find image 'nginx:latest' locally 
-b04b2a6f0dd9        nginx               "nginx -g 'daemon of…"   About a minute ago   Up About a minute             0.0.0.0:8081->80/tcp   dazzling_blackburn +sha256:10d1f5b58f74683ad34eb29287e07dab1e90f10af243f151bb50aa5dbb4d62ee: Pulling from library/nginx 
-5b31fe1e13bc        ubuntu              "bash -c ':() { : | …"   14 minutes ago       Exited (254) 13 minutes ago                          pensive_fermat +1f7ce2fa46ab: Pull complete  
-7788c67c3b69        mysql               "docker-entrypoint.s…"   About an hour ago    Exited (255) 18 minutes ago   3306/tcp, 33060/tcp    mysql +9b16c94bb686: Pull complete  
-root@debian9:~# docker rm -f b0 +9a59d19f9c5b: Pull complete  
-b0 +9ea27b074f71: Pull complete  
-root@debian9:~# docker run -d -p 8081:80 --memory="256m" nginx +c6edf33e2524: Pull complete  
-095472e5096a57277230ff94822d9bd0ad479ad26a33cbf83ec381cdb02910e1 +84b1ff10387b: Pull complete  
-root@debian9:~# docker stats +517357831967: Pull complete  
-CONTAINER ID        NAME                     CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS +Digest: sha256:10d1f5b58f74683ad34eb29287e07dab1e90f10af243f151bb50aa5dbb4d62ee 
-095472e5096a        affectionate_goldstine   0.00%               1.805MiB / 256MiB   0.70%               2.38kB / 0B         0B / 0B             2+Status: Downloaded newer image for nginx@sha256:10d1f5b58f74683ad34eb29287e07dab1e90f10af243f151bb50aa5dbb4d62ee 
 +Tagging nginx@sha256:10d1f5b58f74683ad34eb29287e07dab1e90f10af243f151bb50aa5dbb4d62ee as nginx:latest 
 +e14d5112c2feb71e6f37252bcf99d03603d6b7a3e200bff0d55611a0e9a25e2b 
 + 
 +root@manager:~/docker-bench-security# docker stats 
 +CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS 
 +e14d5112c2fe        strange_bassi       0.00%               2.215MiB / 1.957GiB   0.11%               2.16kB / 0B         0B / 0B             2 
 +e503dd98f889        mysql               0.51%               351.3MiB / 1.957GiB   17.53%              5.54kB / 0B         167MB / 118MB       37 
 +^C 
 +</code> 
 + 
 +Supprimez le conteneur et re-créez-le avec une limite de mémoire : 
 + 
 +<code> 
 +root@manager:~/docker-bench-security# docker ps -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                  NAMES 
 +e14d5112c2fe        nginx               "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:8081->80/tcp   strange_bassi 
 +e503dd98f889        mysql               "docker-entrypoint.s…"   18 minutes ago       Up 7 minutes        3306/tcp, 33060/tcp    mysql 
 + 
 +root@manager:~/docker-bench-security# docker rm -f e14 
 +e14 
 + 
 +root@manager:~/docker-bench-security# docker run -d -p 8081:80 --memory="256m" nginx 
 +38e91e096c83f7cbe78089617a4d70110bd273f53339f8fed8df2503d3cd65ca 
 + 
 +root@manager:~/docker-bench-security# docker stats 
 +CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS 
 +38e91e096c83        sweet_vaughan       0.00%               2.223MiB / 256MiB     0.87%               2.16kB / 0B         0B / 0B             2 
 +e503dd98f889        mysql               0.49%               351.3MiB / 1.957GiB   17.53%              5.61kB / 0B         167MB / 118MB       37
 ^C ^C
 </code> </code>
Ligne 2067: Ligne 1079:
 Pour plus d'informations, consultez cette **[[https://docs.docker.com/config/containers/resource_constraints/|page]]**. Pour plus d'informations, consultez cette **[[https://docs.docker.com/config/containers/resource_constraints/|page]]**.
  
-====7.4 - [WARN] 5.11  - Ensure CPU priority is set appropriately on the container====+====[WARN] 5.11 - Ensure that CPU priority is set appropriately on containers (Automated)====
  
 Cet avertissement est du au fait que les conteneurs ont automatiquement accès à tous les CPU de l'hôte Docker. Pour limiter cet accès, plusieurs options sont possibles dont le plus couramment utilisée est **--cpu-shares**. Cet avertissement est du au fait que les conteneurs ont automatiquement accès à tous les CPU de l'hôte Docker. Pour limiter cet accès, plusieurs options sont possibles dont le plus couramment utilisée est **--cpu-shares**.
Ligne 2075: Ligne 1087:
 Pour plus d'informations, consultez cette **[[https://docs.docker.com/config/containers/resource_constraints/|page]]**. Pour plus d'informations, consultez cette **[[https://docs.docker.com/config/containers/resource_constraints/|page]]**.
  
-====7.5 - [WARN] 5.12  - Ensure the container's root filesystem is mounted as read only====+====[WARN] 5.12 - Ensure that the container's root filesystem is mounted as read only (Automated)====
  
 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. 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.
Ligne 2082: Ligne 1094:
  
 <code> <code>
-root@debian9:~/docker-bench-security# docker container exec mysql touch /write_a_file+root@manager:~/docker-bench-security# docker container exec mysql touch /write_a_file
 </code> </code>
  
Ligne 2088: Ligne 1100:
  
 <code> <code>
-root@debian9:~/docker-bench-security# docker container diff mysql +root@manager:~/docker-bench-security# docker diff mysql
-A /write_a_file+
 C /run C /run
 C /run/mysqld C /run/mysqld
 +A /run/mysqld/mysqld.pid
 A /run/mysqld/mysqld.sock A /run/mysqld/mysqld.sock
 A /run/mysqld/mysqld.sock.lock A /run/mysqld/mysqld.sock.lock
 A /run/mysqld/mysqlx.sock A /run/mysqld/mysqlx.sock
 A /run/mysqld/mysqlx.sock.lock A /run/mysqld/mysqlx.sock.lock
-A /run/mysqld/mysqld.pid+A /write_a_file
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que la sortie indique les changements apportés au conteneur. **Important** : Notez que la sortie indique les changements apportés au conteneur.
 </WRAP> </WRAP>
Ligne 2106: Ligne 1118:
  
 <code> <code>
-root@debian9:~/docker-bench-security# docker container stop mysql+root@manager:~/docker-bench-security# docker stop mysql
 mysql mysql
-root@debian9:~/docker-bench-security# docker container rm mysql+ 
 +root@manager:~/docker-bench-security# docker rm  mysql
 mysql mysql
 </code> </code>
Ligne 2115: Ligne 1128:
  
 <code> <code>
-root@debian9:~/docker-bench-security# docker container run -d --name mysql --read-only -v /var/lib/mysql -v /tmp -v /var/run/mysqld -e MYSQL_ROOT_PASSWORD=password mysql +root@manager:~/docker-bench-security# docker run -d --name mysql --read-only -v /var/lib/mysql -v /tmp -v /var/run/mysqld -e MYSQL_ROOT_PASSWORD=password mysql 
-7788c67c3b692515f63f4659a8f40af397bfbde97485e2e40c500c16b158045b +711ab28bdfb41220c84246c1658bcde398681a78291bbbe7d3bbfd9bc317d41b
-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>
  
Ligne 2125: Ligne 1135:
  
 <code> <code>
-root@debian9:~/docker-bench-security# docker container exec mysql touch /write_a_file+root@manager:~/docker-bench-security# docker container exec mysql touch /write_a_file
 touch: cannot touch '/write_a_file': Read-only file system touch: cannot touch '/write_a_file': Read-only file system
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez l'erreur **touch: cannot touch '/write_a_file': Read-only file system**. **Important** : Notez l'erreur **touch: cannot touch '/write_a_file': Read-only file system**.
 </WRAP> </WRAP>
Ligne 2136: Ligne 1146:
  
 <code> <code>
-root@debian9:~/docker-bench-security# docker container diff mysql +root@manager:~/docker-bench-security# docker container diff mysql 
-root@debian9:~/docker-bench-security# +root@manager:~/docker-bench-security# 
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que la commande ne retourne aucune sortie. En effet le conteneur étant en lecture seule, aucun changement ne peut intervenir. **Important** : Notez que la commande ne retourne aucune sortie. En effet le conteneur étant en lecture seule, aucun changement ne peut intervenir.
 </WRAP> </WRAP>
  
-====7.6 - [WARN] 5.14  - Ensure 'on-failure' container restart policy is set to '5'====+====[WARN] 5.14 - Ensure that the 'on-failure' container restart policy is set to '5' (Automated)====
  
 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 conteneur. Cette politique peut être mise en place au démarrage du conteneur, par exemple : 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 conteneur. Cette politique peut être mise en place au démarrage du conteneur, par exemple :
Ligne 2152: Ligne 1162:
 Pour plus d'informations, consultez cette **[[https://docs.docker.com/config/containers/start-containers-automatically/|page]]**. Pour plus d'informations, consultez cette **[[https://docs.docker.com/config/containers/start-containers-automatically/|page]]**.
  
-====7.7 - [WARN] 5.25  - Ensure the container is restricted from acquiring additional privileges==== +====[WARN] 5.26 - Ensure that container health is checked at runtime (Automated)====
- +
-Pour complémenter la configuration précédemment mise en place, il convient de lancer le conteneur en utilisant l'option **--security-opt** : +
- +
-  # 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 +
- +
-Pour plus d'informations, consultez cette **[[https://docs.docker.com/engine/reference/run/|page]]**. +
- +
-====7.8 - [WARN] 5.26  - Ensure container health is checked at runtime====+
  
 Voir l'avertissement 4.6. Voir l'avertissement 4.6.
  
-====7.9 - [WARN] 5.28  - Ensure PIDs cgroup limit is used====+====[WARN] 5.28 - Ensure that the PIDs cgroup limit is used (Automated)====
  
 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 : 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 :
  
 <code> <code>
-root@debian9:~/docker-bench-security# docker run -u 1000 ubuntu bash -c ":() { : | : & }; :; while [[ true ]]; do sleep 1; done"+root@manager:~/docker-bench-security# docker run -u 1000 ubuntu bash -c ":() { : | : & }; :; while [[ true ]]; do sleep 1; done"
 </code> </code>
  
Ligne 2175: Ligne 1177:
  
 <code> <code>
-root@debian9:~docker ps -+root@manager:~/docker-bench-security# docker run -u 1000 --pids-limit 100 ubuntu bash -c ":() { : | : & }; :; while [[ true ]]; do sleep 1; done" 
-CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS                 NAMES +Unable to find image 'ubuntu:latest' locally 
-05b11e44e595        ubuntu              "bash -c ':() { : | …"   6 minutes ago       Exited (255) 3 minutes ago                         upbeat_turing +sha256:6042500cf4b44023ea1894effe7890666b0c5c7871ed83a97c36c76ae560bb9b: Pulling from library/ubuntu 
-... +a48641193673: Pull complete  
-root@debian9:~# docker rm 05 +Digest: sha256:6042500cf4b44023ea1894effe7890666b0c5c7871ed83a97c36c76ae560bb9b 
-05 +Status: Downloaded newer image for ubuntu@sha256:6042500cf4b44023ea1894effe7890666b0c5c7871ed83a97c36c76ae560bb9b 
-root@debian9:~# docker run -u 1000 --pids-limit 100 ubuntu bash -c ":() { : | : & }; :; while [[ true ]]; do sleep 1; done"+Tagging ubuntu@sha256:6042500cf4b44023ea1894effe7890666b0c5c7871ed83a97c36c76ae560bb9b as ubuntu:latest
 environment: fork: retry: Resource temporarily unavailable environment: fork: retry: Resource temporarily unavailable
 environment: fork: retry: Resource temporarily unavailable environment: fork: retry: Resource temporarily unavailable
Ligne 2188: Ligne 1190:
 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+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 
 +^P^Q
 </code> </code>
  
Ligne 2196: Ligne 1204:
  
 <code> <code>
-root@debian9:~docker ps -+root@manager:~/docker-bench-security# docker rm -f `docker ps -aq` 
-CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                  NAMES +db5ae43c3e55 
-095472e5096a        nginx               "nginx -g 'daemon of…"   13 minutes ago      Up 13 minutes                 0.0.0.0:8081->80/tcp   affectionate_goldstine +f3b2528fbac0 
-5b31fe1e13bc        ubuntu              "bash -c ':() { : | …"   28 minutes ago      Exited (254) 28 minutes ago                          pensive_fermat +711ab28bdfb4 
-7788c67c3b69        mysql               "docker-entrypoint.s…"   About an hour ago   Exited (255) 33 minutes ago   3306/tcp, 33060/tcp    mysql + 
-root@debian9:~# docker stop 095 +root@manager:~/docker-bench-security# docker ps -a 
-095 +CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
-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>
  
Ligne 2214: Ligne 1216:
  
 <code> <code>
-root@debian9:~# cd docker-bench-security/ +root@manager:~/docker-bench-security# docker 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 
-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 +f49d1ffdeae2e83435e8cc3a2e03fb2e0b33e5609d266e5a3403ff8859e5d122 
-df54974ebc11fe357f6e8e9b0f8499aee2658af435e32a45058a1e49fcd3dc24 + 
-root@debian9:~/docker-bench-security# docker ps -a+root@manager:~/docker-bench-security# docker ps -a
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
-df54974ebc11        mysql               "docker-entrypoint.s…"   seconds ago       Up seconds        3306/tcp, 33060/tcp   mysql+f49d1ffdeae2        mysql               "docker-entrypoint.s…"   16 seconds ago      Up 15 seconds       3306/tcp, 33060/tcp   mysql
 </code> </code>
  
Ligne 2225: Ligne 1227:
  
 <code> <code>
-root@debian9:~/docker-bench-security# ./docker-bench-security.sh+root@manager:~/docker-bench-security# ./docker-bench-security.sh
 ... ...
-[INFO] 5 - Container Runtime +[PASS] 5.2 - Ensure that, if applicable, SELinux security options are set (Automated) 
-[WARN] 5.1  - Ensure that, if applicable, an AppArmor Profile is enabled  +[PASS] 5.10 - Ensure that the memory usage for containers is limited (Automated) 
-[WARN]      * No AppArmorProfile Found: mysql +[PASS] 5.11 - Ensure that CPU priority is set appropriately on containers (Automated) 
-[PASS] 5.2  - Ensure that, if applicable, SELinux security options are set +[PASS] 5.12 - Ensure that the container's root filesystem is mounted as read only (Automated) 
-[PASS] 5.3  - Ensure Linux Kernel Capabilities are restricted within containers +[PASS] 5.14 - Ensure that the 'on-failure' container restart policy is set to '5' (Automated) 
-[PASS] 5.4  - Ensure that privileged containers are not used +[PASS] 5.28 - Ensure that the PIDs cgroup limit is used (Automated)
-[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 network: mysql +
-[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>
Ligne 2281: Ligne 1253:
  
 <code> <code>
-root@debian9:~# echo $DOCKER_CONTENT_TRUST+root@manager:~# echo $DOCKER_CONTENT_TRUST
 1 1
 </code> </code>
Ligne 2288: Ligne 1260:
  
 <code> <code>
-root@debian9:~# export DOCKER_CONTENT_TRUST=1 +root@manager:~# export DOCKER_CONTENT_TRUST=1 
-root@debian9:~# echo $DOCKER_CONTENT_TRUST+root@manager:~# echo $DOCKER_CONTENT_TRUST
 1 1
 </code> </code>
Ligne 2298: Ligne 1270:
  
 <code> <code>
-root@debian9:~# docker login+root@manager:~# 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. 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> Username: <votre_compte>
Ligne 2312: Ligne 1284:
  
 <code> <code>
-root@debian9:~# docker image pull i2tch/docker:unsigned+root@manager:~# 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 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>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **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. **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> </WRAP>
Ligne 2323: Ligne 1295:
  
 <code> <code>
-root@debian9:~# docker image pull centos+root@manager:~# docker image pull centos
 Using default tag: latest Using default tag: latest
 Pull (1 of 1): centos:latest@sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9 Pull (1 of 1): centos:latest@sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9
Ligne 2337: Ligne 1309:
  
 <code> <code>
-root@debian9:~# docker images+root@manager:~# docker images
 REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
 ubuntu              latest              775349758637        9 days ago          64.2MB ubuntu              latest              775349758637        9 days ago          64.2MB
Ligne 2351: Ligne 1323:
  
 <code> <code>
-root@debian9:~# docker image pull --disable-content-trust=true i2tch/docker:unsigned+root@manager:~# docker image pull --disable-content-trust=true i2tch/docker:unsigned
 unsigned: Pulling from i2tch/docker unsigned: Pulling from i2tch/docker
 10d70a43a9f9: Pull complete  10d70a43a9f9: Pull complete 
Ligne 2367: Ligne 1339:
 docker.io/i2tch/docker:unsigned docker.io/i2tch/docker:unsigned
  
-root@debian9:~# docker image ls+root@manager:~# docker image ls
 REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
 ubuntu              latest              775349758637        9 days ago          64.2MB ubuntu              latest              775349758637        9 days ago          64.2MB
Ligne 2376: Ligne 1348:
 i2tch/docker        unsigned            9b915a241e29        3 years ago         212MB i2tch/docker        unsigned            9b915a241e29        3 years ago         212MB
  
-root@debian9:~# docker rmi i2tch/docker:unsigned+root@manager:~# docker rmi i2tch/docker:unsigned
 Untagged: i2tch/docker:unsigned Untagged: i2tch/docker:unsigned
 Untagged: i2tch/docker@sha256:885fc831cb853700ded04029b4fa70ed502947042f6f154e432395cb35619d11 Untagged: i2tch/docker@sha256:885fc831cb853700ded04029b4fa70ed502947042f6f154e432395cb35619d11
Ligne 2405: Ligne 1377:
  
 <code> <code>
-root@debian9:~# docker image tag alpine:latest <votre_compte>/docker:alpine+root@manager:~# docker image tag alpine:latest <votre_compte>/docker:alpine
 </code> </code>
  
Ligne 2411: Ligne 1383:
  
 <code> <code>
-root@debian9:~# docker image ls+root@manager:~# docker image ls
 REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
 ubuntu                 latest              775349758637        9 days ago          64.2MB ubuntu                 latest              775349758637        9 days ago          64.2MB
Ligne 2427: Ligne 1399:
  
 <code> <code>
-root@debian9:~# docker push <votre_compte>/docker:alpine+root@manager:~# docker push <votre_compte>/docker:alpine
 The push refers to repository [docker.io/<votre_compte>/docker] The push refers to repository [docker.io/<votre_compte>/docker]
 77cae8ab23bf: Mounted from library/alpine  77cae8ab23bf: Mounted from library/alpine 
Ligne 2449: Ligne 1421:
  
 <code> <code>
-root@debian9:~# ls -l ~/.docker/trust+root@manager:~# ls -l ~/.docker/trust
 total 8 total 8
 drwx------ 2 root root 4096 nov.  10 14:49 private drwx------ 2 root root 4096 nov.  10 14:49 private
 drwx------ 3 root root 4096 nov.   8 13:48 tuf drwx------ 3 root root 4096 nov.   8 13:48 tuf
  
-root@debian9:~# ls -l ~/.docker/trust/private+root@manager:~# ls -l ~/.docker/trust/private
 total 8 total 8
 -rw------- 1 root root 447 nov.  10 14:49 168c754ea8f36ce7fbcbe2299b6d91fc0f4d594c9ed9b86916687b618d8438ac.key -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 416 nov.  10 14:49 192fc7ed9543ad4bceec58886ab1d605b7433c35f7462d7343d0780d8fddf1db.key
-root@debian9:~# cat ~/.docker/trust/private/168c754ea8f36ce7fbcbe2299b6d91fc0f4d594c9ed9b86916687b618d8438ac.key +root@manager:~# cat ~/.docker/trust/private/168c754ea8f36ce7fbcbe2299b6d91fc0f4d594c9ed9b86916687b618d8438ac.key 
 -----BEGIN ENCRYPTED PRIVATE KEY----- -----BEGIN ENCRYPTED PRIVATE KEY-----
 gun: docker.io/i2tch/docker gun: docker.io/i2tch/docker
Ligne 2471: Ligne 1443:
 -----END ENCRYPTED PRIVATE KEY----- -----END ENCRYPTED PRIVATE KEY-----
  
-root@debian9:~# cat ~/.docker/trust/private/192fc7ed9543ad4bceec58886ab1d605b7433c35f7462d7343d0780d8fddf1db.key +root@manager:~# cat ~/.docker/trust/private/192fc7ed9543ad4bceec58886ab1d605b7433c35f7462d7343d0780d8fddf1db.key 
 -----BEGIN ENCRYPTED PRIVATE KEY----- -----BEGIN ENCRYPTED PRIVATE KEY-----
 role: root role: root
Ligne 2489: Ligne 1461:
  
 <code> <code>
-root@debian9:~# mkdir nottrusted +root@manager:~# mkdir nottrusted 
-root@debian9:~# cd nottrusted/ + 
-root@debian9:~/nottrusted# vi Dockerfile +root@manager:~# cd nottrusted/ 
-root@debian9:~/nottrusted# cat Dockerfile+ 
 +root@manager:~/nottrusted# vi Dockerfile 
 + 
 +root@manager:~/nottrusted# cat Dockerfile
 FROM docker/trusttest:latest FROM docker/trusttest:latest
 RUN echo RUN echo
Ligne 2500: Ligne 1475:
  
 <code> <code>
-root@debian9:~/nottrusted# docker build -t <votre_compte>/docker:nottrusted .+root@manager:~/nottrusted# docker build -t <votre_compte>/docker:nottrusted .
 Sending build context to Docker daemon  Sending build context to Docker daemon 
  
Ligne 2509: Ligne 1484:
  
 <code> <code>
-root@debian9:~/nottrusted# docker build --disable-content-trust -t <votre_compte>/docker:nottrusted .+root@manager:~/nottrusted# docker build --disable-content-trust -t <votre_compte>/docker:nottrusted .
 Sending build context to Docker daemon  2.048kB Sending build context to Docker daemon  2.048kB
 Step 1/2 : FROM docker/trusttest:latest Step 1/2 : FROM docker/trusttest:latest
Ligne 2531: Ligne 1506:
  
 <code> <code>
-root@debian9:~/nottrusted# docker push <votre_compte>/docker:nottrusted+root@manager:~/nottrusted# docker push <votre_compte>/docker:nottrusted
 The push refers to repository [docker.io/<votre_compte>/docker] The push refers to repository [docker.io/<votre_compte>/docker]
 5f70bf18a086: Layer already exists  5f70bf18a086: Layer already exists 
Ligne 2541: Ligne 1516:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **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.  **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. 
 </WRAP> </WRAP>
Ligne 2550: Ligne 1525:
  
 <code> <code>
-root@debian9:~/nottrusted# docker tag <votre_compte>/docker:nottrusted <votre_compte>/otherimage:latest +root@manager:~/nottrusted# docker tag <votre_compte>/docker:nottrusted <votre_compte>/otherimage:latest 
-root@debian9:~/nottrusted# docker images+ 
 +root@manager:~/nottrusted# docker images
 REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
 <votre_compte>/docker        nottrusted          686e85ee76b8        9 minutes ago       5.03MB <votre_compte>/docker        nottrusted          686e85ee76b8        9 minutes ago       5.03MB
Ligne 2563: Ligne 1539:
 docker/trusttest             latest              cc7629d1331a        4 years ago         5.03MB docker/trusttest             latest              cc7629d1331a        4 years ago         5.03MB
  
-root@debian9:~/nottrusted# docker push docker.io/<votre_compte>/otherimage:latest+root@manager:~/nottrusted# docker push docker.io/<votre_compte>/otherimage:latest
 The push refers to repository [docker.io/<votre_compte>/otherimage] The push refers to repository [docker.io/<votre_compte>/otherimage]
 5f70bf18a086: Mounted from <votre_compte>/docker  5f70bf18a086: Mounted from <votre_compte>/docker 
Ligne 2576: Ligne 1552:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **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.  **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> </WRAP>
Ligne 2583: Ligne 1559:
  
 <code> <code>
-root@debian9:~/nottrusted# ls -l ~/.docker/trust/private+root@manager:~/nottrusted# ls -l ~/.docker/trust/private
 total 12 total 12
 -rw------- 1 root root 447 nov.  10 14:49 168c754ea8f36ce7fbcbe2299b6d91fc0f4d594c9ed9b86916687b618d8438ac.key -rw------- 1 root root 447 nov.  10 14:49 168c754ea8f36ce7fbcbe2299b6d91fc0f4d594c9ed9b86916687b618d8438ac.key
Ligne 2593: Ligne 1569:
  
 <code> <code>
-root@debian9:~/nottrusted# docker trust inspect <votre_compte>/docker:alpine+root@manager:~/nottrusted# docker trust inspect <votre_compte>/docker:alpine
 [ [
     {     {
Ligne 2627: Ligne 1603:
     }     }
 ] ]
-root@debian9:~/nottrusted# docker trust inspect <votre_compte>/docker:nottrusted+root@manager:~/nottrusted# docker trust inspect <votre_compte>/docker:nottrusted
 [ [
     {     {
Ligne 2663: Ligne 1639:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que les clefs utilisées sont les mêmes pour les deux images.  **Important** : Notez que les clefs utilisées sont les mêmes pour les deux images. 
 </WRAP> </WRAP>
  
 <code> <code>
-root@debian9:~/nottrusted# docker trust inspect <votre_compte>/otherimage:latest+root@manager:~/nottrusted# docker trust inspect <votre_compte>/otherimage:latest
 [ [
     {     {
Ligne 2704: Ligne 1680:
 </code> </code>
  
-<WRAP center round important 60%>+<WRAP center round important 50%>
 **Important** : Notez que les clefs utilisées sont différentes.  **Important** : Notez que les clefs utilisées sont différentes. 
 </WRAP> </WRAP>
Ligne 2713: Ligne 1689:
  
 <code> <code>
-root@debian9:~# docker trust revoke <votre_compte>/docker:alpine+root@manager:~# docker trust revoke <votre_compte>/docker:alpine
 Enter passphrase for repository key with ID 168c754:  Enter passphrase for repository key with ID 168c754: 
 Successfully deleted signature for <votre_compte>/docker:alpine Successfully deleted signature for <votre_compte>/docker:alpine
-root@debian9:~# docker trust inspect <votre_compte>/docker:alpine+root@manager:~# docker trust inspect <votre_compte>/docker:alpine
 [ [
     {     {
Ligne 2744: Ligne 1720:
 </code> </code>
  
 +<WRAP center round important 50%>
 +**Important** : Il existe un autre mécanisme de signatures cryptographiques qui permet de certifier le contenu des images mises à disposition sur une Registry. Appelé **Notary**, ce système a été développé par la communauté Docker et intègre une partie de la spécification de **[[https://theupdateframework.io/|The Update Framework]]** (TUF). Pour plus d'informations, consultez cet **[[https://blog.octo.com/la-signature-dimages-docker-sur-une-registry-avec-notary/#:~:text=Notary%20est%20un%20m%C3%A9canisme%20de,environnement%20de%20production%20par%20exemple|article]]**.
 +</WRAP>
 +
 +=====LAB #9 - Sécurisation du Socket du Daemon Docker=====
 +
 +Par défaut le daemon Docker peut être contacté en utilisant un socket Unix local ce qui implique qu'il faut une connexion SSH vers l'hôte Docker. Docker peut cependant utiliser un socket http.
 +
 +Pour pouvoir contacter de daemon Docker via le réseau d'une manière sécurisée il faut installer, configurer et activer le support TLS grâce aux options **tlsverify** et **tlscacert**.
 +
 +La configuration implique que :
 +
 +  * pour le daemon Docker, seules les connections en provenance de clients authentifiés par un certificat signé par l'**[[https://fr.wikipedia.org/wiki/Autorit%C3%A9_de_certification|autorité de certification]]** (CA) du serveur seront acceptées,
 +  * pour le client, il ne peut que connecter aux serveurs ayant un certificat signé par le CA du serveur.
 +
 +La mise en place nécessite **openssl** :
 +
 +<code>
 +root@manager:~# which openssl
 +/usr/bin/openssl
 +</code>
 +
 +====9.1 - Création du Certificat de l'Autorité de Certification====
 +
 +Commencez par créer une clef privée **ca-key.pem** pour le CA :
 +
 +<code>
 +root@manager:~# openssl genrsa -aes256 -out ca-key.pem 4096
 +Generating RSA private key, 4096 bit long modulus
 +......................................................................................................................++++
 +...............................................................................................................................................................++++
 +e is 65537 (0x010001)
 +Enter pass phrase for ca-key.pem:fenestros
 +Verifying - Enter pass phrase for ca-key.pem:fenestros
 +</code>
 +
 +Ensuite, créez le certificat **ca.pem** du CA :
 +
 +<code>
 +root@manager:~# openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
 +Enter pass phrase for ca-key.pem:fenestros
 +You are about to be asked to enter information that will be incorporated
 +into your certificate request.
 +What you are about to enter is what is called a Distinguished Name or a DN.
 +There are quite a few fields but you can leave some blank
 +For some fields there will be a default value,
 +If you enter '.', the field will be left blank.
 +-----
 +Country Name (2 letter code) [AU]:GB
 +State or Province Name (full name) [Some-State]:SURREY
 +Locality Name (eg, city) []:ADDLESTONE
 +Organization Name (eg, company) [Internet Widgits Pty Ltd]:I2TCH LIMITED
 +Organizational Unit Name (eg, section) []:TRAINING
 +Common Name (e.g. server FQDN or YOUR name) []:manager.i2tch.loc
 +Email Address []:infos@i2tch.co.uk
 +</code>
 +
 +====9.2 - Création du Certificat du Serveur Hôte du Daemon Docker====
 +
 +Les clefs du CA ayant été créées, créez une clef **server-key.pem** pour le serveur hôte du daemon Docker :
 +
 +<code>
 +root@manager:~# openssl genrsa -out server-key.pem 4096
 +Generating RSA private key, 4096 bit long modulus
 +.................................................................................................................................++++
 +...........................++++
 +e is 65537 (0x010001)
 +</code>
 +
 +Créez ensuite un **[[https://fr.wikipedia.org/wiki/Demande_de_signature_de_certificat|Certificate Signing Request]]** (CSR) **server.csr** :
 +
 +<code>
 +root@manager:~# echo $HOSTNAME
 +manager.i2tch.loc
 +root@manager:~# openssl req -subj "/CN=`echo $HOSTNAME`" -sha256 -new -key server-key.pem -out server.csr
 +</code>
 +
 +Une connexion TLS peut être effectuée en utilisant un FQDN ou une adresse IP. Pour cette raison, créez le fichier **extfile.cnf** :
 +
 +<code>
 +root@manager:~# echo subjectAltName = DNS:`echo $HOSTNAME`,IP:10.0.2.62,IP:127.0.0.1 >> extfile.cnf
 +</code>
 +
 +Fixez l'attribut étendu de l'utilisation de la clef du daemon à **serverAuth** :
 +
 +<code>
 +root@manager:~# echo extendedKeyUsage = serverAuth >> extfile.cnf
 +</code>
 +
 +Vérifiez que votre fichier a été correctement créé :
 +
 +<code>
 +root@manager:~# cat extfile.cnf 
 +subjectAltName = DNS:manager.i2tch.loc,IP:10.0.2.62,IP:127.0.0.1
 +extendedKeyUsage = serverAuth
 +</code>
 +
 +Signez maintenant le CSR du serveur **server.csr** avec la clef privée du CA **ca-key.pem** afin de produire le certificat du serveur **server-cert.pem** :
 +
 +<code>
 +root@manager:~# openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
 +Signature ok
 +subject=CN = manager.i2tch.loc
 +Getting CA Private Key
 +Enter pass phrase for ca-key.pem:fenestros
 +</code>
 +
 +====9.3 - Création du Certificat du Client====
 +
 +Créez ensuite la clef privée **key.pem** du client qui se connectera au daemon à partir du réseau :
 +
 +<code>
 +root@manager:~# openssl genrsa -out key.pem 4096
 +Generating RSA private key, 4096 bit long modulus
 +...................................................................................................................................++++
 +...............++++
 +e is 65537 (0x010001)
 +</code>
 +
 +Modifiez l'entrée pour l'adresse 10.0.2.45 dans le fichier **/etc/hosts** du manager :
 +
 +<code>
 +root@manager:~# vi /etc/hosts
 +root@manager:~# cat /etc/hosts
 +127.0.0.1 localhost
 +10.0.2.46 debian11.i2tch.loc debian11
 +10.0.2.45 myregistry.i2tch.loc    myregistry
 +10.0.2.62 manager.i2tch.loc manager
 +10.0.2.63 worker1.i2tch.loc worker1
 +10.0.2.64 worker2.i2tch.loc worker2
 +
 +# The following lines are desirable for IPv6 capable hosts
 +::1     localhost ip6-localhost ip6-loopback
 +ff02::1 ip6-allnodes
 +ff02::2 ip6-allrouters
 +</code>
 +
 +Créez ensuite le CSR du client **client.csr** :
 +
 +<code>
 +root@manager:~# openssl req -subj '/CN=myregistry.i2tch.loc' -new -key key.pem -out client.csr
 +</code>
 +
 +Fixez l'attribut étendu de l'utilisation de la clef du client à **clientAuth** :
 +
 +<code>
 +root@manager:~# echo extendedKeyUsage = clientAuth > extfile-client.cnf
 +</code>
 +
 +Signez le CSR du client **client.csr** avec la clef privée du CA **ca-key.pem** afin de créer le certificat du client **cert.pem** :
 +
 +<code>
 +root@manager:~# openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf
 +Signature ok
 +subject=CN = myregistry.i2tch.loc
 +Getting CA Private Key
 +Enter pass phrase for ca-key.pem:fenestros
 +</code>
 +
 +Vérifiez la présence des fichiers générés :
 +
 +<code>
 +root@manager:~# ls -l
 +total 60
 +-rw------- 1 root root 3326 nov.  11 10:53 ca-key.pem
 +-rw-r--r-- 1 root root 2163 nov.  11 10:57 ca.pem
 +-rw-r--r-- 1 root root   17 nov.  11 11:15 ca.srl
 +-rw-r--r-- 1 root root 1907 nov.  11 11:15 cert.pem
 +-rw-r--r-- 1 root root 1594 nov.  11 11:12 client.csr
 +drwxr-xr-x 5 root root 4096 nov.   8 12:58 docker-bench-security
 +-rw-r--r-- 1 root root 1707 nov.   8 12:35 docker-stack.yml
 +-rw-r--r-- 1 root root   30 nov.  11 11:13 extfile-client.cnf
 +-rw-r--r-- 1 root root   95 nov.  11 11:06 extfile.cnf
 +-rw------- 1 root root 3243 nov.  11 11:10 key.pem
 +drwxr-xr-x 2 root root 4096 nov.  10 17:21 nottrusted
 +-rw-r--r-- 1 root root 1964 nov.  11 11:08 server-cert.pem
 +-rw-r--r-- 1 root root 1594 nov.  11 11:01 server.csr
 +-rw------- 1 root root 3243 nov.  11 10:59 server-key.pem
 +-rw-r--r-- 1 root root  882 oct.  27 15:46 stats
 +</code>
 +
 +Supprimez les fichiers ayant déjà été utilisés, à savoir les deux CSR et les deux fichiers des extensions :
 +
 +<code>
 +root@manager:~# rm -v client.csr server.csr extfile.cnf extfile-client.cnf
 +'client.csr' supprimé
 +'server.csr' supprimé
 +'extfile.cnf' supprimé
 +'extfile-client.cnf' supprimé
 +</code>
 +
 +Modifiez les permissions des clefs privées :
 +
 +<code>
 +root@manager:~# chmod -v 0400 ca-key.pem key.pem server-key.pem
 +le mode de 'ca-key.pem' a été modifié de 0600 (rw-------) en 0400 (r--------)
 +le mode de 'key.pem' a été modifié de 0600 (rw-------) en 0400 (r--------)
 +le mode de 'server-key.pem' a été modifié de 0600 (rw-------) en 0400 (r--------)
 +</code>
 +
 +Ainsi que les permissions des certificats :
 +
 +<code>
 +root@manager:~# chmod -v 0444 ca.pem server-cert.pem cert.pem
 +le mode de 'ca.pem' a été modifié de 0644 (rw-r--r--) en 0444 (r--r--r--)
 +le mode de 'server-cert.pem' a été modifié de 0644 (rw-r--r--) en 0444 (r--r--r--)
 +le mode de 'cert.pem' a été modifié de 0644 (rw-r--r--) en 0444 (r--r--r--)
 +</code>
 +
 +Arrêtez et supprimez le conteneur **mysql** :
 +
 +<code>
 +root@manager:~# docker stop mysql
 +mysql
 +root@manager:~# docker rm mysql
 +mysql
 +</code>
 +
 +====9.4 - Démarrage du Daemon Docker avec une Invocation Directe====
 +
 +Arrêtez et désactivez le service Docker :
 +
 +<code>
 +root@manager:~# systemctl stop docker
 +Warning: Stopping docker.service, but it can still be activated by:
 +  docker.socket
 +root@manager:~# systemctl disable docker
 +Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
 +Executing: /lib/systemd/systemd-sysv-install disable docker
 +</code>
 +
 +Lancez un invocation directe de **dockerd** afin que le daemon n'acceptent que des connexions de clients fournissant un certificat signé par le CA :
 +
 +<code>
 +root@manager:~# dockerd --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H=0.0.0.0:2376 &
 +[1] 1868
 +root@manager:~# INFO[2019-11-11T12:01:43.638540628+01:00] Starting up                                  
 +INFO[2019-11-11T12:01:43.639187816+01:00] User namespaces: ID ranges will be mapped to subuid/subgid ranges of: dockremap:dockremap 
 +INFO[2019-11-11T12:01:43.641133642+01:00] User namespaces: ID ranges will be mapped to subuid/subgid ranges of: dockremap:dockremap 
 +INFO[2019-11-11T12:01:43.646949782+01:00] parsed scheme: "unix"                         module=grpc
 +INFO[2019-11-11T12:01:43.648299396+01:00] scheme "unix" not registered, fallback to default scheme  module=grpc
 +INFO[2019-11-11T12:01:43.648633123+01:00] ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock 0  <nil>}] <nil> module=grpc
 +INFO[2019-11-11T12:01:43.650756512+01:00] ClientConn switching balancer to "pick_first"  module=grpc
 +INFO[2019-11-11T12:01:43.656738368+01:00] parsed scheme: "unix"                         module=grpc
 +INFO[2019-11-11T12:01:43.657165991+01:00] scheme "unix" not registered, fallback to default scheme  module=grpc
 +INFO[2019-11-11T12:01:43.660938142+01:00] ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock 0  <nil>}] <nil> module=grpc
 +INFO[2019-11-11T12:01:43.661309281+01:00] ClientConn switching balancer to "pick_first"  module=grpc
 +INFO[2019-11-11T12:01:43.663242717+01:00] [graphdriver] using prior storage driver: overlay2 
 +WARN[2019-11-11T12:01:43.681131788+01:00] Your kernel does not support cgroup rt period 
 +WARN[2019-11-11T12:01:43.681397622+01:00] Your kernel does not support cgroup rt runtime 
 +INFO[2019-11-11T12:01:43.681845166+01:00] Loading containers: start.                   
 +INFO[2019-11-11T12:01:43.824330430+01:00] Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to set a preferred IP address 
 +INFO[2019-11-11T12:01:43.887849374+01:00] Loading containers: done.                    
 +INFO[2019-11-11T12:01:43.908567890+01:00] Docker daemon                                 commit=9013bf583a graphdriver(s)=overlay2 version=19.03.4
 +INFO[2019-11-11T12:01:43.908851991+01:00] Daemon has completed initialization          
 +INFO[2019-11-11T12:01:43.969272646+01:00] API listen on [::]:2376                      
 +[Entrée]
 +root@manager:~#
 +</code>
 +
 +Vérifiez que le processus tourne :
 +
 +<code>
 +root@manager:~# ps aux | grep docker
 +root      1868  0.2  4.0 421876 82236 pts/0    Sl   12:01   0:00 dockerd --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H=0.0.0.0:2376
 +root      1995  0.0  0.0  12780   964 pts/0    S+   12:02   0:00 grep docker
 +</code>
 +
 +Installez le paquet **net-tools** qui contient le binaire **netstat** :
 +
 +<code>
 +root@manager:~# apt install -y net-tools
 +</code>
 +
 +Vérifiez que le port **2376** est à l'écoute :
 +
 +<code>
 +root@manager:~# netstat -anp | grep 2376
 +tcp6            0 :::2376                 :::                   LISTEN      1868/dockerd 
 +</code>
 +
 +====9.5 - Configuration du Client====
 +
 +Transférez ensuite le certificat du CA ainsi que le certificat et la clef privée du client vers la VM **10.0.2.45** :
 +
 +<code>
 +root@manager:~# scp ca.pem key.pem cert.pem trainee@10.0.2.45:/home/trainee/
 +The authenticity of host '10.0.2.45 (10.0.2.45)' can't be established.
 +ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE.
 +Are you sure you want to continue connecting (yes/no)? yes
 +Warning: Permanently added '10.0.2.45' (ECDSA) to the list of known hosts.
 +trainee@10.0.2.45's password: trainee
 +ca.pem                                                                                                                                 100% 2163   917.8KB/  00:00    
 +key.pem                                                                                                                                100% 3243     3.0MB/  00:00   
 +cert.pem                                                                                                                               100% 1907   921.7KB/  00:00 
 +</code>
 +
 +Lancez la commande **docker version** sur la VM **10.0.2.45** :
 +
 +<code>
 +trainee@myregistry:~$ docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=manager.i2tch.loc:2376 version
 +Client: Docker Engine - Community
 + Version:           19.03.4
 + API version:       1.40
 + Go version:        go1.12.10
 + Git commit:        9013bf583a
 + Built:             Fri Oct 18 15:52:34 2019
 + OS/Arch:           linux/amd64
 + Experimental:      false
 +
 +Server: Docker Engine - Community
 + Engine:
 +  Version:          19.03.4
 +  API version:      1.40 (minimum version 1.12)
 +  Go version:       go1.12.10
 +  Git commit:       9013bf583a
 +  Built:            Fri Oct 18 15:51:05 2019
 +  OS/Arch:          linux/amd64
 +  Experimental:     false
 + containerd:
 +  Version:          1.2.10
 +  GitCommit:        b34a5c8af56e510852c35414db4c1f4fa6172339
 + runc:
 +  Version:          1.0.0-rc8+dev
 +  GitCommit:        3e425f80a8c931f88e6d94a8c831b9d5aa481657
 + docker-init:
 +  Version:          0.18.0
 +  GitCommit:        fec3683
 +</code>
 +
 +Afin de faciliter l'utilisation des commandes sur le serveur à partir de myregistry, créez le répertoire **~/.docker** :
 +
 +<code>
 +trainee@myregistry:~$ mkdir -pv ~/.docker
 +mkdir: création du répertoire '/home/trainee/.docker'
 +</code>
 +
 +Copiez ensuite les fichiers *.pem dans le répertoire **~/.docker** :
 +
 +<code>
 +trainee@myregistry:~$ cp -v {ca,cert,key}.pem ~/.docker
 +'ca.pem' -> '/home/trainee/.docker/ca.pem'
 +'cert.pem' -> '/home/trainee/.docker/cert.pem'
 +'key.pem' -> '/home/trainee/.docker/key.pem'
 +</code>
 +
 +Créez les deux variables **DOCKER_HOST** et **DOCKER_TLS_VERIFY** :
 +
 +<code>
 +trainee@myregistry:~$ export DOCKER_HOST=tcp://manager.i2tch.loc:2376 DOCKER_TLS_VERIFY=1
 +</code>
 +
 +Maintenant la connexion est sécurisée par défaut :
 +
 +<code>
 +trainee@myregistry:~$ docker image ls
 +REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
 +i2tch/docker        nottrusted          686e85ee76b8        19 hours ago        5.03MB
 +i2tch/otherimage    latest              686e85ee76b8        19 hours ago        5.03MB
 +ubuntu              latest              775349758637        10 days ago         64.2MB
 +nginx               latest              540a289bab6c        2 weeks ago         126MB
 +alpine              latest              965ea09ff2eb        2 weeks ago         5.55MB
 +i2tch/docker        alpine              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
 +</code>
  
 ----- -----
 Copyright © 2025 Hugh NORRIS Copyright © 2025 Hugh NORRIS
  
Menu