diff --git a/README.md b/README.md index a7057ca7e3c39318e8461241b7263e81cd6716fb..60ff71a478057bd0a3ee5e34b96c83883754ac2d 100644 --- a/README.md +++ b/README.md @@ -108,12 +108,45 @@ docker pull hub.chez-wam.info:443/masqueli/alpine-git:v1.0.0 Vérifiez à nouveau à l'aide de la commande `docker image list` qu'il existe bien une image correspondant au nom et au tag donné précédemment. Félicitations ! Vous connaissez désormais les opérateurs de base pour interagir avec un registre privé :) +## Utilisation de la directive USER +Clonez le projet disponible à l'adresse URL ci-après dans le répertoire de votre choix : [https://gitlab.univ-lille.fr/formation-docker-cnrs/session-debutant.git](https://gitlab.univ-lille.fr/formation-docker-cnrs/session-debutant.git). +Changez pour le répertoire `session-debutant` (ou autrement ... si vous l'avez renommé) puis créez le fichier `Dockerfile` ci-après : +```bash +FROM alpine:latest +RUN mkdir /app +RUN addgroup nemart && adduser -D -H -s /bin/false -G nemart jean +WORKDIR /app +COPY . /app +RUN chown -R jean:nemart /app +USER jean +CMD id && ls -alrt /app +``` +Construisez cette image (que vous nommerez `exercice-user`) et exécutez là (`docker run --rm exercice-user`). Qu'observez-vous sur les droits (utilisateurs, fichiers, etc.) ? +> Attention : la suite peut être dangereuse si vous n'êtes pas bien reveillé ... ou en phase de digestion avancée :) +Nous allons être joueurs et monter le répertoire `/` de votre hôte (ou un autre si vous êtes sous Windows) afin de tester si nous sommes capables de supprimer des données lorsque nous sommes dans le conteneur. Ci-après la commande que j'utilise dans mon cas : + +```bash +docker run -v /:/rep_serveur -it --rm exercice-user:latest sh +rm -f /rep_serveur/etc/passwd +``` +Vous venez d'effacer le fichier `/etc/passwd` de votre machine (perso ou virtuelle) ... bravo ! + +... Non, je déconne, c'est une (mauvaise) blague. Si nous voulons que ça fonctionne, il faudra monter dans le conteneur un répertoire sur l'hôte qui possède les mêmes UID et GID que mon USER jean (1000:1000 par défaut) pour créer/modifier/supprimer des données. + +Vous n'êtes pas protégé, malgré tout, d'une utilisation malveillante d'un utilisateur. Si vous lancez la commande précédente en utilisant l'option `-u <user>` lors du `run`, vous outre-passez cette règle (ce qui peut être dramatique pour le coup). Exemple pour moi : + +```bash +docker run --rm -u root -it exercice-user:latest sh +id +uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video) +``` +## Jouons avec les capabilities