tuto2: Update for 2023 students

This commit is contained in:
nemunaire 2022-03-08 21:17:08 +01:00
parent 7925fd8a65
commit 0ebf69f4cd
9 changed files with 200 additions and 76 deletions

View File

@ -39,18 +39,25 @@ ne risquez pas de vous retrouver avec une usine à gaz impossible à retirer.
Résultat attendu Résultat attendu
---------------- ----------------
À la fin de cette partie, vous devez être en mesure de pouvoir déployer une À la fin de cette partie, vous devez être en mesure de déployer une nouvelle
nouvelle machine, identique à celle que vous venez de configurer, à partir machine, identique à celle que vous venez de configurer, à partir d'une ISO et
d'une ISO et d'un nouveau disque. d'un nouveau disque.
Le fichier à rendre est un playbook `login-x-TP2/basis.yml`, accompagné de Le fichier à rendre est un *playbook* `login-x-TP2/basis.yml`, accompagné de
toutes ses dépendances : celui-ci doit faire les configurations basiques du toutes ses dépendances : celui-ci doit faire les configurations basiques du
système et des utilisateurs. système et des utilisateurs.
Un deuxième playbook est à rendre : `login-x-TP2/vitrine.yml`, celui-ci doit Un deuxième playbook est à rendre : `login-x-TP2/vitrine.yml`, celui-ci doit
permettre de déployer (en parallèle de tous les autres), une page vitrine permettre de déployer, une page vitrine typique d'une entreprise (cf. la 4e
typique d'une entreprise (cf. la 4e question de cours ;)). Cette page doit être question de cours ;)). Cette page doit être accessible depuis votre domaine
accessible depuis votre domaine <https://login-x.adlin2022.p0m.fr/>. <https://login-x.adlin2023.example.tld/>.\
::::: {.warning}
Il est attendu que la vitrine soit générée avec [Hugo](https://gohugo.io/), sur
la machine exécutant Ansible (et non pas sur la machine où elle sera hébergée).
:::::
Mon première commande Mon première commande
@ -73,11 +80,15 @@ all:
``` ```
</div> </div>
::::: {.more}
Vous pouvez lancer une autre machine virtuelle à ce stade et ajouter son IP sur Vous pouvez lancer une autre machine virtuelle à ce stade et ajouter son IP sur
une nouvelle ligne du fichier `hosts`. une nouvelle ligne du fichier `hosts`.
:::::
Plus tard, c'est dans ce fichier que vous pourrez créer des groupes de machines Plus tard, c'est dans ce fichier que vous pourrez créer des groupes de machines
(par exemple pour regrouper les serveurs web, les bases de données, etc.) ou (pour, par exemple, regrouper les serveurs web, les bases de données, etc.) ou
donner des caractéristiques spécifiques à vos machines. donner des caractéristiques spécifiques à vos machines.
@ -97,12 +108,15 @@ Lancez ensuite la commande suivante :
Vous devriez avoir un retour similaire à celui-ci, indiquant simplement que la Vous devriez avoir un retour similaire à celui-ci, indiquant simplement que la
connexion a bien été effectuée et que le nécessaire est bien installé sur la connexion a bien été effectuée et que le nécessaire est bien installé sur la
machine distance. machine distance.\
::::: {.question}
Si votre clef SSH n'a pas été récupérée depuis le CRI, vous pouvez rajouter Si votre clef SSH n'a pas été récupérée depuis le CRI, vous pouvez rajouter
l'option `--ask-pass`, afin de pouvoir indiquer le mot de passe de connexion au l'option `--ask-pass`, afin de pouvoir indiquer le mot de passe de connexion au
compte, sinon vous obtiendrez une erreur plutôt incrompréhensible. compte, sinon vous obtiendrez une erreur plutôt incompréhensible.
:::::
### Confort ### Confort
@ -145,7 +159,7 @@ exister. À l'application de cette nouvelle recette, si un tel utilisateur est
trouvé, il sera donc supprimé. trouvé, il sera donc supprimé.
### Collecte du lundi ### Collecte ~~du lundi~~ d'informations
Parmi les modules de base, le module `setup` permet de récupérer un grand Parmi les modules de base, le module `setup` permet de récupérer un grand
nombre de caractéristiques de la machine distance, voyez plutôt : nombre de caractéristiques de la machine distance, voyez plutôt :
@ -156,7 +170,7 @@ ansible -i hosts all -m setup
``` ```
</div> </div>
Les informations récupérées (quelque soit le module), sont ensuite accessible Les informations récupérées (quelque soit le module), sont ensuite accessibles
dans des variables afin de permettre de compléter des modèles ou pour faire de dans des variables afin de permettre de compléter des modèles ou pour faire de
l'exécution conditionnelle d'état (par exemple on pourra utiliser la variable l'exécution conditionnelle d'état (par exemple on pourra utiliser la variable
`ansible_facts.ansible_distribution` pour distinguer les gestionnaires de `ansible_facts.ansible_distribution` pour distinguer les gestionnaires de
@ -238,10 +252,10 @@ Voici à quoi ressemblerait votre premier playbook créant l'utilisateur
</div> </div>
La création de l'utilisateur se fait à l'aide du module La création de l'utilisateur se fait à l'aide du module
[`user`](http://docs.ansible.com/ansible/latest/user_module.html). [`user`](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/user_module.html).
À vous maintenant, à l'aide [des modules à votre À vous maintenant, à l'aide [des collections de modules à votre
disposition](http://docs.ansible.com/ansible/latest/modules_by_category.html) disposition](https://docs.ansible.com/ansible/latest/collections/index.html)
de copier vos fichiers de configuration à leur place et avec les bons droits de copier vos fichiers de configuration à leur place et avec les bons droits
(`authorized_keys`, `.bashrc`, ...). Installez également les paquets que vous (`authorized_keys`, `.bashrc`, ...). Installez également les paquets que vous
aviez installé à la main (client DHCP, `htop`, ...). aviez installé à la main (client DHCP, `htop`, ...).
@ -281,13 +295,14 @@ Il est attendu que le nom de la notification corresponde à l'attribut `name`
d'un handler. d'un handler.
Voir [la Voir [la
documentation](http://docs.ansible.com/ansible/latest/playbooks_intro.html#handlers-running-operations-on-change) documentation](https://docs.ansible.com/ansible/latest/user_guide/playbooks_handlers.html)
pour davantage de détails et d'exemples. pour davantage de détails et d'exemples.
La configuration de votre serveur SSH laisse à désirer. Corriger les problèmes La configuration de votre serveur SSH laisse à désirer. Corriger les problèmes
énoncés par ces deux articles : énoncés par ces deux articles :
- <https://linuxhandbook.com/ssh-hardening-tips/> ; - <https://linuxhandbook.com/ssh-hardening-tips/> ;
- <https://www.ssi.gouv.fr/guide/recommandations-pour-un-usage-securise-dopenssh/> ;
- <https://stribika.github.io/2015/01/04/secure-secure-shell.html>. - <https://stribika.github.io/2015/01/04/secure-secure-shell.html>.
Mettez en place un *handler* pour relancer votre serveur SSH en cas de Mettez en place un *handler* pour relancer votre serveur SSH en cas de

View File

@ -9,10 +9,10 @@ gestionnaire de configuration.
Après cet échauffement, vous devriez être prêt à créer un *playbook* Après cet échauffement, vous devriez être prêt à créer un *playbook*
dédié à l'installation d'un serveur [Matrix](https://matrix.org/) : dédié à l'installation d'un serveur [Matrix](https://matrix.org/) :
![Element](riot.png "Element : un des clients utilisable pour joindre son serveur Matrix") ![Element : un des clients utilisable pour joindre son serveur Matrix](riot.png)
Vous connaissez et utilisez sans doute Slack, un service de messagerie Vous connaissez et utilisez sans doute Discord ou Slack, un service de messagerie
instantannée qui a supplanté IRC, Jabber, ... Il vient avec le gros instantannée qui a supplanté IRC, Jabber, ... Il vient avec le gros
inconvénient qu'il est centralisé, qu'il ne permet pas de faire discuter des inconvénient qu'il est centralisé, qu'il ne permet pas de faire discuter des
personnes qui, bien qu'utilisant le même service, ne sont pas dans le même personnes qui, bien qu'utilisant le même service, ne sont pas dans le même
@ -24,9 +24,25 @@ une solution de messagerie décentralisée et permet de réaliser du chiffrement
de bout-en-bout. de bout-en-bout.
Vous trouverez la documentation d'installation précise et détaillée à : Vous trouverez la documentation d'installation précise et détaillée à :
<https://github.com/matrix-org/synapse/blob/master/README.rst> (attention, <https://matrix-org.github.io/synapse/latest/>.\
pensez à vous fixer une version, n'utilisez pas la branche master qui risque de
ne plus fonctionner au moment du moulinétage de votre rendu). ::::: {.warning}
Vous avez 5 solutions pour réaliser cette partie, mais 2 sont à proscrire. Vous pouvez :
- utiliser [le playbook officiel](https://github.com/spantaleev/matrix-docker-ansible-deploy) ;
- installer [les paquets officiels de la dernière version
stable](https://matrix-org.github.io/synapse/latest/setup/installation.html#debianubuntu)
et réaliser le playbook vous-même (quitte à recopier des bouts du playbook
officiel) ;
- installer [les modules Python depuis PyPI](https://matrix-org.github.io/synapse/latest/setup/installation.html#installing-as-a-python-module-from-pypi).
Vous ne pouvez pas :
- déployer le conteneur Docker ;
- déployer à partir des sources.
:::::
Vous devrez attacher une importance tout particulière à la sécurité de Vous devrez attacher une importance tout particulière à la sécurité de
la solution que vous déployez : configurations durcies, utilisateur la solution que vous déployez : configurations durcies, utilisateur
@ -34,9 +50,17 @@ dédié lorsque c'est possible (pas de `root` !), droits d'accès et
permissions des répertoires, etc. permissions des répertoires, etc.
Profitez des [modules de base de Profitez des [modules de base de
données](https://docs.ansible.com/ansible/2.9/modules/list_of_database_modules.html) données](https://docs.ansible.com/ansible/latest/collections/community/postgresql/index.html)
pour l'initialiser correctement. Et bien entendu de l'ensemble des pour l'initialiser correctement. Et bien entendu de l'ensemble des
modules décrits dans la documentation standard ! modules décrits dans la documentation standard !\
::::: {.warning}
L'utilisation des modules
[`ansible.builtin.command`](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/command_module.html#ansible-collections-ansible-builtin-command-module)
et assimilés est interdite en toute circonstance.
:::::
## Configurations ## Configurations
@ -44,9 +68,28 @@ modules décrits dans la documentation standard !
Tous les éléments de configuration (mot de passes de connexion à la Tous les éléments de configuration (mot de passes de connexion à la
base de données, chemins, etc.) sont à déclarer comme variables dans base de données, chemins, etc.) sont à déclarer comme variables dans
le fichier `vars/matrix-config.yml`, que vous prendrez soin d'importer le fichier `vars/matrix-config.yml`, que vous prendrez soin d'importer
dans votre *Playbook*. dans votre *Playbook*.\
Vous devrez générer un certificat TLS afin de joindre les autres serveurs. ::::: {.warning}
Vous devez utiliser `ansible-vault` pour stocker de manière sûre les données
sensibles tels que les mots de passes. Vous pouvez ajouter un second fichier de
variables pour cela, si cela vous paraît plus opportun.
:::::
Vous devrez générer un certificat TLS afin de joindre les autres serveurs.\
::::: {.warning}
À aucun moment la clef privée de votre certificat ne doit faire parti de votre
dépôt. Dans certaines circonstances, il peut être pratique d'avoir cette clef
dans un *vault*, mais ici ce que l'on attend c'est que le certificat soit
généré s'il n'existe pas déjà ou qu'il a expiré. Éventuellement, une solution
automatisant son renouvellement automatique serait appréciable (mais non
obligatoire).
:::::
## Backup ## Backup
@ -60,7 +103,7 @@ de données. Le *dump* obtenu est à placer dans `/var/backups/`.
Vous n'êtes pas tenu d'installer un client. Pour vos tests, vous pouvez Vous n'êtes pas tenu d'installer un client. Pour vos tests, vous pouvez
utiliser <https://app.element.io/>, en changeant l'adresse du serveur Matrix pour utiliser <https://app.element.io/>, en changeant l'adresse du serveur Matrix pour
votre sous-domaine dédié à Matrix (normalement votre sous-domaine dédié à Matrix (normalement
<https://matrix.login-x.srs.p0m.fr/>). (Conservez le serveur d'identité à <https://matrix.login-x.srs.example.tld/>). (Conservez le serveur d'identité à
<https://vector.im>). <https://vector.im>).
@ -71,4 +114,4 @@ Pour valider l'installation de votre serveur, rejoignez le canal
`#adlin:nemunai.re` et envoyez un message « Ping ! » pour signaler votre `#adlin:nemunai.re` et envoyez un message « Ping ! » pour signaler votre
présence. présence.
Vous devriez également pouvoir tester entre-vous. Vous devriez également pouvoir tester en communiquant entre-vous.

View File

@ -4,15 +4,19 @@ Maatma
====== ======
Maatma sera votre bureau d'enregistrement (*registrar*) et votre fournisseur Maatma sera votre bureau d'enregistrement (*registrar*) et votre fournisseur
d'accès à une plage d'IPv6 routable sur Internet. d'accès à une plage d'IPv6 routable sur Internet.\
**Avertissement :** Ce service vous est proposé à titre éducatif. Vous savez ::::: {.warning}
Ce service vous est proposé à titre éducatif. Vous savez
combien Internet peut être un milieu hostile, il est donc de votre devoir de ne combien Internet peut être un milieu hostile, il est donc de votre devoir de ne
pas tenter le diable et de prendre toutes les mesures qui s'imposent pour vous pas tenter le diable et de prendre toutes les mesures qui s'imposent pour vous
protéger en conséquence. D'autre part, il va de soit que ce service vous est protéger en conséquence. D'autre part, il va de soit que ce service vous est
fourni en échange de votre consentement à ne pas l'utiliser d'une manière fourni en échange de votre consentement à ne pas l'utiliser d'une manière
condamnable (mais libre à vous de tester la plate-forme en elle-même). condamnable (mais libre à vous de tester la plate-forme en elle-même).
:::::
L'interface de Maatma est accessible à cette adresse : L'interface de Maatma est accessible à cette adresse :
<https://adlin.nemunai.re/maatma/>. Utilisez votre identifiant CRI pour vous y <https://adlin.nemunai.re/maatma/>. Utilisez votre identifiant CRI pour vous y
connecter. connecter.
@ -57,8 +61,8 @@ Votre passerelle répond aux `ping`, une fois la connexion établie, vous devrie
pouvoir `ping 2a01:e0a:2b:2252::1`. pouvoir `ping 2a01:e0a:2b:2252::1`.
Domaine de test IPs et domaine de test
--------------- ----------------------
En plus de vous fournir une IPv6, vous disposerez d'un nom de domaine ainsi En plus de vous fournir une IPv6, vous disposerez d'un nom de domaine ainsi
qu'une délégation sur un sous-domaine. qu'une délégation sur un sous-domaine.

View File

@ -13,10 +13,10 @@ Voici les grandes étapes :
* choisir un serveur DNS autoritaire (BIND, NSD, Knot, PowerDNS, djbDNS, ...) ; * choisir un serveur DNS autoritaire (BIND, NSD, Knot, PowerDNS, djbDNS, ...) ;
* éditer la zone de votre domaine ; * éditer la zone de votre domaine ;
* configurer ce serveur pour qu'il réponde effectivement aux requêtes de votre zone ; * configurer ce serveur pour qu'il réponde effectivement aux requêtes de votre zone ;
* tester avec `dig @votreIPv4locale ANY login-x.srs.p0m.fr` que votre serveur réagit bien correctement ; * tester avec `dig @votreIPv4locale ANY login-x.srs.example.tld` que votre serveur réagit bien correctement ;
* publier sur Maatma le nom de domaine où votre serveur de nom est joignable (généralement `ns.login-x.srs.p0m.fr`), il s'agit d'un enregistrement `NS` ; * publier sur Maatma le nom de domaine où votre serveur de nom est joignable (généralement `ns.login-x.srs.example.tld`), il s'agit d'un enregistrement `NS` ;
* publier également sa *GLUE*, afin de résoudre le problème de poule et d'œuf (le domaine de votre serveur de noms étant dans la zone qu'il est sensé servir, le bureau d'enregistrement enverra également l'IP correspondant au domaine) ; * publier également sa *GLUE*, afin de résoudre le problème de poule et d'œuf (le domaine de votre serveur de noms étant dans la zone qu'il est sensé servir, le bureau d'enregistrement enverra également l'IP correspondant au domaine) ;
* tester avec `dig @9.9.9.9 AAAA login-x.srs.p0m.fr` que votre serveur est bien joignable. * tester avec `dig @9.9.9.9 AAAA login-x.srs.example.tld` que votre serveur est bien joignable.
Un ouvrage de référence, qui répondra à l'intégralité de vos questions et manières d'utiliser votre serveur DNS se trouve à <http://www.zytrax.com/books/dns/>. Un ouvrage de référence, qui répondra à l'intégralité de vos questions et manières d'utiliser votre serveur DNS se trouve à <http://www.zytrax.com/books/dns/>.
@ -26,14 +26,14 @@ Un ouvrage de référence, qui répondra à l'intégralité de vos questions et
Pourquoi une telle complexité apparente pour déléguer une zone DNS ? Pourquoi une telle complexité apparente pour déléguer une zone DNS ?
Vous êtes sur le point d'obtenir le contrôle total d'un domaine : Vous êtes sur le point d'obtenir le contrôle total d'un domaine :
`login-x.srs.p0m.fr.`. Cela signifie que vous allez pouvoir décider, `login-x.srs.example.tld.`. Cela signifie que vous allez pouvoir décider,
depuis votre propre serveur de noms (respectueux des depuis votre propre serveur de noms (respectueux des
[standards](https://www.ietf.org/rfc/rfc1034.txt)), comment vous allez [standards](https://www.ietf.org/rfc/rfc1034.txt)), comment vous allez
répondre aux serveurs résolveurs des utilisateurs. répondre aux serveurs résolveurs des utilisateurs.
Le protocole DNS étant décentralisé, mais basé sur une arborescence Le protocole DNS étant décentralisé, mais basé sur une arborescence
unique, il est nécessaire que les serveurs faisant autorité sur une unique, il est nécessaire que les serveurs faisant autorité sur une
zone (`fr.`, `srs.p0m.fr.`, ...) fournissent toutes les informations zone (`fr.`, `srs.example.tld.`, ...) fournissent toutes les informations
nécessaire pour que cette délégation fonctionne. nécessaire pour que cette délégation fonctionne.
À cet instant, vous connaissez l'adresse IPv6 routable sur Internet de votre À cet instant, vous connaissez l'adresse IPv6 routable sur Internet de votre
@ -44,7 +44,7 @@ autorité.
Concrètement, vous allez devoir vous attribuer un sous-domaine pour votre Concrètement, vous allez devoir vous attribuer un sous-domaine pour votre
serveur de noms, car c'est grâce à un enregistrement `NS` figurant dans la zone serveur de noms, car c'est grâce à un enregistrement `NS` figurant dans la zone
parente (pour vous, la zone parente c'est `srs.p0m.fr`) que la délégation va se parente (pour vous, la zone parente c'est `srs.example.tld`) que la délégation va se
faire. faire.
Dans le cas basique, on va utiliser les serveurs de quelqu'un d'autre (d'un Dans le cas basique, on va utiliser les serveurs de quelqu'un d'autre (d'un
@ -52,6 +52,7 @@ hébergement spécialisé par exemple, ou celui de son bureau d'enregistrement
s'ils proposent ce service). Auquel cas, on fera figurer ce genre s'ils proposent ce service). Auquel cas, on fera figurer ce genre
d'informations : d'informations :
<div lang="en-US">
``` ```
42sh$ dig @e.ext.nic.fr. NS epita.fr. 42sh$ dig @e.ext.nic.fr. NS epita.fr.
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 17590 ;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 17590
@ -69,6 +70,7 @@ epita.fr. 172800 IN NS banjo.ionis-it.com.
;; Time 2042-12-04 13:42:23 CET ;; Time 2042-12-04 13:42:23 CET
;; From 2a00:d78:0:102:193:176:144:22@53(UDP) in 13.9 ms ;; From 2a00:d78:0:102:193:176:144:22@53(UDP) in 13.9 ms
``` ```
</div>
La commande est envoyée spécifiquement aux serveurs de l'AFNIC, faisant La commande est envoyée spécifiquement aux serveurs de l'AFNIC, faisant
autorité pour la zone `fr.`. Les serveurs de l'AFNIC nous indiquent en retour, autorité pour la zone `fr.`. Les serveurs de l'AFNIC nous indiquent en retour,
@ -79,6 +81,7 @@ Mais dans votre cas, vous hébergez vous-même votre propre serveur au sein de
votre zone, vous n'avez pas d'autre domaine à votre disposition. C'est votre zone, vous n'avez pas d'autre domaine à votre disposition. C'est
également le cas de Wikipédia : également le cas de Wikipédia :
<div lang="en-US">
``` ```
42sh$ dig @d0.org.afilias-nst.org. NS wikipedia.org. 42sh$ dig @d0.org.afilias-nst.org. NS wikipedia.org.
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 47396 ;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 47396
@ -94,6 +97,7 @@ wikipedia.org. 86400 IN NS ns1.wikimedia.org.
[...] [...]
``` ```
</div>
On voit ici que pour résoudre les sous-domaines de `wikipedia.org.`, il faut On voit ici que pour résoudre les sous-domaines de `wikipedia.org.`, il faut
demander à `nsX.wikimedia.org.`. Mais comment obtenir alors, l'adresse de ces demander à `nsX.wikimedia.org.`. Mais comment obtenir alors, l'adresse de ces
@ -103,6 +107,7 @@ C'est là que les *GLUE records* entrent en jeu !
J'ai volontairement tronqué la sortie de la commande précédente, en entier, c'est : J'ai volontairement tronqué la sortie de la commande précédente, en entier, c'est :
<div lang="en-US">
``` ```
42sh$ dig @d0.org.afilias-nst.org. NS wikipedia.org. 42sh$ dig @d0.org.afilias-nst.org. NS wikipedia.org.
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 47396 ;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 47396
@ -125,6 +130,7 @@ ns2.wikimedia.org. 86400 IN A 91.198.174.239
;; Time 2042-12-04 13:42:23 CET ;; Time 2042-12-04 13:42:23 CET
;; From 2001:500:f::1@53(UDP) in 15.2 ms ;; From 2001:500:f::1@53(UDP) in 15.2 ms
``` ```
</div>
Afin d'éviter de tourner en rond sans jamais avoir réponse à notre question, en Afin d'éviter de tourner en rond sans jamais avoir réponse à notre question, en
même temps que de nous répondre sur qui sont les serveurs faisant autorité pour même temps que de nous répondre sur qui sont les serveurs faisant autorité pour

View File

@ -29,10 +29,6 @@ login_x-TP2/basis.yml
login_x-TP2/vitrine.yml login_x-TP2/vitrine.yml
login_x-TP2/name-server.yml login_x-TP2/name-server.yml
login_x-TP2/matrix.yml login_x-TP2/matrix.yml
login_x-TP2/vars/matrix-config.yml
login_x-TP2/pgdump.sh
login_x-TP2/homeserver.yaml
login_x-TP2/matrix.nginx.conf
... ...
``` ```
</div> </div>
@ -49,17 +45,20 @@ Dans les deux cas, si vous n'en avez pas déjà une, vous devrez créer une clef
PGP à **votre nom et prénom**. PGP à **votre nom et prénom**.
Pour valider la signature, il est nécessaire d'avoir reçu la clef publique Pour valider la signature, il est nécessaire d'avoir reçu la clef publique
**séparément**. Vous avez le choix de la téléverser sur un serveur de clefs, **séparément**. Vous avez le choix de l'uploader sur un serveur de clefs, soit
soit de me fournir votre clef en main propre, soit de l'envoyer dans un de me fournir votre clef en main propre, soit de l'envoyer dans un courriel
courriel **distinct**. distinct.
### Signature du courriel ### Signature du courriel
[Enigmail](https://enigmail.net) est une extension très bien réputée pour Une version récente de [Thunderbird](https://www.thunderbird.net/fr/) vous
signer ses courriels depuis Thunderbird. permettra d'envoyer des courriels signés. Si vous n'avez qu'une version
ancienne, l'extension [Enigmail](https://enigmail.net) est très bien réputée
pour signer ses mails depuis Thunderbird. Bien entendu, de nombreuses autres
solutions sont disponibles.
Utilisez le service automatique <signcheck@nemunai.re> pour savoir si votre Utilisez le service automatique <signcheck@nemunai.re> pour savoir si votre
message est correctement signé et que je suis en mesure de vérifier la courriel est correctement signé et que je suis en mesure de vérifier la
signature. signature.
@ -75,20 +74,18 @@ Si vous recevez un rapport avec l'erreur suivante :
gpg: Signature made Tue Jan 01 16:42:23 2014 CET gpg: Signature made Tue Jan 01 16:42:23 2014 CET
gpg: using RSA key 842807A84573CC96 gpg: using RSA key 842807A84573CC96
gpg: requesting key E2CCD99DD37BD32E from hkp server pool.sks-keyservers.net gpg: requesting key E2CCD99DD37BD32E from hkp server keys.openpgp.org
gpg: Can't check signature: No public key gpg: Can't check signature: No public key
``` ```
</div> </div>
C'est que votre clef publique n'est pas dans mon trousseau et que les méthodes C'est que votre clef publique n'est pas dans mon trousseau et que les
de récupération automatique[^methods] n'ont pas permis de la trouver. Uploadez méthodes de récupération automatique n'ont pas permis de la
votre clef sur un serveur de clefs (et attendez quelques minutes sa trouver. Uploadez votre clef sur [un serveur de
propagation) ou envoyez un courriel au service signcheck avec votre clef clefs](https://keys.openpgp.org/) ou envoyez un courriel au service
publique en pièce-jointe, avant de retenter votre rendu. avec votre clef publique en pièce jointe, avant de retenter votre
rendu.
[^methods]: Le service va rechercher : un enregistrement PKA, un enregistrement
DANE OPENPGPKEY, un Web Key Directory, un enregistrement DNS CERT ou sur un
keyserver (soit keys.openpgp.org, soit pool.sks-keyservers.net).
#### Not explicit username #### Not explicit username
@ -103,3 +100,18 @@ Si vous recevez un rapport avec l'erreur suivante :
Votre clef ne contient sans doute pas vos noms et prénoms ou l'adresse Votre clef ne contient sans doute pas vos noms et prénoms ou l'adresse
électronique associée à la clef n'est pas celle que j'ai dans ma base de électronique associée à la clef n'est pas celle que j'ai dans ma base de
données. données.
#### I've decided to skip your e-mail
Si vous recevez un rapport concluant ainsi :
<div lang="en-US">
```
After analyzing your e-mail, I've decided to SKIP it.
```
</div>
Cela signifie que la lecture de votre courriel qui a été préférée n'est pas
celle d'un rendu. Vérifiez que vous n'envoyez pas votre clef publique avec
votre rendu.

View File

@ -13,7 +13,7 @@ possédant les caractéristiques suivantes :
Le choix de la technologie de virtualisation est laissé à votre 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* appréciation. L'ISO est réputée supportée par *Hyper-V* (Windows), *qemu*/*KVM*
(macOS, Linux, Windows) et VMware (macOS, Windows). (macOS, Linux, Windows) et VMware (macOS, Windows).\
L'hyperviseur qui vous laissera le plus de liberté (et avec lequel vous pourrez 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 apprendre le plus de choses !) est sans doute *qemu*, sous Linux ; vous pouvez
@ -42,17 +42,32 @@ de vous permettre de commencer à travailler sans plus attendre !
Gérer le réseau de son hyperviseur Gérer le réseau de son hyperviseur
---------------------------------- ----------------------------------
::::: {.more}
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.
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
manière et vous pouvez donc tester avec votre hyperviseur habituel.
:::::
Rares sont les machines qui, aujourd'hui, ne sont pas connectées à Internet (ou Rares sont les machines qui, aujourd'hui, ne sont pas connectées à Internet (ou
au moins à un réseau local, pour permettre d'y apporter les mises à jour). au moins à un réseau local, pour permettre d'y apporter les mises à jour).
La première chose qu'il va falloir faire avec notre hyperviseur, est donc de La première chose qu'il va falloir faire avec notre hyperviseur, est donc de
lui indiquer comment notre machine virtuelle accédera au réseau. lui indiquer comment notre machine virtuelle accédera au réseau.\
**Note :** Nous ne présenterons ici que les méthodes qui permettent d'obtenir un ::::: {.question}
Nous ne présenterons ici que les méthodes qui permettent d'obtenir un
réseau ayant toutes les caractéristiques d'utilisation et de contrôle que l'on réseau ayant toutes les caractéristiques d'utilisation et de contrôle que l'on
pourrait en attendre. Nous ne verrons donc pas le mode `user` de *qemu* par pourrait en attendre. Nous ne verrons donc pas le mode `user` de *qemu* par
exemple. exemple.
:::::
### Interface physique ### Interface physique
@ -224,6 +239,15 @@ où `wlp3s0` correspond à l'interface de notre route par défaut.
Démarrer la machine virtuelle Démarrer la machine virtuelle
----------------------------- -----------------------------
::::: {.more}
Comme pour la section précédentes, les exemples sont donnés pour `qemu`. Ils
sont à adapter en fonction de votre hyperviseur. Avec `qemu`, les exemples sont
à combiner avec la ligne de commande établie précédemment, il faut accumuler
les arguments avant de lancer la machine virtuelle.
:::::
### Ajouter un disque vierge ### Ajouter un disque vierge
Pour réaliser ce TP, nous aurons besoin d'un disque vierge : Pour réaliser ce TP, nous aurons besoin d'un disque vierge :
@ -294,7 +318,7 @@ pouvoir émettre un paquet sur le réseau.
<div lang="en-US"> <div lang="en-US">
``` ```
42sh$ ip link 42sh$ ip link
1: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000 1: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT
^^^^^^^^^^ ^^^^^^^^^^
``` ```
</div> </div>

View File

@ -3,7 +3,7 @@ title: Administration Linux avancée -- TP n^o^ 2
subtitle: "Maatma : l'hébergeur DIY" subtitle: "Maatma : l'hébergeur DIY"
author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps} author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps}
institute: EPITA institute: EPITA
date: Jeudi 4 mars 2021 date: Mercredi 9 mars 2022
abstract: | abstract: |
Durant ce deuxième TP, nous allons apprendre à déployer des services sur un Durant ce deuxième TP, nous allons apprendre à déployer des services sur un
serveur, de manière industrielle ! serveur, de manière industrielle !
@ -11,10 +11,10 @@ abstract: |
\vspace{1em} \vspace{1em}
La partie 5 de ce TP est un projet à rendre à <adlin@nemunai.re> au plus tard La partie 5 de ce TP est un projet à rendre à <adlin@nemunai.re> au plus tard
le **jeudi 18 mars 2021 à 12 h 42**. Consultez la dernière le **jeudi31mars 2021 à 23h42**. Consultez la dernière
section de chaque partie pour plus d'information sur les éléments à section de chaque partie pour plus d'information sur les éléments à
rendre. Et n'oubliez pas de répondre aux [questions de rendre. Et n'oubliez pas de répondre aux [questions de
cours](https://adlin.nemunai.re/quiz/9). cours](https://adlin.nemunai.re/quiz/20).
En tant que personnes sensibilisées à la sécurité des échanges électroniques, En tant que personnes sensibilisées à la sécurité des échanges électroniques,
vous devrez m'envoyer vos rendus signés avec votre clef PGP. Pensez à vous devrez m'envoyer vos rendus signés avec votre clef PGP. Pensez à

View File

@ -16,28 +16,40 @@ Faites le tour des configurations afin de vous assurer qu'elles sont
suffisamment durcies. Pensez à noter vos changements, vous devrez les suffisamment durcies. Pensez à noter vos changements, vous devrez les
reporter dans un fichiers au chapitre suivant ! reporter dans un fichiers au chapitre suivant !
À ce stade, vous devez suivre les recommandations de l'ANSSI que vous
jugez adaptées à votre déploiement :
<https://www.ssi.gouv.fr/guide/recommandations-de-securite-relatives-a-un-systeme-gnulinux/>
Ma première vitrine Ma première vitrine
------------------- -------------------
Sur le domaine `login-x.adlin2022.p0m.fr`, déployez une vitrine d'entreprise Sur le domaine `login-x.adlin2023.example.tld`, déployez une vitrine
basique (pas besoin d'un Wordpress, un simple lot de pages HTML fera l'affaire). 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.
Vous aurez pour cela besoin d'un serveur web, dont le choix est laissé à votre Vous aurez pour cela besoin d'un serveur web, dont le choix est laissé à votre
discrétion. discrétion.
Vous pouvez utiliser les services de [Let's Encrypt](https://letsencrypt.org/) Vous pouvez utiliser les services de [Let's Encrypt](https://letsencrypt.org/)
pour obtenir un certificat TLS. Compte tenu des limitations imposées, vous ne pour obtenir un certificat TLS.\
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 ::::: {.warning}
de nombreux autres services gratuits similaire :
[ZeroSSL](https://zerossl.com/), [buypass](https://www.buypass.com/), ... 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/), ...\
D'ailleurs, si vous disposez de votre propre nom de domaine et que vous 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 souhaitez l'utiliser pour ce TP, vous pouvez suivre les instructions dans
l'interface de Maatma pour pouvoir l'utiliser. l'interface de Maatma pour pouvoir l'utiliser.
:::::
Une fois votre serveur web configuré et votre vitrine installée, accédez à
Une fois votre serveur web configuré et votre vitrine déployée, accédez à
votre domaine depuis votre poste pour constater la bonne marche de votre domaine depuis votre poste pour constater la bonne marche de
l'installation. l'installation.

View File

@ -7,7 +7,7 @@ Accéder à la machine virtuelle
------------------------------ ------------------------------
Une fois la machine virtuelle démarrée, vous pouvez vous y connecter en `root` Une fois la machine virtuelle démarrée, vous pouvez vous y connecter en `root`
avec le mot de passe `adlin2022`. avec le mot de passe `adlin2023`.
Vous pouvez également démarrer en mode *single user*, mais comme votre disque 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 n'est sans doute pas encore utilisable à ce stade, vous ne pourrez pas changer
@ -23,13 +23,17 @@ Se mettre à l'aise
------------------ ------------------
Un serveur SSH est déjà installé et configuré pour vous permettre d'avoir une Un serveur SSH est déjà installé et configuré pour vous permettre d'avoir une
interface plus agréable que celle de votre hyperviseur. interface plus agréable que celle de votre hyperviseur.\
**Attention :** si votre machine virtuelle est directement connectée au réseau ::::: {.warning}
Si votre machine virtuelle est directement connectée au réseau
local (sans passer par un NAT), n'oubliez pas de modifier le mot de passe local (sans passer par un NAT), n'oubliez pas de modifier le mot de passe
`root` pour éviter que n'importe qui sur le réseau local (et ayant accès à ce `root` pour éviter que n'importe qui sur le réseau local (et ayant accès à ce
TP), ne rentre sur votre machine. TP), ne rentre sur votre machine.
:::::
Afin de vous faciliter la configuration de la machine par la suite, vos clefs Afin de vous faciliter la configuration de la machine par la suite, vos clefs
SSH publiques, [déclarées au SSH publiques, [déclarées au
CRI](https://cri.epita.fr/users/nemunaire/ssh-keys/), sont automatiquement CRI](https://cri.epita.fr/users/nemunaire/ssh-keys/), sont automatiquement
@ -81,7 +85,9 @@ Après avoir installé le paquet, vous devrez ajouter les utilisateurs autorisé
à se servir de `sudo` dans le groupe `sudo` ou `wheel` (en fonction des à 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 distributions). Vous pouvez également définir des conditions plus précise en
éditant le fichier `/etc/sudoers` (utilisez impérativement `visudo(1)` pour éditant le fichier `/etc/sudoers` (utilisez impérativement `visudo(1)` pour
éditer ce fichier). éditer ce fichier).\
::::: {.code}
**Super astuce !** votre terminal rit encore de vous, affichant `Permission **Super astuce !** votre terminal rit encore de vous, affichant `Permission
Denied` car vous avez oublié de préfixer votre commande par `sudo` ? essayez : Denied` car vous avez oublié de préfixer votre commande par `sudo` ? essayez :
@ -92,6 +98,8 @@ sudo !!
``` ```
</div> </div>
:::::
### Top confort dans son coquillage ### Top confort dans son coquillage
Un shell brut de configuration, c'est souvent source d'erreur ! N'hésitez pas à Un shell brut de configuration, c'est souvent source d'erreur ! N'hésitez pas à