tuto2 subject done

This commit is contained in:
nemunaire 2019-03-15 12:59:55 +01:00
parent 205ace39fa
commit 7380a81172
12 changed files with 197 additions and 189 deletions

View File

@ -1,6 +1,6 @@
include ../pandoc-opts.mk
SOURCES = tutorial.md setup.md what.md ansible.md deploiement-svc.md rendu.md
SOURCES = tutorial.md setup.md maatma.md what.md vitrine.md ansible.md nameserver.md deploiement-svc.md rendu.md
all: tutorial.pdf

View File

@ -3,16 +3,11 @@
Automatiser la configuration de son SI
=======================================
Aujourd'hui, vous n'avez qu'une seule machine à administrer, et déjà, j'ai pu
entendre des soupirs lorsque vous avez dû configurer ENCORE CE RÉSEAU DE
*$&*%#. Imaginez maintenant que vous ayez à en administrer 10, 100, 1000 ou
encore davantage !
Comme tout bon ~~paresseux~~ sys. admin qui se respecte, sans plus attendre,
vous allez vouloir automatiser toutes ces actions rébarbatives. Comme de très
nombreuses personnes sont passées par là avant vous, il existe un grand nombre
de solutions pour gérer les configurations d'un parc de machines. Parmi les
plus connues, citons : [Puppet](https://puppet.com/),
vous allez vouloir automatiser toutes ces actions rébarbatives (configurer des
services). Comme de très nombreuses personnes sont passées par là avant vous,
il existe un grand nombre de solutions pour gérer les configurations d'un parc
de machines. Parmi les plus connues, citons : [Puppet](https://puppet.com/),
[Chef](http://www.chef.io/), [SaltStack](https://saltstack.com/) ou encore
[Ansible](https://www.ansible.com/).
@ -46,11 +41,14 @@ Résultat attendu
nouvelle machine, identique à celle que vous venez de configurer, à partir
d'une ISO et d'un nouveau disque.
Maintenant que vous savez vous connecter au réseau et formater un disque, vous
pouvez ajouter les options `adlin.format=/dev/sda` et `adlin.net=easy` à la
ligne de commande du noyau afin de, respectivement, formater le disque
`/dev/sda` si la partition racine n'est pas trouvée, et obtenir une adresse IP
par DHCP. Vous pourrez ainsi très facilement tester vos recettes.
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
système et des utilisateurs.
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
typique d'une entreprise (cf. la 4e question de cours ;)). Cette page doit être
accessible depuis votre domaine <https://login_x.adlin2020.p0m.fr/>.
Mon première commande

View File

@ -7,18 +7,27 @@ Très bien ! vous semblez avoir compris le fonctionnement de notre
gestionnaire de configuration.
Après cet échauffement, vous devriez être prêt à créer un *playbook*
dédié à l'installation de [Tiny Tiny RSS](https://tt-rss.org/) :
dédié à l'installation d'un serveur [Matrix](https://matrix.org/) :
![TinyTinyRSS](ttrss.png "Le lecteur de flux RSS : Tiny Tiny RSS")
![Riot](riot.png "Riot : un des clients utilisable pour joindre son serveur Matrix")
Très utile pour faire de la veille technologique, ce magnifique
lecteur de flux RSS vous permettra de ne plus jamais rien manquer !
Vous trouverez la documentation d'installation précise et détaillée
à : <https://git.tt-rss.org/fox/tt-rss/wiki/InstallationNotes>.
Vous connaissez et utilisez sans doute Slack, un service de messagerie
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 discutter des
personnes qui, bien qu'utilisant le même service, ne sont pas dans le même
groupe ; mais surtout, il vient avec aucun élément de sécurité : il n'est en
effet pas possible d'avoir de chiffrement de bout-en-bout, entre deux personnes
ou un groupe, et les administrateurs des groupes, tout comme le gouvernement
américian, ont accès à tout l'historique. Vous l'aurez compris, Matrix est donc
une solution de messagerie décentralisée et permet de réaliser du chiffrement
de bout-en-bout.
Choisissez judicieusement votre serveur web et votre serveur de base
de données ; ceux-ci ne sont pas imposés.
Vous trouverez la documentation d'installation précise et détaillée à :
<https://github.com/matrix-org/synapse/blob/master/README.rst> (attention, une
release 1.0 est prévue pour dans peu de temps, 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).
Vous devrez attacher une importance tout particulière à la sécurité de
la solution que vous déployez : configurations durcies, utilisateur
@ -35,11 +44,32 @@ modules décrits dans la documentation standard !
Tous les éléments de configuration (mot de passes de connexion à la
base de données, chemins, etc.) sont à déclarer comme variables dans
le fichier `vars/ttrss-config.yml`, que vous prendrez soin d'importer
le fichier `vars/matrix-config.yml`, que vous prendrez soin d'importer
dans votre *Playbook*.
Vous devrez générer un certificat TLS afin de joindre les autres serveurs.
## Backup
Vous ajouterez enfin une tâche hebdomadaire de sauvegarder de la base
de données. Le *dump* obtenu est à placer dans `/var/backups/`.
## Client de test
Vous n'êtes pas tenu d'installer un client. Pour vos tests, vous pouvez
utiliser <https://riot.im/app/>, en changeant l'adresse du serveur Matrix pour
votre sous-domaine dédié à Matrix (normalement
<https://matrix.login_x.srs.p0m.fr/>). (Conservez le serveur d'identité à
<https://vector.im>).
## Validation
Pour valider l'installation de votre serveur, rejoignez le canal
`#adlin:nemunai.re` et envoyez un message « Ping ! » à `@nemubot:nemunai.re`
qui s'occupera de valider ce pallier.
Vous devriez également pouvoir tester entre-vous.

View File

@ -0,0 +1,70 @@
\newpage
Maatma
======
Maatma sera votre bureau d'enregistrement (*registrar*) et votre fournisseur
d'accès à une plage d'IPv6 routable sur Internet.
**Avertissement :** Ce service vous est proposé à titre éducatif. Vous savez
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
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
condamnable (mais libre à vous de tester la plate-forme en elle-même).
L'interface de Maatma est accessible à cette adresse :
<https://adlin.nemunai.re/maatma/>. Utilisez votre identifiant CRI pour vous y
connecter.
Présentation du système d'information
-------------------------------------
Le système d'information que vous allez avoir à gérer aujourd'hui est très
restreint, car il ne se compose que d'une seule machine !
Cette semaine, nous allons installer et configurer plusieurs services sur cette
machine. Pour rendre les choses un peu plus attrayante, une fois démarrée,
votre machine est automatiquement accessible depuis Internet.
L'image ISO que vous avez récupérée met à votre disposition un système Debian
minimaliste. Cette image s'occupe de faire le nécessaire pour démarrer le
système, sans que vous ayez à réaliser une installation complète, qui est plus
longue qu'intéressante. Néanmoins, si vous avez des interrogations au sujet de
la manière dont une installation se fait, ou du fonctionnement du bootloader,
n'hésitez pas à poser vos questions !
Tunnel IPv6
-----------
Au premier lancement de votre VM, la machine vous demandera d'indiquer un jeton
afin de mettre en place le tunnel IPv6.
Afin d'en obtenir un, rendez-vous sur la page Tunnels et créez un nouveau
tunnel. Un jeton de 10 caractères s'affichera alors, c'est celui que vous
devrez recopier dans le terminal (attention à la casse !).
### Test du tunnel
L'interface `wg0` correspond à la porte d'entrée du trafic Internet. C'est elle
que vous devez garder avec attention.
Votre passerelle répond aux `ping`, une fois la connexion établie, vous devriez
pouvoir `ping 2a01:e0a:2b:2252::1`.
Domaine de test
---------------
En plus de vous fournir une IPv6, vous disposerez d'un nom de domaine ainsi
qu'une délégation sur un sous-domaine.
Commencez par demander un nom de domaine *Association simple*, sans un premier
temps. Ceci créera un domaine qui vous permettra d'accéder à votre machine dans
avoir à connaître son IP.
Dans un deuxième temps, nous verrons comment tirer parti de la délégation. Vous
pouvez l'ignorer pour le moment.

View File

@ -0,0 +1,21 @@
\newpage
Délégation de nom de domaine
============================
La deuxième solution proposée par Maatma est une délégation de nom de domaine.
Alors que jusque là, c'était les serveurs DNS de Maatma qui répondaient aux
requêtes DNS, avec la délégation, ce sera à vous, dans votre VM, de répondre
aux requêtes venues tout droit d'Internet.
Voici les grandes étapes :
* choisir un serveur DNS autoritaire (BIND, NSD, Knot, PowerDNS, djbDNS, ...) ;
* éditer la zone de votre domaine ;
* 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 ;
* 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 é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 ANY login_x.srs.p0m.fr` 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/>.

View File

@ -25,11 +25,14 @@ en fonction de votre organisation ou de vos choix) :
<div lang="en-US">
```
login_x-TP2/ttrss.yml
login_x-TP2/vars/ttrss-config.yml
login_x-TP2/basis.yml
login_x-TP2/vitrine.yml
login_x-TP2/name-server.yml
login_x-TP2/matrix.yml
login_x-TP2/vars/matrix-config.yml
login_x-TP2/pgdump.sh
login_x-TP2/config.php.j2
login_x-TP2/ttrss.nginx.conf
login_x-TP2/homeserver.yaml
login_x-TP2/matrix.nginx.conf
...
```
</div>

BIN
tutorial/ansible/riot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

View File

@ -214,7 +214,7 @@ de faire du NAT.
<div lang="en-US">
```bash
sysctl -w net.ipv4.ip_forward=1
iptables -A POSTROUTING -o wlp3s0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o wlp3s0 -j MASQUERADE
```
</div>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

View File

@ -1,6 +1,6 @@
---
title: Administration Linux avancée -- TP n^o^ 2
subtitle: fixit_f to the rescue
subtitle: Maatma : l'hébergeur DIY
author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps}
institute: EPITA
date: Jeudi 14 mars 2019
@ -12,7 +12,9 @@ abstract: |
La partie 4 de ce TP est un projet à rendre à <adlin@nemunai.re> au plus tard
le **vendredi 29 mars 2019 à 00 h 42 du matin**. Consultez la dernière
section de chaque partie pour plus d'information sur les éléments à rendre.
section de chaque partie pour plus d'information sur les éléments à
rendre. Et n'oubliez pas de répondre aux [questions de
cours](https://www.epitaf.fr/moodle/mod/quiz/view.php?id=268).
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 à

View File

@ -0,0 +1,41 @@
\newpage
Vitrine
=======
Vitrine sécurisée ?
-------------------
Avant de commencer votre travail, il est important de mettre en place
toutes les sécurités nécessaires au bon déroulement de votre mise en
production. Vérifiez qu'aucun service n'écoute inutilement sur
Internet, et renforcez cela au moyen d'un pare-feu (`iptables` ou
`nftables` par exemple).
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 !
Ma première vitrine
-------------------
Sur le domaine `login_x.adlin2020.p0m.fr`, déployez une vitrine d'entreprise
basique (pas besoin d'un Wordpress, un simple lot de pages HTML fera l'affaire).
Vous aurez pour cela besoin d'un serveur web, dont le choix est laissé à votre
discrétion.
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
pourrez pas tous en créer un aujourd'hui, mais n'hésitez pas à retenter un peu
plus tard dans la semaine.
*D'ailleurs, si vous disposez de votre propre nom de domaine et que vous
souhaitez l'utiliser pour ce TP, n'hésitez pas à me solliciter pour que je
mette en place les redirections adéquates.*
Une fois votre serveur web configuré et votre vitrine installée, accédez à
votre domaine depuis votre poste pour constater la bonne marche de
l'installation.

View File

@ -3,28 +3,11 @@
Démarrer sur le SI du jour
==========================
Présentation du système d'information
-------------------------------------
Le système d'information que vous allez avoir à gérer aujourd'hui est très
restreint, car il ne se compose que d'une seule machine !
Cette semaine, nous allons installer et configurer de nombreux services sur
cette machine.
L'image ISO que vous avez récupérée met à votre disposition un système Debian
minimaliste. Cette image s'occupe de faire le nécessaire pour démarrer le
système, sans que vous ayez à réaliser une installation complète, qui est plus
longue qu'intéressante. Néanmoins, si vous avez des interrogations au sujet de
la manière dont une installation se fait, ou du fonctionnement du bootloader,
n'hésitez pas à poser vos questions !
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 `adlin2019`.
avec le mot de passe `adlin2020`.
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
@ -36,146 +19,6 @@ 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.
Configuration du système de fichiers
------------------------------------
### Système initial
L'image ISO sur laquelle votre machine virtuelle démarre va tenter de monter un
OverlayFS avec la première partition du premier disque qu'il rencontre.
Vous ne pourrez pas apporter de modifications à votre système de fichiers tant
que vous n'aurez pas démarré dans le mode "disque dur configuré".
### Table des partitions
Si votre disque a fraîchement été créé, celui-ci ne contient encore aucune
partition, il ne contient d'ailleurs pas même de table de partitions !
Pour éditer (ou créer ...) la table de partitions d'un disque, vous pouvez
utiliser les utilitaires `fdisk`, `cfdisk`, `sfdisk`, `parted`, `gdisk`. Chacun
de ses programmes prend en argument le disque à modifier :
<div lang="en-US">
```
cfdisk /dev/sda
```
</div>
Le TP ne se concentrant pas sur la phase de démarrage, vous pouvez ignorer les
choix de type de tables, de partitions, leurs drapeaux, les étiquettes, etc.
Assurez-vous de créer au moins deux partitions : la première occupera la
majeure partie de votre disque, tandis que la deuxième peut se limiter à une
centaine de MB, pour l'exercice.
Assurez-vous de bien lire tous les messages d'avertissements ! Il est important
que vous comprenniez ce que vous faites à ce stade, car cela peut entraîner des
pertes de données.
### Système de fichiers
Les partitions sont maintenant créées, mais il n'est pas encore possible de les
utiliser telles-quelles. Afin de pouvoir les utiliser, il est d'abord nécessaire
de les formater. Linux supporte une grande variété de systèmes de fichiers,
chacun ayant des caractéristiques et des usages particuliers. Le système de
fichiers « généraliste » est l'*Extended File System* (`ext`),
Durant la phase de formatage, les structures (telles que les tableaux d'inœuds,
le journal des transactions, etc. selon les caractéristiques du système de
fichiers) seront inscrites sur le disque. Un certain nombre d'en-têtes
référençant des pointeurs vers ces structures et autres particularités
éventuelles de la partition seront également inscrits. Il n'est à ce stade pas
nécessaire de mettre à zéro chaque secteur du disque ; il faut seulement
s'assurer d'initialiser les structures qui seront utilisées pour ne pas
récupérer de données aléatoires imprévisibles (notamment, le tableau d'inœuds
doit se terminer par une entrée `NULL`, qui sera interprété comme une fin de
liste par le noyau).
Utilisez les utilitaires `mkfs.X` (où `X` est à remplacer par le système de
fichiers que vous avez choisi) pour formater vos partitions.
### Partition d'échange
La *swap* (partition d'échange en français) est un espace du disque que l'on
dédie pour étendre la mémoire vive du système. En cas de débordement, le
système pourra choisir de placer sur le disque des pages dont il n'a pas besoin
sur le moment. Les pages placées dans l'espace d'échange ne seront à nouveau
utilisables que lorsque le noyau les aura replacées dans la RAM.
Encore de nos jours, où nos machines ont souvent beaucoup plus de RAM que ce
dont le système aura jamais besoin, il reste important d'avoir une partition
d'échange, à hauteur de 20 % de la quantité de mémoire
disponible[^currentswap].
[^currentswap]: <https://www.redhat.com/en/blog/do-we-really-need-swap-modern-systems>
Pour formater une partition d'échange, on utilise l'utilitaire `mkswap`.
### Montage automatique des partitions
#### Montage des partitions annexes
Automatique ne veut pas dire magique ! Pour chaque partition dont on dispose,
il va falloir indiquer dans le fichier `/etc/fstab` l'emplacement dans
l'arborescence où attacher la partition ainsi que quelques autres
caractéristiques.
<div lang="en-US">
```
# <fs> <mountpoint> <type> <opts> <dump/pass>
/dev/sda1 / ext4 defaults 0 1
/dev/sda2 none swap swap 0 0
none /tmp tmpfs defaults,nosuid,nodev,noexec 0 0
```
</div>
Notons que le montage des partitions est effectué par le système
d'initialisation (un simple appel à la commande `mount -a` ou équivalent). À
aucun moment le noyau ne va lire le contenu de ce fichier.
Voir aussi : `fstab(5)`
#### Montage de la racine
Nous pouvons constater que nous avons indiqué dans ce fichier l'emplacement de
notre partition racine. Mais ... le système d'init se trouvant sur cette
partition racine, comment peut-il monter lui-même la partition sur laquelle se
trouve son programme ?!
Parmi les dernières étapes de démarrage du noyau, juste avant le lancement du
programme se trouvant à l'emplacement `/sbin/init` (ou surchargé par l'option
`init=`), le noyau va monter la partition qui lui a été précisée dans l'option
`root=`.
Vous l'aurez donc compris, afin de bénéficier d'un système utilisable, vous
allez devoir redémarrer et ajouter l'option `root=/dev/sda1` à la ligne de
commande de votre noyau (ou choisir la ligne « avec disque configuré » !).
Persistance de la configuration réseau
--------------------------------------
Maintenant que notre système de fichiers n'est plus en lecture seul, vous allez
pouvoir y apporter des modifications. Par exemple pour installer un client
DHCP, afin de vous connecter au réseau facilement !
Deux solutions s'offrent à vous pour rendre persistant votre configuration réseau :
- éditer le fichier `/etc/network/interfaces`, en suivant les directives de la
[documentation Debian](https://wiki.debian.org/NetworkConfiguration) ;
- éditer le fichier `/etc/systemd/network/50-dhcp.network`, en suivant les
directives de
[`systemd-networkd`](https://www.freedesktop.org/software/systemd/man/systemd.network.html).
À ce stade, vous devriez pouvoir redémarrer votre machine virtuelle et
constater la présence d'une IP dans l'en-tête de bienvenue.
Se mettre à l'aise
------------------