From fe69b319ccd2993c7fa89b76950828a8e725a7e3 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Tue, 28 Feb 2023 15:01:28 +0100 Subject: [PATCH 1/3] Update domain list --- libadlin/domain.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libadlin/domain.go b/libadlin/domain.go index 1c33dc4..b30ec0e 100644 --- a/libadlin/domain.go +++ b/libadlin/domain.go @@ -6,8 +6,8 @@ import ( ) var ( - AssociatedDomainSuffixes = []string{"adlin2023.driivve.com.", "adlin2023.driivve.co.", "adlin2023.driivee.cloud.", "adlin2023.p0m.fr."} - DelegatedDomainSuffixes = []string{"srs.driivve.com.", "srs.driivve.co.", "srs.driivee.cloud.", "srs.p0m.fr."} + AssociatedDomainSuffixes = []string{"adlin2024.driive.online.", "adlin2024.driive.site.", "adlin2024.drivve.online.", "adlin2024.drivee.site.", "adlin2024.p0m.fr."} + DelegatedDomainSuffixes = []string{"srs.driive.online.", "srs.driive.site.", "srs.drivve.online.", "srs.drivee.site.", "srs.p0m.fr."} ) func (student *Student) MyDelegatedDomainSuffix() string { From 9cd77a5152a07431cbe2b99a4974aefef6f1158c Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Tue, 28 Feb 2023 15:10:35 +0100 Subject: [PATCH 2/3] tuto2: Update for 2024 --- .drone.yml | 2 +- tutorial/adlin.sty | 24 ++++++++++++++++++++++++ tutorial/ansible/.gitignore | 2 ++ tutorial/ansible/Makefile | 11 +++++++---- tutorial/ansible/maatma.md | 6 +++--- tutorial/ansible/setup.md | 13 +++++++------ tutorial/ansible/tutorial-2.md | 21 +++++++++++++++++++++ tutorial/ansible/tutorial.md | 4 ++-- tutorial/ansible/vitrine.md | 18 +++++++++++++----- tutorial/ansible/what.md | 29 ++++++++++++++++++++++------- tutorial/colored-blocks.lua | 11 +++++++++++ tutorial/pandoc-opts.mk | 2 +- 12 files changed, 114 insertions(+), 29 deletions(-) create mode 100644 tutorial/ansible/tutorial-2.md diff --git a/.drone.yml b/.drone.yml index c63a2d8..75f494b 100644 --- a/.drone.yml +++ b/.drone.yml @@ -128,7 +128,7 @@ steps: - tar xf /tmp/FantasqueSansMono-Normal.tar.gz -C /usr/share/fonts/fantasque-sans-mono OTF/ TTF/ --strip-component=1 - mkdir dist - make -C tutorial/ansible - - mv tutorial/ansible/tutorial.pdf dist/tutorial-2-${DRONE_TAG##srs20??-tutorial2-}.pdf + - mv tutorial/ansible/tutorial-2.pdf dist/tutorial-2-${DRONE_TAG##srs20??-tutorial2-}.pdf - name: deploy subject image: appleboy/drone-scp diff --git a/tutorial/adlin.sty b/tutorial/adlin.sty index be94771..59fe540 100644 --- a/tutorial/adlin.sty +++ b/tutorial/adlin.sty @@ -24,6 +24,30 @@ \path[fill=black,draw=none] (interior.south west) rectangle node[white]{\huge\bfseries\texttt >\_} ([xshift=10mm]interior.north west); },#1} +\usetikzlibrary{calc} +\newtcolorbox{exercicebox}[1][parbox=false]{breakable,enhanced, + before=\hspace{.7em},after=\hspace{.5em}, + tile,left=2mm,right=12mm,top=.5em,bottom=.5em, + frame code={\path[draw=Gold!85!gray,sharp corners,line width=2.5pt] (frame.north west) -- (frame.north) -- (frame.north east);} + sharp corners, + colback=white, + underlay={% + \path[fill=Gold!85!gray,draw=none] (interior.south east) rectangle node[white]{\begin{tikzpicture} +\draw[fill=white,even odd rule] +let +\n{dpt} = {360/7} +in +(0,0) circle (1.2mm) % +({\n{dpt}*(0.5)}:2.5mm) \foreach \x in {1,...,7}{ % +arc ({\n{dpt}*(\x-0.5)}:{\n{dpt}*(\x-0.25)}:2.5mm) % +--++(\x*\n{dpt}:1.5mm) % +arc ({\n{dpt}*(\x-0.25)}:{\n{dpt}*(\x+0.25)}:2.5mm) % +--++(\x*\n{dpt}:-1.5mm) % +arc ({\n{dpt}*(\x+0.25)}:{\n{dpt}*(\x+0.5)}:2.5mm)--% +({\n{dpt}*(\x+0.5)}:2.5mm) +};\end{tikzpicture}} ([xshift=-10mm]interior.north east); + },#1} + \newtcolorbox{questionbox}[1][]{breakable,enhanced, before skip balanced=2mm,after skip balanced=3mm, tile,left=11mm,right=2mm,top=1mm,bottom=1mm, diff --git a/tutorial/ansible/.gitignore b/tutorial/ansible/.gitignore index 4cf39d9..055d9b1 100644 --- a/tutorial/ansible/.gitignore +++ b/tutorial/ansible/.gitignore @@ -1 +1,3 @@ tutorial.pdf +tutorial-2.pdf +tutorial-ansible.pdf diff --git a/tutorial/ansible/Makefile b/tutorial/ansible/Makefile index c39bea3..a292fc9 100644 --- a/tutorial/ansible/Makefile +++ b/tutorial/ansible/Makefile @@ -1,12 +1,15 @@ include ../pandoc-opts.mk -SOURCES = tutorial.md setup.md maatma.md what.md vitrine.md ansible.md nameserver.md deploiement-svc.md rendu.md +SOURCES_2 = tutorial-2.md setup.md maatma.md what.md vitrine.md nameserver.md +SOURCES_ANSIBLE = tutorial.md ansible.md deploiement-svc.md rendu.md -all: tutorial.pdf +all: tutorial-2.pdf tutorial-ansible.pdf -tutorial.pdf: ${SOURCES} +tutorial-2.pdf: ${SOURCES_2} + pandoc ${PANDOCOPTS} -o $@ $+ +tutorial-ansible.pdf: ${SOURCES_ANSIBLE} pandoc ${PANDOCOPTS} -o $@ $+ clean:: - rm tutorial.pdf + rm tutorial-2.pdf tutorial-ansible.pdf diff --git a/tutorial/ansible/maatma.md b/tutorial/ansible/maatma.md index 78d4afd..7ba9fe4 100644 --- a/tutorial/ansible/maatma.md +++ b/tutorial/ansible/maatma.md @@ -77,9 +77,9 @@ pouvez l'ignorer pour le moment. Notez que vous ne disposez pas d'IPv4 publique (c'est-à-dire routable sur Internet), vous disposez seulement d'une IPv6 publique. L'ensemble de vos services sont cependant accessibles également en IPv4, car Maatma centralise -les requêtes faites en IPv4 et les distribue entre vos IPv6, lorsque le -protocole permet de faire cette distribution. Par exemple, HTTP et HTTPS le -permette, mais pas SSH. Vous ne pourrez donc pas vous connecter en SSH via +les requêtes faites en IPv4 et les distribue entre vos IPv6, **lorsque le +protocole permet de faire cette distribution**. Par exemple, HTTP et HTTPS le +permettent, mais pas SSH. Vous ne pourrez donc pas vous connecter en SSH via l'IPv4 de Maatma. Voici un schéma reprenant ces explications : diff --git a/tutorial/ansible/setup.md b/tutorial/ansible/setup.md index d3512fb..78bca64 100644 --- a/tutorial/ansible/setup.md +++ b/tutorial/ansible/setup.md @@ -12,8 +12,9 @@ possédant les caractéristiques suivantes : permettant d'aller sur Internet. Le choix de la technologie de virtualisation est laissé à votre -appréciation. L'ISO est réputée supportée par *Hyper-V* (Windows), *qemu*/*KVM* -(macOS, Linux, Windows) et VMware (macOS, Windows).\ +appréciation. L'ISO est réputée supporter *Hyper-V* (Windows), *qemu*/*KVM* +(macOS, Linux, Windows), *Virtualization.Framework* (macOS) et VMware (macOS, +Windows).\ L'hyperviseur qui vous laissera le plus de liberté (et avec lequel vous pourrez apprendre le plus de choses !) est sans doute *qemu*, sous Linux ; vous pouvez @@ -46,7 +47,7 @@ Gérer le réseau de son hyperviseur Cette section est là pour vous donner un aperçu du fonctionnement de votre installation, pour que plus jamais, vous ne puissiez vous demander « On la met -en NAT ou en Bridge la VM ? », sans vraiment savoir de quoi vous parler. +en NAT ou en Bridge la VM ? », sans vraiment savoir de quoi vous parlez. On vous encourage évidemment à comprendre les éléments présentés et à tester par vous-même avec `qemu`, mais tous les hyperviseurs fonctionnent de la même @@ -86,7 +87,7 @@ nombre d'interfaces physiques existantes. Concrètement, l'opération est assez fastidieuse à réaliser à la main, car cela demande de détacher le périphérique (via `/sys/bus/pci/devices/0000:03:00.0/driver/unbind`, -par exemple pour une carte `enp0s3`) ; avant de l'assigner à notre machine +par exemple pour une carte `enp0s3`), avant de l'assigner à notre machine virtuelle :
@@ -189,8 +190,8 @@ machine hôte sur ce réseau virtuel. Il est tout à fait possible d'ajouter une interface réseau physique à un pont, et c'est sans doute la méthode la plus simple pour que les machines virtuelles -puissent accéder à internet : si le réseau local de la machine hôte fournie des -adresses IP par DHCP à toute machine rejoignant le réseau. +puissent accéder à Internet (si le réseau local de la machine hôte fournit des +adresses IP par DHCP à toute machine rejoignant le réseau). Lorsque le pont existe, `qemu` peut créer l'interface virtuelle et l'assigner à diff --git a/tutorial/ansible/tutorial-2.md b/tutorial/ansible/tutorial-2.md new file mode 100644 index 0000000..84e3f37 --- /dev/null +++ b/tutorial/ansible/tutorial-2.md @@ -0,0 +1,21 @@ +--- +title: Administration Linux avancée -- TP n^o^ 2 +subtitle: "Maatma : l'hébergeur DIY" +author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps} +institute: EPITA +date: Jeudi 2 mars 2023 +abstract: | + Durant ce deuxième TP, nous allons préparer un serveur pour réponde à des + services classiques d'Internet. Nous appréhenderons le fonctionnement des + noms de domaine et des certificats TLS, au travers de Maatma, votre + hébergeur. + + \vspace{1em} + + Ce TP est la partie découverte du 1er projet qui sera à rendre pour le + **mercredi 29 mars 2023 à 23 h 42**. Nous verrons au prochain TP comment + automatiser toutes les étapes d'aujourd'hui grâce à Ansible. Vous serez notés + d'une part sur votre avancement dans les étapes de ce TP, et également sur la + qualité du rendu de l'automatisation de ces mêmes étapes, via Ansible (que + l'on verra au prochain TP). +... diff --git a/tutorial/ansible/tutorial.md b/tutorial/ansible/tutorial.md index de682dd..fd4e408 100644 --- a/tutorial/ansible/tutorial.md +++ b/tutorial/ansible/tutorial.md @@ -3,9 +3,9 @@ title: Administration Linux avancée -- TP n^o^ 2 subtitle: "Maatma : l'hébergeur DIY" author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps} institute: EPITA -date: Mercredi 9 mars 2022 +date: Jeudi 16 mars 2023 abstract: | - Durant ce deuxième TP, nous allons apprendre à déployer des services sur un + Durant ce troisième TP, nous allons apprendre à déployer des services sur un serveur, de manière industrielle ! \vspace{1em} diff --git a/tutorial/ansible/vitrine.md b/tutorial/ansible/vitrine.md index b868853..8c134c0 100644 --- a/tutorial/ansible/vitrine.md +++ b/tutorial/ansible/vitrine.md @@ -14,7 +14,7 @@ Internet, et renforcez cela au moyen d'un pare-feu (`iptables` ou Faites le tour des configurations afin de vous assurer qu'elles sont suffisamment durcies. Pensez à noter vos changements, vous devrez les -reporter dans un fichiers au chapitre suivant ! +reporter dans un fichier au prochain TP ! À ce stade, vous devez suivre les recommandations de l'ANSSI que vous jugez adaptées à votre déploiement : @@ -26,13 +26,21 @@ Ma première vitrine Sur le domaine `login-x.adlin2024.example.tld`, déployez une vitrine d'entreprise basique. Vous n'allez pas déployer tout un Wordpress, mais un -simple lot de pages HTML ... générées avec Hugo. +simple lot de pages HTML ... générées avec Hugo. + +::::: {.exercice} Vous aurez pour cela besoin d'un serveur web, dont le choix est laissé à votre discrétion. +::::: + +::::: {.exercice} + Vous pouvez utiliser les services de [Let's Encrypt](https://letsencrypt.org/) -pour obtenir un certificat TLS.\ +pour obtenir un certificat TLS. + +::::: ::::: {.warning} @@ -40,8 +48,8 @@ Compte tenu [des limitations imposées](https://letsencrypt.org/docs/rate-limits/), vous ne pourrez pas tous en créer un aujourd'hui, mais n'hésitez pas à retenter un peu plus tard dans la semaine. Vous pouvez également obtenir vos certificats depuis de nombreux -autres services gratuits similaire : [ZeroSSL](https://zerossl.com/), -[buypass](https://www.buypass.com/), ...\ +autres services gratuits similaires : [ZeroSSL](https://zerossl.com/), +[buypass](https://www.buypass.com/), ...\ D'ailleurs, si vous disposez de votre propre nom de domaine et que vous souhaitez l'utiliser pour ce TP, vous pouvez suivre les instructions dans diff --git a/tutorial/ansible/what.md b/tutorial/ansible/what.md index 058aefa..db49ba4 100644 --- a/tutorial/ansible/what.md +++ b/tutorial/ansible/what.md @@ -9,6 +9,8 @@ Accéder à la machine virtuelle Une fois la machine virtuelle démarrée, vous pouvez vous y connecter en `root` avec le mot de passe `adlin2024`. +::::: {.more} + Vous pouvez également démarrer en mode *single user*, mais comme votre disque n'est sans doute pas encore utilisable à ce stade, vous ne pourrez pas changer le mot de passe `root`. Vous pourrez néanmoins effectuer les étapes de @@ -18,6 +20,8 @@ Lorsque vous avez accès à la ligne de commande du *bootloader*, vous pouvez généralement ajouter l'option `init=/bin/sh` à la ligne de commande du noyau, afin de lancer un shell au lieu du système d'init habituel. +::::: + Se mettre à l'aise ------------------ @@ -56,9 +60,13 @@ de personnes susceptibles de s'y connecter pour l'administrer[^whysudo]. permet également de pouvoir retracer, via les journaux, qui a réalisé quelles opérations. +::::: {.exercice} + Utilisez `adduser(8)` pour vous créer votre propre compte, et au minimum `passwd(1)` pour lui définir un mot de passe. +::::: + C'est bon, vous pouvez maintenant commencer à utiliser le client SSH de votre choix pour administrer votre machine virtuelle ! @@ -81,16 +89,23 @@ d'administrateur. Utilisez : administrateur ; - `sudoedit` : pour éditer un fichier avec les droits administrateurs. -Après avoir installé le paquet, vous devrez ajouter les utilisateurs autorisés -à se servir de `sudo` dans le groupe `sudo` ou `wheel` (en fonction des -distributions). Vous pouvez également définir des conditions plus précise en -éditant le fichier `/etc/sudoers` (utilisez impérativement `visudo(1)` pour -éditer ce fichier).\ +::::: {.exercice} + +Après avoir installé le paquet `sudo`, vous devrez ajouter les utilisateurs +autorisés à se servir de `sudo` dans le groupe `sudo` ou `wheel` (en fonction +des distributions). + +::::: + +Vous pouvez également définir des conditions plus précises en éditant le +fichier `/etc/sudoers` (utilisez impérativement `visudo(1)` pour éditer ce +fichier).\ ::::: {.code} -**Super astuce !** votre terminal rit encore de vous, affichant `Permission -Denied` car vous avez oublié de préfixer votre commande par `sudo` ? essayez : +**Super astuce !** si vous oubliez de préfixer votre commande par `sudo`, vous +allez obtenir une erreur `Permission Denied`. Vous n'êtes pas obligés de +recopier la commande, utilisez :
``` diff --git a/tutorial/colored-blocks.lua b/tutorial/colored-blocks.lua index bb60f07..14e0783 100644 --- a/tutorial/colored-blocks.lua +++ b/tutorial/colored-blocks.lua @@ -21,6 +21,17 @@ function Div(el) el.content, pandoc.RawBlock("latex", "\\end{codebox}")) + elseif el.classes[1] == "exercice" + then + -- insert element in front + table.insert( + el.content, 1, + pandoc.RawBlock("latex", "\\noindent\\begin{exercicebox}")) + -- insert element at the back + table.insert( + el.content, + pandoc.RawBlock("latex", "\\end{exercicebox}")) + elseif el.classes[1] == "question" then -- insert element in front diff --git a/tutorial/pandoc-opts.mk b/tutorial/pandoc-opts.mk index 94bbe53..83f67cd 100644 --- a/tutorial/pandoc-opts.mk +++ b/tutorial/pandoc-opts.mk @@ -6,7 +6,7 @@ PANDOCOPTS = --pdf-engine=lualatex \ -M fontsize=12pt \ -M papersize=a4 \ -M mainfont="Linux Libertine" \ - -M monofont="FantasqueSansMono" \ + -M monofont="Inconsolata" \ -M sansfont="Linux Biolinum" \ -M colorlinks=true \ -M linkcolor="black" \ From d8d86da309c5e43e4a7b84a6774b3e33467e237a Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Tue, 28 Feb 2023 22:23:58 +0100 Subject: [PATCH 3/3] Update TP1 gradation --- token-validator/grades.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/token-validator/grades.go b/token-validator/grades.go index 7aaecf4..a9342a2 100644 --- a/token-validator/grades.go +++ b/token-validator/grades.go @@ -75,6 +75,8 @@ func computeGrades(_ httprouter.Params, _ []byte) (interface{}, error) { } } else { switch st.Challenge { + case 0: + res[std.Login]["TP1"] += 1 case 1: res[std.Login]["TP1"] += 3 case 2: @@ -97,6 +99,8 @@ func computeGrades(_ httprouter.Params, _ []byte) (interface{}, error) { res[std.Login]["TP1"] += 2 case 11: res[std.Login]["TP1"] += 1 + case 12: + res[std.Login]["TP1"] += 1 } } }