Aller au contenu

Quiz : Linux, administration système

100 Apprenti ⏱ 45 min linuxubuntudebiansystemd

Ce quiz valide le niveau 100 (Apprenti) des notions du cours Linux : administration système. Visez au moins 19 bonnes réponses sur 24 ; chaque réponse renvoie à la leçon à relire. Le niveau 200 se valide avec le lab.

Prendre en charge

1. Camille quitte l'équipe. Sa clé figure dans /root/.ssh/authorized_keys d'une instance Scaleway. Pourquoi supprimer la ligne de ce fichier ne suffit-il pas ?

  • a) sshd garde les clés acceptées en cache jusqu'à son redémarrage
  • b) Sur les images Scaleway, ce fichier est régénéré à partir des clés du projet et des étiquettes AUTHORIZED_KEY de l'instance, au démarrage ou par scw-fetch-ssh-keys --upgrade
  • c) La clé est aussi copiée dans /etc/ssh/ssh_known_hosts
  • d) Il faut en plus redémarrer ssh.socket
Réponse

b. La clé reviendrait au prochain redémarrage : il faut la retirer du projet Scaleway et des étiquettes, puis lancer scw-fetch-ssh-keys --upgrade sur chaque machine. Le fournisseur fait partie de la surface d'accès, comme les rôles IAM et les clés d'API de la personne qui part. Leçon 1.

Démarrer et maintenir

2. /proc/cmdline contient ... console=ttyS0,115200 console=tty0 quiet. Sur quelle console apparaîtra un shell de secours, et comment le faire apparaître durablement dans la console série de Scaleway ?

Réponse

Sur tty0, l'écran virtuel : la dernière console citée devient /dev/console, celle qui reçoit les invites interactives. Il faut placer console=ttyS0,115200 en dernier, dans un fichier de /etc/default/grub.d/ (lu après /etc/default/grub), puis lancer update-grub et vérifier dans /boot/grub/grub.cfg, puis dans /proc/cmdline après le redémarrage. On n'édite jamais grub.cfg à la main : il est régénéré à chaque mise à jour du noyau. Leçon 2.

3. Sur sig-outils (Debian 13), un collègue ajoute vm.swappiness = 10 dans /etc/sysctl.conf, lance sudo sysctl --system et constate que la valeur s'applique. Que se passe-t-il au redémarrage suivant ?

  • a) La valeur reste à 10 : /etc/sysctl.conf est lu en dernier
  • b) La valeur par défaut revient : systemd-sysctl ne lit plus /etc/sysctl.conf sur Debian 13
  • c) Le démarrage échoue sur une clé inconnue
  • d) La valeur reste à 10 parce qu'elle a été copiée dans l'initramfs
Réponse

b. L'outil sysctl de procps lit encore ce fichier, ce qui donne l'illusion que tout fonctionne ; au démarrage, c'est systemd-sysctl qui applique la configuration, et il l'ignore sur Debian 13. Le réglage, s'il est justifié par une mesure, va dans /etc/sysctl.d/60-<raison>.conf, et systemd-analyze cat-config sysctl.d montre ce que lira le démarrage. Leçon 3.

4. Sur sig-app-1 (Ubuntu 24.04), uname -r renvoie 6.8.0-130-generic. Les noyaux 130, 141 et 146 sont installés automatiquement. Que retire apt autoremove avec le réglage par défaut ?

  • a) 130 et 141
  • b) 141
  • c) 130
  • d) Rien : APT ne retire jamais de noyau
Réponse

b. APT protège toujours le noyau en cours (130), puis complète jusqu'à APT::NeverAutoRemove::KernelCount, soit 2, avec le plus récent (146). Le 141, qui a peut-être déjà démarré sur la machine, part. D'où la règle : redémarrer d'abord, puis nettoyer. apt-get -s autoremove -o Debug::pkgAutoRemove=1 le vérifie sans rien toucher. Leçon 4.

5. Sur sig-outils (Debian 13), /var/run/reboot-required n'existe pas. Pourquoi cela ne prouve-t-il pas que la machine tourne sur son dernier noyau, et que regardez-vous à la place ?

Réponse

Sur Debian, les paquets linux-image ne créent pas ce fichier ; seul unattended-upgrades, s'il est installé, le fait. On compare uname -r au noyau le plus récent présent dans /boot, ou l'on interroge needrestart : sudo needrestart -k affiche Pending kernel upgrade!, et sudo needrestart -b la ligne NEEDRESTART-KSTA: 3 (nouvelle version en attente), la valeur à suivre dans la supervision. Leçons 1 et 4.

6. Après un redémarrage, la console série de sig-outils affiche You are in emergency mode... puis Cannot open access to console, the root account is locked.. Le menu de GRUB est accessible. Comment obtenir un shell sans passer par le mode de secours de Scaleway ?

  • a) Appuyer sur Entrée, puis taper exit
  • b) Éditer l'entrée dans GRUB (e) et ajouter systemd.unit=emergency.target SYSTEMD_SULOGIN_FORCE=1 à la ligne linux, pour ce démarrage seulement
  • c) Ajouter rescue à la ligne linux
  • d) Ajouter SYSTEMD_SULOGIN_FORCE=1 à GRUB_CMDLINE_LINUX puis lancer update-grub
Réponse

b. SYSTEMD_SULOGIN_FORCE=1 fait passer --force à sulogin, qui ouvre alors un shell malgré le compte root verrouillé. Le paramètre ne vit que dans la mémoire de ce démarrage. La réponse d serait une faute grave : elle laisserait en permanence un accès root sans mot de passe à quiconque atteint la console. La réponse c échoue de la même façon que le démarrage normal, puisque rescue.target demande aussi le mot de passe de root. Leçon 5.

7. En mode emergency, vous avez corrigé l'UUID fautif dans /etc/fstab. Pourquoi faut-il lancer systemctl daemon-reload avant systemctl default ?

Réponse

systemd ne lit pas fstab directement : au démarrage, systemd-fstab-generator en a tiré des unités .mount dans /run/systemd/generator/. Sans rechargement, systemd utilise toujours l'unité générée depuis l'ancienne ligne, et la reprise échoue au même endroit. findmnt --verify puis mount -a permettent de valider la correction avant de reprendre le démarrage. Leçons 5 et 6.

Configurer

8. Expliquez chaque élément de cette ligne de fstab, et donnez les trois commandes à lancer avant tout redémarrage :

UUID=3f6c1a2e-8b4d-4c1f-9e2a-5d7b0c9e4f11  /srv/donnees  ext4  noatime,nodev,nosuid,noexec,nofail,x-systemd.device-timeout=30s  0  2
Réponse

UUID= désigne le système de fichiers lui-même, alors que /dev/sdb dépend de l'ordre de détection. ext4 est écrit plutôt que deviné. noatime supprime les écritures de date d'accès ; nodev, nosuid et noexec interdisent fichiers de périphérique, bits setuid et exécution directe sur un volume de données. nofail rend le montage seulement voulu par local-fs.target : un volume absent ne fait plus basculer la machine en mode emergency. x-systemd.device-timeout=30s raccourcit l'attente du périphérique (90 secondes par défaut). 0 pour dump, 2 pour une vérification par fsck après la racine. Avant de redémarrer : sudo findmnt --verify, sudo systemctl daemon-reload, puis démonter et sudo mount -a. Leçon 6.

9. Grâce à nofail, sig-outils a démarré sans son volume de données, et l'export de la nuit a écrit dans /srv/donnees. Le volume est revenu une heure plus tard. Que sont devenus les fichiers écrits pendant cette heure ?

  • a) Ils ont été fusionnés avec le contenu du volume au montage
  • b) Ils sont masqués par le montage et occupent toujours le disque racine ; RequiresMountsFor=/srv/donnees dans l'unité de l'export l'aurait empêché
  • c) Ils ont été supprimés par le montage
  • d) Ils ont été déplacés dans lost+found
Réponse

b. Un montage masque le contenu antérieur du répertoire sans l'effacer. On retrouve les fichiers par un montage lié de la racine (sudo mount --bind / /mnt, puis /mnt/srv/donnees). Avec RequiresMountsFor=, le service refuse de démarrer sans son volume et apparaît dans systemctl --failed, au lieu de remplir la racine en silence. Leçon 6.

10. Sur sig-app-1, getent hosts sig-db renvoie 172.16.8.40, alors que resolvectl query et dig donnent une autre adresse pour le point d'accès de la base. Laquelle utilise l'application, et pourquoi ?

Réponse

Celle de getent : comme l'application, il passe par NSS (hosts: files dns), donc par /etc/hosts avant le DNS. resolvectl query interroge seulement systemd-resolved, et dig interroge un serveur DNS sans passer par NSS. Une divergence désigne presque toujours une ligne de /etc/hosts, ici un reliquat qui fige une adresse susceptible de changer : on la supprime et l'on utilise le nom DNS interne du réseau privé. Leçon 7.

11. Quel filtre examine le trafic de sig-app-1 vers sig-outils sur le réseau privé pn-signalements ?

  • a) Le groupe de sécurité Scaleway des deux instances
  • b) La Network ACL du VPC
  • c) Seulement le pare-feu de chaque hôte
  • d) Le groupe de sécurité et la Network ACL
Réponse

c. D'après la documentation de Scaleway, les groupes de sécurité ne filtrent que le trafic public ; les Network ACL portent sur le trafic entre réseaux privés. Entre deux machines du même réseau privé, seul le pare-feu de l'hôte intervient : c'est pourquoi la leçon restreint le port 6514 de sig-outils aux seules adresses de sig-app-1 et sig-app-2. Leçon 8.

12. Vous êtes connecté en SSH à sig-outils et devez charger un nouveau /etc/nftables.conf en politique drop. Décrivez la méthode qui vous évite de perdre la main.

Réponse

Sauvegarder l'état courant dans un fichier rechargeable (flush ruleset suivi de nft list ruleset), valider le nouveau fichier sans l'appliquer (nft -c -f), programmer avant d'appliquer un retour arrière automatique (systemd-run --on-active=5min --unit=retour-pare-feu /usr/sbin/nft -f <sauvegarde>), appliquer (nft -f, atomique), tester par une nouvelle connexion SSH (la session en cours survit, puisqu'elle est established), puis arrêter le minuteur (systemctl stop retour-pare-feu.timer) et activer nftables.service. Avec ufw, le minuteur exécute ufw disable. Leçon 8.

13. Sur sig-app-2, chronyc sources affiche la ligne ^? 172.16.8.20 0 6 0 - +0ns[ +0ns] +/- 0ns. Que signifie-t-elle ?

  • a) sig-outils est la source retenue
  • b) sig-outils est en désaccord avec la majorité des sources (falseticker)
  • c) sig-outils ne répond pas : aucune des huit dernières requêtes n'a reçu de réponse
  • d) sig-outils est une source trop variable
Réponse

c. Le registre Reach à 0 et l'état ? (inutilisable) signalent une source injoignable ; * serait la source retenue, x un falseticker, ~ une source trop variable. On vérifie dans l'ordre le service et allow 172.16.8.0/22 sur sig-outils, son pare-feu (UDP 123), puis le réseau. L'heure de sig-app-2 reste juste tant que ses sources de secours répondent, mais sa cohérence avec sig-app-1 n'est plus garantie. Leçon 9.

14. Quand s'exécute la ligne de crontab 0 2 1 * 1 /usr/local/sbin/rapport ?

  • a) À 2 h le 1er du mois, seulement si c'est un lundi
  • b) À 2 h le 1er de chaque mois, et à 2 h chaque lundi
  • c) À 2 h chaque lundi de janvier
  • d) Jamais : la ligne est invalide
Réponse

b. D'après crontab(5), quand le jour du mois et le jour de la semaine sont tous deux restreints, la commande tourne si l'un ou l'autre correspond. Chez systemd, OnCalendar=Mon *-*-01 02:00 combine les deux par ET et signifie « le 1er, si c'est un lundi ». Leçon 10.

15. signalements-export.service est un service oneshot déclenché par un minuteur. Pourquoi lui donner un TimeoutStartSec= ?

Réponse

Pour un oneshot, le délai de démarrage est désactivé par défaut. Un export bloqué (sur une requête SQL, par exemple) resterait indéfiniment en état activating, et le minuteur, voyant le service toujours actif, ne le relancerait jamais : toutes les exécutions suivantes seraient perdues, sans aucune erreur. Avec le délai, systemd tue la tâche, la marque en échec, et OnFailure= prévient l'équipe. Leçon 10.

16. Sur l'export de sig-outils, quelle est la différence entre MemoryHigh=1G et MemoryMax=1536M, et pourquoi poser les deux ?

Réponse

MemoryHigh= est un frein : au-delà, le noyau ralentit les processus du groupe et récupère leur mémoire en priorité, sans jamais déclencher l'OOM killer. MemoryMax= est un mur : si la récupération ne suffit pas, l'OOM killer agit dans le groupe de l'export seulement, jamais sur la sauvegarde ni sur rsyslog. On freine au niveau habituel et l'on coupe au niveau inacceptable, comme le recommande systemd.resource-control(5) ; les deux valeurs se fixent d'après une mesure (memory.peak, ou Memory peak de systemd-run --wait). Leçon 11.

17. Sur le collecteur rsyslog de sig-outils, pourquoi construire le chemin des fichiers reçus avec %FROMHOST% plutôt qu'avec %HOSTNAME% ?

  • a) %FROMHOST% est plus rapide à calculer
  • b) %FROMHOST% est le nom de la machine d'où vient la connexion, alors que %HOSTNAME% est écrit dans le message, donc falsifiable par un émetteur compromis
  • c) %HOSTNAME% est vide quand la connexion est chiffrée par TLS
  • d) %FROMHOST% contient aussi le port source
Réponse

b. Avec %HOSTNAME%, une machine compromise pourrait écrire dans le répertoire d'une autre et brouiller les traces. %FROMHOST% provient de la connexion elle-même (résolution inverse de l'adresse, ou l'adresse). La même logique explique l'authentification x509/name dans les deux sens. Leçon 12.

18. Le journal de sig-app-2 contient Suppressed 4312 messages from signalements.service. Qu'est-ce qui a été perdu, et ces messages sont-ils arrivés sur sig-outils ?

Réponse

journald a appliqué sa limitation de débit (10 000 messages par 30 secondes par défaut, modulés selon l'espace disque libre) à cette seule unité, et par groupe de priorités : 4 312 messages de signalements.service ont été jetés. Ils ne sont ni dans le journal local, ni partis vers rsyslog, donc pas arrivés au collecteur. Les autres services n'ont rien perdu. On cherche la cause de l'avalanche dans les messages qui précèdent ; au besoin, LogRateLimitBurst= dans un drop-in de l'unité assouplit la limite pour ce seul service. Leçon 12.

Protéger et reconstruire

19. Pour le départ de Camille, un collègue a seulement lancé sudo passwd -l camille. Camille a une clé dans son ~/.ssh/authorized_keys. Peut-elle encore se connecter ?

  • a) Non : le compte est verrouillé
  • b) Oui : le verrou porte sur le hachage du mot de passe, que seule la pile PAM auth consulte, et une connexion par clé ne la traverse pas
  • c) Oui, mais seulement depuis la console série
  • d) Non, sauf si UsePAM no est réglé dans sshd_config
Réponse

b. Avec une clé, sshd authentifie lui-même et n'appelle pas pam_authenticate(). Il exécute en revanche la pile account pour tous les types d'authentification : sudo usermod --expiredate 1 camille y fait refuser le compte par pam_unix (account camille has expired). On retire aussi la clé, ses règles sudo et sa clé du projet Scaleway. Leçon 13.

20. Pourquoi pam_faillock doit-il figurer à trois endroits des piles PAM, et pourquoi passer par des profils pam-auth-update plutôt que d'éditer common-auth à la main ?

Réponse

En preauth avant pam_unix, pour refuser tout de suite un compte déjà verrouillé ; en authfail après l'échec de pam_unix, pour compter l'échec ; dans la pile account, pour remettre le compteur à zéro après une authentification réussie. Les piles Debian et Ubuntu reposent sur des sauts (success=1, success=2) : une ligne insérée à la main décale silencieusement la cible, et plus personne n'entre, ou tout le monde. pam-auth-update recalcule les sauts à chaque génération ; une édition manuelle fige en outre le fichier, que l'outil cesse de mettre à jour. Leçon 13.

21. Vous avez écrit PasswordAuthentication no dans /etc/ssh/sshd_config.d/99-durcissement.conf, mais les mots de passe sont toujours acceptés. Expliquez et corrigez.

Réponse

Pour sshd, la première valeur lue l'emporte, et les fichiers de sshd_config.d/ sont lus dans l'ordre lexical : un fichier lu avant le vôtre (50-cloud-init.conf sur certaines images) dit yes. On renomme le fichier en 10-durcissement.conf, on valide avec sudo sshd -t, on contrôle la configuration effective avec sudo sshd -T | grep passwordauthentication, puis systemctl reload ssh, en gardant une session de secours ouverte jusqu'au test d'une nouvelle connexion. Leçon 14.

22. Alex (UID 1001) se connecte en SSH puis tape sudo -i. Dans les événements d'audit des commandes qu'il lance ensuite, que vaut auid ?

  • a) 0, puisque le shell tourne en root
  • b) 1001 : le loginuid est fixé à la connexion par pam_loginuid et n'est modifié ni par sudo ni par su
  • c) 4294967295, la valeur des processus sans connexion
  • d) L'UID du programme sudo
Réponse

b. C'est ce qui rend les actions d'administration imputables à une personne plutôt qu'à « root ». La valeur 4294967295 (unset) est celle des services lancés par systemd : d'où le couple -F auid>=1000 -F auid!=unset dans les règles, puisque ce nombre est lui-même supérieur à 1000. --loginuid-immutable empêche root de réécrire le loginuid. Leçon 15.

23. Comment restic forget --keep-daily 14 --keep-weekly 8 --keep-monthly 6 combine-t-il ses règles ?

  • a) Par ET : un instantané doit satisfaire les trois règles pour être gardé
  • b) Par OU : il suffit d'en satisfaire une pour être gardé
  • c) Seule la règle la plus restrictive s'applique
  • d) Seule la dernière règle de la ligne compte
Réponse

b. La documentation de restic le précise. forget ne retire que les fichiers d'instantanés ; les données ne disparaissent qu'avec --prune (ou restic prune). On essaie d'abord avec --dry-run, et la durée de conservation doit rester cohérente avec le registre des traitements. Leçon 16.

24. Sur le bucket versionné sig-sauvegardes, pourquoi la clé de sauvegarde de sig-outils reçoit-elle s3:DeleteObject mais jamais s3:DeleteObjectVersion ?

Réponse

restic a besoin de supprimer (verrous, packs élagués), d'où s3:DeleteObject. Dans un bucket versionné, une suppression simple ne pose qu'un marqueur de suppression : les anciennes versions restent. Seule une suppression qui désigne une version précise, qui exige s3:DeleteObjectVersion, efface des données. Un rançongiciel qui lit la clé sur sig-outils ne peut donc détruire aucune version ; il reste la règle de cycle de vie des versions non courantes, dont le délai doit dépasser le délai réaliste de détection, et éventuellement le verrouillage d'objets. Leçon 16.

Plan du cours

    +50 XP 100 Apprenti

    Validation sur l'honneur, enregistrée dans ce navigateur. Elle valide le niveau 100 de Démarrage, noyau et configuration du système , Configuration réseau et pare-feu d'un hôte Linux , Système de fichiers et permissions , Processus, services et systemd , Gestion des paquets , Identité, authentification et IAM , Durcissement des systèmes , Journaux centralisés , Sauvegarde et reprise d'activité et fait monter en rareté l'équipement de votre cosmonaute.