work on tuto2

This commit is contained in:
nemunaire 2019-03-12 13:02:39 +01:00
parent 2788600d4f
commit 58e541d6ad
4 changed files with 114 additions and 107 deletions

View file

@ -12,7 +12,7 @@ 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 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 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 de solutions pour gérer les configurations d'un parc de machines. Parmi les
plus connues, citons : [Puppet](https://puppet.com/), plus connues, citons : [Puppet](https://puppet.com/),
[Chef](http://www.chef.io/), [SaltStack](https://saltstack.com/) ou encore [Chef](http://www.chef.io/), [SaltStack](https://saltstack.com/) ou encore
[Ansible](https://www.ansible.com/). [Ansible](https://www.ansible.com/).
@ -23,17 +23,17 @@ Introduction à Ansible
Ansible est une solution de gestion de configuration. Basé sur Ansible est une solution de gestion de configuration. Basé sur
[Python](https://www.python.org/) et [Python](https://www.python.org/) et
[YAML](http://www.yaml.org/spec/1.2/spec.html), sa principale particularité est [YAML](http://www.yaml.org/spec/1.2/spec.html), sa principale particularité est
de ne pas nécessité de daemon sur les machines qu'il va gérer : tout se fait de ne pas nécessité de daemon sur les machines qu'il va gérer : tout se fait
exclusivement via SSH, à partir de la machine d'un administrateur, possédant exclusivement via SSH, à partir de la machine d'un administrateur, possédant
Ansible. Ansible.
Son installation est très simple, car les dépendances sont minimes et l'outil Son installation est très simple, car les dépendances sont minimes et l'outil
n'a pas besoin de base de données pour fonctionner : tout va se faire à partir n'a pas besoin de base de données pour fonctionner : tout va se faire à partir
d'une arborescence de fichiers, qui sera gérée par Git. d'une arborescence de fichiers, qui sera gérée par Git.
Commencez par installer Ansible, sur une machine distincte de la machine Commencez par installer Ansible, sur une machine distincte de la machine
virtuelle démarrée : la machine hôte sera parfaitement adaptée à cette tâche, virtuelle démarrée : la machine hôte sera parfaitement adaptée à cette tâche,
d'autant plus que l'installation de la plate-forme est propre et légère : vous d'autant plus que l'installation de la plate-forme est propre et légère : vous
ne risquez pas de vous retrouver avec une usine à gaz impossible à retirer. ne risquez pas de vous retrouver avec une usine à gaz impossible à retirer.
[Consultez la procédure d'installation pour votre distribution ici](http://docs.ansible.com/ansible/latest/intro_installation.html). [Consultez la procédure d'installation pour votre distribution ici](http://docs.ansible.com/ansible/latest/intro_installation.html).
@ -63,7 +63,7 @@ chose à faire consiste à les inventorier.
Commençons par créer un répertoire, qui contiendra l'ensemble de nos Commençons par créer un répertoire, qui contiendra l'ensemble de nos
configurations à destination d'Ansible. Dans ce répertoire, créons un fichier configurations à destination d'Ansible. Dans ce répertoire, créons un fichier
d'inventaires `hosts`, contenant l'IP de notre machine : d'inventaires `hosts`, contenant l'IP de notre machine :
<div lang="en-US"> <div lang="en-US">
```yaml ```yaml
@ -83,7 +83,7 @@ donner des caractéristiques spécifiques à vos machines.
### `ping` ### `ping`
Lancez ensuite la commande suivante : Lancez ensuite la commande suivante :
<div lang="en-US"> <div lang="en-US">
``` ```
@ -107,12 +107,12 @@ SSH sur les machines, pour éviter d'avoir à taper le mot de passe à chaque
test. test.
Si vous avez bien suivi jusqu'ici, vous savez qu'il ne faut pas utiliser le Si vous avez bien suivi jusqu'ici, vous savez qu'il ne faut pas utiliser le
compte `root` directement ! Pas d'inquiétude, tout est prévu dans Ansible : compte `root` directement ! Pas d'inquiétude, tout est prévu dans Ansible :
retirer l'option `--user root` si votre nom d'utilisateur local est identique retirer l'option `--user root` si votre nom d'utilisateur local est identique
que celui dans la machine virtuelle, ou adaptez l'option en conséquence. que celui dans la machine virtuelle, ou adaptez l'option en conséquence.
Et ajoutez les options `--become` et `--ask-become-pass` (utilisez `--sudo` et Et ajoutez les options `--become` et `--ask-become-pass` (utilisez `--sudo` et
`--ask-sudo-pass` pour les vieilles versions) : `--ask-sudo-pass` pour les vieilles versions) :
<div lang="en-US"> <div lang="en-US">
```bash ```bash
@ -123,9 +123,9 @@ ansible --inventory-file hosts all -m ping -u bruce --become --ask-become-pass
### Les modules ### Les modules
Les modules Ansible ont généralement deux missions distinctes : Les modules Ansible ont généralement deux missions distinctes :
- récupérer des informations en allant les extraire sur chaque machine ; - récupérer des informations en allant les extraire sur chaque machine ;
- pousser des nouvelles informations pour atteindre un état précis. - pousser des nouvelles informations pour atteindre un état précis.
Lorsque les informations récupérées montrent que l'état est déjà atteint, Lorsque les informations récupérées montrent que l'état est déjà atteint,
@ -133,7 +133,7 @@ aucune modification n'est faite sur la machine, on parle d'idempotence.
À noter cependant que lorsque l'on retire un état de notre recette, il est À noter cependant que lorsque l'on retire un état de notre recette, il est
conservé tel quel sur la machine. Par exemple, si un utilisateur `toto` est conservé tel quel sur la machine. Par exemple, si un utilisateur `toto` est
créé suite à l'application d'une recette décrivant l'utilisateur `toto` ; si créé suite à l'application d'une recette décrivant l'utilisateur `toto` ; si
l'on supprime la description, l'utilisateur ne sera pas supprimé des machines l'on supprime la description, l'utilisateur ne sera pas supprimé des machines
sur lequel la recette aura été appliquée. Pour qu'il soit supprimé, il faut sur lequel la recette aura été appliquée. Pour qu'il soit supprimé, il faut
modifier la description pour signaler que cet utilisateur ne doit pas modifier la description pour signaler que cet utilisateur ne doit pas
@ -144,7 +144,7 @@ trouvé, il sera donc supprimé.
### Collecte du mercredi ### Collecte du mercredi
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 :
<div lang="en-US"> <div lang="en-US">
```bash ```bash
@ -165,7 +165,7 @@ Ma première recette
Un livre de recettes (*playbook* dans le vocabulaire d'Ansible), regroupe les Un livre de recettes (*playbook* dans le vocabulaire d'Ansible), regroupe les
descriptions des états que l'on souhaite obtenir sur un groupe de machines données. descriptions des états que l'on souhaite obtenir sur un groupe de machines données.
Par exemple, voici à quoi pourrait ressembler un tel recueil : Par exemple, voici à quoi pourrait ressembler un tel recueil :
<div lang="en-US"> <div lang="en-US">
```yaml ```yaml
@ -202,7 +202,7 @@ d'Ansible](http://docs.ansible.com/ansible/latest/playbooks.html).
### Exécution d'un *Playbook* ### Exécution d'un *Playbook*
Placer le contenu dans un fichier YAML, par exemple `playbook.yml`, non loin du Placer le contenu dans un fichier YAML, par exemple `playbook.yml`, non loin du
fichier `hosts` créé à la section précédentes, puis lancez : fichier `hosts` créé à la section précédentes, puis lancez :
<div lang="en-US"> <div lang="en-US">
```bash ```bash
@ -214,7 +214,7 @@ ansible-playbook -i hosts playbook.yml
### Coup de pouce ### Coup de pouce
Voici à quoi ressemblerait votre premier playbook créant l'utilisateur Voici à quoi ressemblerait votre premier playbook créant l'utilisateur
`adeline` : `adeline` :
<div lang="en-US"> <div lang="en-US">
```yaml ```yaml
@ -252,7 +252,7 @@ si un changement à eu lieu. Par exemple, nous pourrions déclarer une tâche de
redémarrage du serveur web, seulement lorsque sa configuration est mise à redémarrage du serveur web, seulement lorsque sa configuration est mise à
jour. jour.
Pour se faire, il faut ajouter un élément `notify` à sa tâche : Pour se faire, il faut ajouter un élément `notify` à sa tâche :
<div lang="en-US"> <div lang="en-US">
```yaml ```yaml
@ -263,7 +263,7 @@ Pour se faire, il faut ajouter un élément `notify` à sa tâche :
``` ```
</div> </div>
Puis, au même niveau que les *tasks*, on déclare nos *handlers* : Puis, au même niveau que les *tasks*, on déclare nos *handlers* :
<div lang="en-US"> <div lang="en-US">
```yaml ```yaml
@ -281,9 +281,9 @@ documentation](http://docs.ansible.com/ansible/latest/playbooks_intro.html#handl
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://ringyt.wordpress.com/2017/05/23/default-hardened-ssh-server-config/> ; - <https://ringyt.wordpress.com/2017/05/23/default-hardened-ssh-server-config/> ;
- <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
@ -293,7 +293,7 @@ modification de sa configuration.
Les variables Les variables
------------- -------------
Les variables peuvent provenir de très nombreux emplacements : définies Les variables peuvent provenir de très nombreux emplacements : définies
spécifiquement pour l'hôte, chargées depuis des fichiers lié au groupe auquel spécifiquement pour l'hôte, chargées depuis des fichiers lié au groupe auquel
appartient la machine, liées à la recette ou à la tâche en cours d'exécution, appartient la machine, liées à la recette ou à la tâche en cours d'exécution,
récupérée par un module (comme le module `setup`). récupérée par un module (comme le module `setup`).
@ -323,7 +323,7 @@ datacenter de rattachement, etc.
#### Dans un *playbook* #### Dans un *playbook*
De la même manière que dans l'inventaire, il est possible de définir des De la même manière que dans l'inventaire, il est possible de définir des
variables dans une recette : variables dans une recette :
<div lang="en-US"> <div lang="en-US">
```yaml ```yaml
@ -333,7 +333,7 @@ variables dans une recette :
``` ```
</div> </div>
Ces variables peuvent être placées dans un fichier, pour plus de lisibilité : Ces variables peuvent être placées dans un fichier, pour plus de lisibilité :
<div lang="en-US"> <div lang="en-US">
```yaml ```yaml
@ -343,7 +343,7 @@ Ces variables peuvent être placées dans un fichier, pour plus de lisibilité :
``` ```
</div> </div>
Le format correspond au sous arbre que l'on pourrait trouver sous `vars` : Le format correspond au sous arbre que l'on pourrait trouver sous `vars` :
<div lang="en-US"> <div lang="en-US">
```yaml ```yaml
@ -369,10 +369,8 @@ I'm running {{ ansible_system }} {{ ansible_os_family }} on {{ ansible_system_ve
</div> </div>
Ce format est relativement générique. Ainsi, pour accéder aux éléments d'une Ce format est relativement générique. Ainsi, pour accéder aux éléments d'une
table de hash/dictionnaire, on utilise le caractère `.` ; table de hash/dictionnaire, on utilise le caractère `.` ; les crochets `[x]`
sont utilisés principalement pour accéder aux éléments des tableaux :
Les crochets `[x]` sont utilisés principalement pour accéder aux éléments des
tableaux :
<div lang="en-US"> <div lang="en-US">
``` ```
@ -380,7 +378,7 @@ My first nameserver is: {{ ansible_dns.nameservers[0] }}.
``` ```
</div> </div>
ou d'un dictionnaire lorsque la clef doit être récupérée d'une variable : ou d'un dictionnaire lorsque la clef doit être récupérée d'une variable :
<div lang="en-US"> <div lang="en-US">
``` ```
@ -396,7 +394,7 @@ d'aplatir la liste retournée.
#### Dans les recettes #### Dans les recettes
Au sein même de votre description YAML, vous pouvez utiliser la puissance de Au sein même de votre description YAML, vous pouvez utiliser la puissance de
Jinja2 : Jinja2 :
<div lang="en-US"> <div lang="en-US">
```yaml ```yaml
@ -414,7 +412,7 @@ puis celles de `/vars/webservers_Debian.yml` seront chargées dans le contexte.
#### Conditions #### Conditions
Une autre utilisation possible des variables est d'appliquer ou de passer des Une autre utilisation possible des variables est d'appliquer ou de passer des
tâches. Par exemple : tâches. Par exemple :
<div lang="en-US"> <div lang="en-US">
```yaml ```yaml

View file

@ -3,32 +3,32 @@
Déploiement d'un service via Ansible Déploiement d'un service via Ansible
==================================== ====================================
Très bien ! vous semblez avoir compris le fonctionnement de notre Très bien ! vous semblez avoir compris le fonctionnement de notre
gestionnaire de configuration. 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 de [Tiny Tiny RSS](https://tt-rss.org/) : dédié à l'installation de [Tiny Tiny RSS](https://tt-rss.org/) :
![TinyTinyRSS](ttrss.png "Le lecteur de flux RSS : Tiny Tiny RSS") ![TinyTinyRSS](ttrss.png "Le lecteur de flux RSS : Tiny Tiny RSS")
Très utile pour faire de la veille technologique, ce magnifique Très utile pour faire de la veille technologique, ce magnifique
lecteur de flux RSS vous permettra de ne plus jamais rien manquer ! lecteur de flux RSS vous permettra de ne plus jamais rien manquer !
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://git.tt-rss.org/fox/tt-rss/wiki/InstallationNotes>. à : <https://git.tt-rss.org/fox/tt-rss/wiki/InstallationNotes>.
Choisissez judicieusement votre serveur web et votre serveur de base Choisissez judicieusement votre serveur web et votre serveur de base
de données ; ceux-ci ne sont pas imposés. de données ; ceux-ci ne sont pas imposés.
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
dédié lorsque c'est possible (pas de `root` !), droits d'accès et 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](http://docs.ansible.com/ansible/latest/list_of_database_modules.html) données](http://docs.ansible.com/ansible/latest/list_of_database_modules.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 !
## Configurations ## Configurations

View file

@ -4,10 +4,10 @@ Mise en place
============= =============
Pour réaliser ce TP, vous allez avoir besoin de créer une machine virtuelle, Pour réaliser ce TP, vous allez avoir besoin de créer une machine virtuelle,
possédant les caractéristiques suivantes : possédant les caractéristiques suivantes :
- 1 disque de quelques Gio ; - 1 disque de quelques Gio ;
- 1 lecteur de CD-ROM ; - 1 lecteur de CD-ROM ;
- 1 interface réseau `virtio`, sur laquelle il sera possible d'obtenir une IP - 1 interface réseau `virtio`, sur laquelle il sera possible d'obtenir une IP
permettant d'aller sur Internet. permettant d'aller sur Internet.
@ -16,8 +16,8 @@ appréciation. L'ISO est réputée supportée par *Hyper-V* (Windows), *qemu*/*K
(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
le lancer avec la commande : le lancer avec la commande :
<div lang="en-US"> <div lang="en-US">
```bash ```bash
@ -36,7 +36,7 @@ Vous pouvez télécharger l'ISO du TP depuis
<https://adlin.nemunai.re/ressources/tuto2.iso>. <https://adlin.nemunai.re/ressources/tuto2.iso>.
Cette image contient un système Debian minimaliste, en partie préinstallé afin Cette image contient un système Debian minimaliste, en partie préinstallé afin
de vous permettre de commencer à travailler sans plus attendre ! 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
@ -48,7 +48,7 @@ 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 **Note :** 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.
@ -71,12 +71,12 @@ nombre d'interfaces physiques existantes.
Concrètement, l'opération est assez fastidieuse à réaliser à la main, car cela Concrètement, l'opération est assez fastidieuse à réaliser à la main, car cela
demande de détacher le périphérique (via demande de détacher le périphérique (via
<span lang="en-US">`/sys/bus/pci/devices/0000:03:00.0/driver/unbind`</span>, <span lang="en-US">`/sys/bus/pci/devices/0000:03:00.0/driver/unbind`</span>,
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 : virtuelle :
<div lang="en-US"> <div lang="en-US">
```bash ```bash
qemu-system-x86_64 -device pci-assign,host=03:00.0 qemu-system-x86_64 [...] -device pci-assign,host=03:00.0
``` ```
</div> </div>
@ -84,21 +84,21 @@ qemu-system-x86_64 -device pci-assign,host=03:00.0
### Interface virtuelle ### Interface virtuelle
On se rend compte que la solution d'avoir une interface physique par machine On se rend compte que la solution d'avoir une interface physique par machine
virtuelle n'est pas bien idéale et devient vite très onéreuse. virtuelle n'est pas bien pérenne et devient vite très onéreuse.
La solution qui s'offre à nous est donc de virtualiser la carte ethernet : La solution qui s'offre à nous est donc de virtualiser la carte ethernet :
notre hyperviseur va alors **émuler** le comportement d'une carte (*qemu* émule notre hyperviseur va alors **émuler** le comportement d'une carte (*qemu* émule
des cartes PCI `e1000`, `rtl8139` pour les plus connues) : côté machine des cartes PCI `e1000` ou `rtl8139` pour les plus connues) : côté machine
virtuelle, l'hyperviseur va communiquer sur le bus PCI, tandis que côté hôte, virtuelle, l'hyperviseur va communiquer sur le bus PCI virtualisé, tandis que
il va créer une nouvelle interface virtuelle (de type `tap`), se comportant côté hôte, il va créer une nouvelle interface virtuelle (de type `tap`), se
comme un tunnel vers la machine virtuelle. comportant comme un tunnel vers la machine virtuelle.
Pour attacher une carte réseau à notre machine virtuelle et créer l'interface Pour attacher une carte réseau à notre machine virtuelle et créer l'interface
correspondante sur l'hôte, ce sera grâce à la commande : correspondante sur l'hôte, ce sera grâce à la commande :
<div lang="en-US"> <div lang="en-US">
```bash ```bash
qemu-system-x86_64 -net nic,model=e1000 -net tap,ifname=tap0,script=no,downscript=no qemu-system-x86_64 [...] -net nic,model=e1000 -net tap,ifname=tap0,script=no,downscript=no
``` ```
</div> </div>
@ -107,7 +107,7 @@ machines virtuelles, après avoir assigné des IP aux interfaces correspondantes
Il faut alors assigner une IP à l'interface de la machine hôte, et à la machine Il faut alors assigner une IP à l'interface de la machine hôte, et à la machine
virtuelle. virtuelle.
Par exemple : nous assignerons `172.23.69.1/31` à l'interface dans notre Par exemple : nous assignerons `172.23.69.1/31` à l'interface dans notre
machine virtuelle et `172.23.69.0/31` à l'interface correspondante de machine virtuelle et `172.23.69.0/31` à l'interface correspondante de
l'hôte. Ainsi, l'hôte pourra contacter cette machine virtuelle à l'hôte. Ainsi, l'hôte pourra contacter cette machine virtuelle à
`172.23.69.1/31`, et inversement. `172.23.69.1/31`, et inversement.
@ -117,11 +117,11 @@ l'hôte. Ainsi, l'hôte pourra contacter cette machine virtuelle à
Parmi les périphériques que peut émuler *qemu*, il y a le contrôleur un peu Parmi les périphériques que peut émuler *qemu*, il y a le contrôleur un peu
particulier `virtio`. Ce pilote va, conjointement avec un support adapté côté particulier `virtio`. Ce pilote va, conjointement avec un support adapté côté
système d'exploitation invité, permettre de se passer de la couche système d'exploitation invité, permettre de se passer de la couche
d'émulation : les paquets seront directement envoyés par le système hôte dans un d'émulation : les paquets seront directement envoyés par le système hôte dans un
format compréhensible sans effort, par le système invité. format compréhensible sans effort, par le système invité.
Ce principe a été introduit par la paravirtualisation (utilisé notamment par Ce principe a été introduit par la paravirtualisation (utilisé notamment par
Xen) : au moyen d'un noyau spécialement conçu (soit pour être hôte, soit pour Xen) : au moyen d'un noyau spécialement conçu (soit pour être hôte, soit pour
être invité), l'hôte et l'invité peuvent communiquer entre-eux directement, être invité), l'hôte et l'invité peuvent communiquer entre-eux directement,
sans passer par une couche d'émulation du matériel. sans passer par une couche d'émulation du matériel.
@ -134,7 +134,7 @@ contrôleurs de disques.
Un pont réseau va nous permettre de faire communiquer entre-elles plusieurs Un pont réseau va nous permettre de faire communiquer entre-elles plusieurs
interfaces (qu'elles soient physiques ou virtuelles). interfaces (qu'elles soient physiques ou virtuelles).
Pour créer un nouveau pont, on utilise la commande `ip` comme suit : Pour créer un nouveau pont, on utilise la commande `ip` comme suit :
<div lang="en-US"> <div lang="en-US">
```bash ```bash
@ -145,7 +145,7 @@ ip link add name br0 type bridge
`br0` est le nom que l'on souhaite attribuer à l'interface. `br0` est le nom que l'on souhaite attribuer à l'interface.
Pour assigner à un pont une interface, on utilise la commande suivante : Pour assigner à un pont une interface, on utilise la commande suivante :
<div lang="en-US"> <div lang="en-US">
```bash ```bash
@ -157,7 +157,7 @@ où `veth0` est le nom de l'interface que l'on souhaite inclure dans le pont
`br0`. `br0`.
Pour consulter la liste des interfaces concentrées par le pont `br0` : Pour consulter la liste des interfaces concentrées par le pont `br0` :
<div lang="en-US"> <div lang="en-US">
```bash ```bash
@ -174,16 +174,16 @@ machine hôte sur ce réseau virtuel.
Il est tout à fait possible d'ajouter une interface réseau physique à un pont, 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 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 fourni des puissent accéder à internet : si le réseau local de la machine hôte fourni des
adresses IP par DHCP à toute machine rejoignant le réseau. adresses IP par DHCP à toute machine rejoignant le réseau.
Lorsque le pont existe, `qemu` peut créer l'interface virtuelle et l'assigner à Lorsque le pont existe, `qemu` peut créer l'interface virtuelle et l'assigner à
un pont directement, avec la commande : un pont directement, avec la commande :
<div lang="en-US"> <div lang="en-US">
```bash ```bash
qemu-system-x86_64 -net bridge,br=br0 qemu-system-x86_64 [...] -net bridge,br=br0
``` ```
</div> </div>
@ -191,7 +191,7 @@ qemu-system-x86_64 -net bridge,br=br0
### NAT ### NAT
Dans certaines situations, il n'est pas aussi simple d'avoir une IP ou de Dans certaines situations, il n'est pas aussi simple d'avoir une IP ou de
communiquer avec le réseau utilisé par la machine hôte : par exemple, si le communiquer avec le réseau utilisé par la machine hôte : par exemple, si le
nombre d'IP disponibles n'est pas suffisant par rapport au nombre de machines nombre d'IP disponibles n'est pas suffisant par rapport au nombre de machines
que l'on a besoin de créer, ou bien parce que le réseau nécessite d'être que l'on a besoin de créer, ou bien parce que le réseau nécessite d'être
authentifié (netsoul, portail captif, ...) et qu'il est difficile ou inadapté authentifié (netsoul, portail captif, ...) et qu'il est difficile ou inadapté
@ -211,13 +211,22 @@ dnsmasq --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254
Afin que les machines virtuelles puissent accéder à Internet, il est nécessaire Afin que les machines virtuelles puissent accéder à Internet, il est nécessaire
de faire du NAT. de faire du NAT.
<div lang="en-US">
```bash
sysctl -w net.ipv4.ip_forward=1
iptables -A POSTROUTING -o wlp3s0 -j MASQUERADE
```
</div>
`wlp3s0` correspond à l'interface de notre route par défaut.
Démarrer la machine virtuelle Démarrer 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 :
<div lang="en-US"> <div lang="en-US">
```bash ```bash
@ -225,11 +234,11 @@ qemu-img create -f qcow2 /tmp/disk.qcow2 4G
``` ```
</div> </div>
Ce disque sera à attacher à notre machine virtuelle de cette manière : Ce disque sera à attacher à notre machine virtuelle de cette manière :
<div lang="en-US"> <div lang="en-US">
```bash ```bash
qemu-system-x86_64 -drive file=/tmp/disk.qcow2 qemu-system-x86_64 [...] -drive file=/tmp/disk.qcow2
``` ```
</div> </div>
@ -237,11 +246,11 @@ qemu-system-x86_64 -drive file=/tmp/disk.qcow2
### Démarrer sur l'ISO ### Démarrer sur l'ISO
Tout comme le disque, nous utilisons ici le paramètre `-drive` pour donner un Tout comme le disque, nous utilisons ici le paramètre `-drive` pour donner un
ISO de CD : ISO de CD :
<div lang="en-US"> <div lang="en-US">
```bash ```bash
qemu-system-x86_64 -boot d -drive format=raw,media=cdrom,readonly,file=tuto2.iso qemu-system-x86_64 [...] -boot d -drive format=raw,media=cdrom,readonly,file=tuto2.iso
``` ```
</div> </div>
@ -267,7 +276,7 @@ mécanismes de découverte automatique permettent à la pile IPv6 de se configur
seule. seule.
Pour dialoguer avec un serveur DHCP, il convient de lancer un client DHCP sur Pour dialoguer avec un serveur DHCP, il convient de lancer un client DHCP sur
la machine que l'on souhaite configurer : `udhcpc`, `dhcpcd`, `isc-dhcp-client` la machine que l'on souhaite configurer : `udhcpc`, `dhcpcd`, `isc-dhcp-client`
(`dhclient`), etc. Généralement, ces clients prennent en argument l'interface (`dhclient`), etc. Généralement, ces clients prennent en argument l'interface
réseau à configurer. réseau à configurer.
@ -275,7 +284,7 @@ réseau à configurer.
### Vérification des paramètres IP ### Vérification des paramètres IP
Parmi les configurations généralement effectuées automatiquement par le serveur Parmi les configurations généralement effectuées automatiquement par le serveur
DHCP, on trouve les éléments suivants : DHCP, on trouve les éléments suivants :
#### Lien #### Lien
@ -286,11 +295,11 @@ pouvoir émettre un paquet sur le réseau.
``` ```
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 group default qlen 1000
^^^^^^^^^^ ^^^^^^^^^^
``` ```
</div> </div>
Manuellement, l'état d'un lien se change avec la commande : Manuellement, l'état d'un lien se change avec la commande :
<div lang="en-US"> <div lang="en-US">
```bash ```bash
@ -302,7 +311,7 @@ ip link set enp3s0 up
#### Adresses #### Adresses
Après avoir reçu la validation (paquet `DHCPACK`) du serveur DHCP, l'IP est Après avoir reçu la validation (paquet `DHCPACK`) du serveur DHCP, l'IP est
définie sur l'interface, via une méthode similaire à la commande : définie sur l'interface, via une méthode similaire à la commande :
<div lang="en-US"> <div lang="en-US">
```bash ```bash
@ -315,7 +324,7 @@ ip address add 192.168.0.42/24 dev enp3s0
Parmi toutes les informations embarquées dans un paquet DHCP, figure Parmi toutes les informations embarquées dans un paquet DHCP, figure
généralement la route par défaut, permettant de localiser la passerelle du généralement la route par défaut, permettant de localiser la passerelle du
réseau : le routeur conduisant généralement à Internet. réseau : le routeur conduisant généralement à Internet.
<div lang="en-US"> <div lang="en-US">
``` ```
@ -326,11 +335,11 @@ default via 192.168.0.254 dev enp3s0
</div> </div>
Sur un réseau IPv6, les routes sont obtenues grâce au *Neighbor Discovery Sur un réseau IPv6, les routes sont obtenues grâce au *Neighbor Discovery
Protocol* : chaque routeur émet à intervalle régulier ou sur sollicitation un Protocol* : chaque routeur émet à intervalle régulier ou sur sollicitation un
paquet détaillant ses routes. paquet détaillant ses routes.
Manuellement, on ajoute une route par défaut avec la commande : Manuellement, on ajoute une route par défaut avec la commande :
<div lang="en-US"> <div lang="en-US">
```bash ```bash
@ -348,7 +357,7 @@ La dernière chose que l'on a généralement besoin de configurer pour pouvoir
accéder pleinement à Internet, c'est un serveur de noms de domaine. accéder pleinement à Internet, c'est un serveur de noms de domaine.
Les informations relatives à la résolution de noms sont inscrites dans le Les informations relatives à la résolution de noms sont inscrites dans le
fichier `/etc/resolv.conf` : fichier `/etc/resolv.conf` :
<div lang="en-US"> <div lang="en-US">
``` ```

View file

@ -7,7 +7,7 @@ Présentation du système d'information
------------------------------------- -------------------------------------
Le système d'information que vous allez avoir à gérer aujourd'hui est très 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 ! restreint, car il ne se compose que d'une seule machine !
Cette semaine, nous allons installer et configurer de nombreux services sur Cette semaine, nous allons installer et configurer de nombreux services sur
cette machine. cette machine.
@ -17,7 +17,7 @@ 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 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 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, la manière dont une installation se fait, ou du fonctionnement du bootloader,
n'hésitez pas à poser vos questions ! n'hésitez pas à poser vos questions !
Accéder à la machine virtuelle Accéder à la machine virtuelle
@ -51,11 +51,11 @@ que vous n'aurez pas démarré dans le mode "disque dur configuré".
### Table des partitions ### Table des partitions
Si votre disque a fraîchement été créé, celui-ci ne contient encore aucune 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 ! 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 Pour éditer (ou créer ...) la table de partitions d'un disque, vous pouvez
utiliser les utilitaires `fdisk`, `cfdisk`, `sfdisk`, `parted`, `gdisk`. Chacun utiliser les utilitaires `fdisk`, `cfdisk`, `sfdisk`, `parted`, `gdisk`. Chacun
de ses programmes prend en argument le disque à modifier : de ses programmes prend en argument le disque à modifier :
<div lang="en-US"> <div lang="en-US">
``` ```
@ -66,11 +66,11 @@ cfdisk /dev/sda
Le TP ne se concentrant pas sur la phase de démarrage, vous pouvez ignorer les 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. 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 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 majeure partie de votre disque, tandis que la deuxième peut se limiter à une
centaine de MB, pour l'exercice. centaine de MB, pour l'exercice.
Assurez-vous de bien lire tous les messages d'avertissements ! Il est important 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 que vous comprenniez ce que vous faites à ce stade, car cela peut entraîner des
pertes de données. pertes de données.
@ -81,14 +81,14 @@ Les partitions sont maintenant créées, mais il n'est pas encore possible de le
utiliser telles-quelles. Afin de pouvoir les utiliser, il est d'abord nécessaire 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, 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 chacun ayant des caractéristiques et des usages particuliers. Le système de
fichiers « généraliste » est l'*Extended File System* (`ext`), fichiers « généraliste » est l'*Extended File System* (`ext`),
Durant la phase de formatage, les structures (telles que les tableaux d'inœuds, 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 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 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 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 é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 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 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 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 doit se terminer par une entrée `NULL`, qui sera interprété comme une fin de
@ -120,7 +120,7 @@ Pour formater une partition d'échange, on utilise l'utilitaire `mkswap`.
#### Montage des partitions annexes #### Montage des partitions annexes
Automatique ne veut pas dire magique ! Pour chaque partition dont on dispose, Automatique ne veut pas dire magique ! Pour chaque partition dont on dispose,
il va falloir indiquer dans le fichier `/etc/fstab` l'emplacement dans il va falloir indiquer dans le fichier `/etc/fstab` l'emplacement dans
l'arborescence où attacher la partition ainsi que quelques autres l'arborescence où attacher la partition ainsi que quelques autres
caractéristiques. caractéristiques.
@ -138,7 +138,7 @@ Notons que le montage des partitions est effectué par le système
d'initialisation (un simple appel à la commande `mount -a` ou équivalent). À d'initialisation (un simple appel à la commande `mount -a` ou équivalent). À
aucun moment le noyau ne va lire le contenu de ce fichier. aucun moment le noyau ne va lire le contenu de ce fichier.
Voir aussi : `fstab(5)` Voir aussi : `fstab(5)`
#### Montage de la racine #### Montage de la racine
@ -164,10 +164,10 @@ 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 pouvoir y apporter des modifications. Par exemple pour installer un client
DHCP, afin de vous connecter au réseau facilement ! DHCP, afin de vous connecter au réseau facilement !
Deux solutions s'offrent à vous pour rendre persistant votre configuration réseau : Deux solutions s'offrent à vous pour rendre persistant votre configuration réseau :
- éditer le fichier `/etc/network/interfaces`, en suivant les directives de la - éditer le fichier `/etc/network/interfaces`, en suivant les directives de la
[documentation Debian](https://wiki.debian.org/NetworkConfiguration) ; [documentation Debian](https://wiki.debian.org/NetworkConfiguration) ;
- éditer le fichier `/etc/systemd/network/50-dhcp.network`, en suivant les - éditer le fichier `/etc/systemd/network/50-dhcp.network`, en suivant les
directives de directives de
[`systemd-networkd`](https://www.freedesktop.org/software/systemd/man/systemd.network.html). [`systemd-networkd`](https://www.freedesktop.org/software/systemd/man/systemd.network.html).
@ -182,7 +182,7 @@ 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 **Attention :** 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.
@ -206,26 +206,26 @@ Utilisez `adduser(8)` pour vous créer votre propre compte, et au minimum
`passwd(1)` pour lui définir un mot de passe. `passwd(1)` pour lui définir un mot de passe.
C'est bon, vous pouvez maintenant commencer à utiliser le client SSH de votre C'est bon, vous pouvez maintenant commencer à utiliser le client SSH de votre
choix pour administrer votre machine virtuelle ! choix pour administrer votre machine virtuelle !
### `su` -- Switch User ### `su` -- Switch User
Mais comment faire des opérations d'administration, avec un simple compte Mais comment faire des opérations d'administration, avec un simple compte
utilisateur ? utilisateur ?
La commande `su -` permet de changer devenir `root`, moyennant la connaissance La commande `su -` permet de devenir `root`, moyennant la connaissance du mot
du mot de passe du compte. Notez l'option `-` passée à la commande, cela permet de passe du compte `root`. Notez l'option `-` passée à la commande, cela permet
de réinitialiser l'environnement comme si l'on venait de se connecter en tant de réinitialiser l'environnement comme si l'on venait de se connecter en tant
que l'utilisateur cible. que l'utilisateur cible.
Afin de simplifier les opérations d'administration, une suite de commandes Afin de simplifier les opérations d'administration, une suite de commandes
fournies par le paquet `sudo` va devenir votre couteau suisse fournies par le paquet `sudo` va devenir votre couteau suisse
d'administrateur. Utilisez : d'administrateur. Utilisez :
- `sudo` : pour exécuter n'importe quelle commande, avec les privilèges - `sudo` : pour exécuter n'importe quelle commande, avec les privilèges
administrateur ; administrateur ;
- `sudoedit` : pour éditer un fichier avec les droits administrateurs. - `sudoedit` : pour éditer un fichier avec les droits administrateurs.
Après avoir installé le paquet, vous devrez ajouter les utilisateurs autorisés 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 à se servir de `sudo` dans le groupe `sudo` ou `wheel` (en fonction des
@ -233,8 +233,8 @@ 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).
**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 :
<div lang="en-US"> <div lang="en-US">
``` ```
@ -244,11 +244,11 @@ sudo !!
### 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 à
recopier votre configuration et à changer votre shell (`chsh(1)`) pour vous recopier votre configuration et à changer votre shell (`chsh(1)`) pour vous
trouver dans un environnement plus amical ! trouver dans un environnement plus amical !
On évitera toute configuration sur le compte `root`, étant donné qu'il est On évitera toute configuration sur le compte `root`, étant donné qu'il est
susceptible d'être utilisé en dernier recours lorsque plus rien ne fonctionne, susceptible d'être utilisé en dernier recours lorsque plus rien ne fonctionne,
une configuration basique aura plus de chance de résister. De toute manière, une configuration basique aura plus de chance de résister. De toute manière,
vous n'utiliserez jamais ce compte ! vous n'utiliserez jamais ce compte !