249 lines
10 KiB
Markdown
249 lines
10 KiB
Markdown
\newpage
|
||
|
||
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`.
|
||
|
||
Vous pouvez également démarrer en mode *single user*, mais comme votre disque
|
||
n'est sans doute pas encore utilisable à ce stade, vous ne pourrez pas changer
|
||
le mot de passe `root`. Vous pourrez néanmoins effectuer les étapes de
|
||
configuration du disque décrites plus loin, sous ce mode, puis redémarrer.
|
||
|
||
Lorsque vous avez accès à la ligne de commande du *bootloader*, vous pouvez
|
||
généralement ajouter l'option `init=/bin/sh` à la ligne de commande du noyau,
|
||
afin de lancer un shell au lieu du système d'init habituel.
|
||
|
||
|
||
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 :
|
||
|
||
```
|
||
cfdisk /dev/sda
|
||
```
|
||
|
||
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.
|
||
|
||
```
|
||
# <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
|
||
```
|
||
|
||
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
|
||
------------------
|
||
|
||
Un serveur SSH est déjà installé et configuré pour vous permettre d'avoir une
|
||
interface plus agréable que celle de votre hyperviseur.
|
||
|
||
**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
|
||
`root` pour éviter que n'importe qui sur le réseau local (et ayant accès à ce
|
||
TP), ne rentre sur votre machine.
|
||
|
||
|
||
### Création d'un utilisateur
|
||
|
||
Une règle primordiale dans l'administration, c'est de ne jamais ~~trop
|
||
travailler~~ utiliser le compte `root` directement ! quelque soit le sytème
|
||
d'exploitation.
|
||
|
||
Sur chaque machine, on crée donc autant de comptes utilisateurs, qu'il y aura
|
||
de personnes susceptibles de s'y connecter pour l'administrer[^whysudo].
|
||
|
||
[^whysudo]: non seulement cela évite d'exécuter n'importe quel script ou
|
||
programme avec des privilèges lorsque ce n'est pas nécessaire, mais cela
|
||
permet également de pouvoir retracer, via les journaux, qui a réalisé
|
||
quelles opérations.
|
||
|
||
Utilisez `adduser(8)` pour vous créer votre propre compte, et au minimum
|
||
`passwd(1)` pour lui définir un mot de passe.
|
||
|
||
C'est bon, vous pouvez maintenant commencer à utiliser le client SSH de votre
|
||
choix pour administrer votre machine virtuelle !
|
||
|
||
|
||
### `su` -- Switch User
|
||
|
||
Mais comment faire des opérations d'administration, avec un simple compte
|
||
utilisateur ?
|
||
|
||
La commande `su -` permet de changer devenir `root`, moyennant la connaissance
|
||
du mot de passe du compte. Notez l'option `-` passée à la commande, cela permet
|
||
de réinitialiser l'environnement comme si l'on venait de se connecter en tant
|
||
que l'utilisateur cible.
|
||
|
||
Afin de simplifier les opérations d'administration, une suite de commandes
|
||
fournies par le paquet `sudo` va devenir votre couteau suisse
|
||
d'administrateur. Utilisez :
|
||
|
||
- `sudo` : pour exécuter n'importe quelle commande, avec les privilèges
|
||
administrateur ;
|
||
- `sudoedit` : pour éditer un fichier avec les droits administrateurs.
|
||
|
||
Après avoir installé le paquet, vous devrez ajouter les utilisateurs autorisés
|
||
à se servir de `sudo` dans le groupe `sudo` ou `wheel` (en fonction des
|
||
distributions). Vous pouvez également définir des conditions plus précise en
|
||
éditant le fichier `/etc/sudoers` (utilisez impérativement `visudo(1)` pour
|
||
éditer ce fichier).
|
||
|
||
**Super astuce !** votre terminal rit encore de vous, affichant `Permission
|
||
Denied` car vous avez oublié de préfixer votre commande par `sudo` ? essayez :
|
||
|
||
```
|
||
sudo !!
|
||
```
|
||
|
||
### Top confort dans son coquillage
|
||
|
||
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
|
||
trouver dans un environnement plus amical !
|
||
|
||
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,
|
||
une configuration basique aura plus de chance de résister. De toute manière,
|
||
vous n'utiliserez jamais ce compte !
|