// Cours complets · lot 6 : IPv6, gestion de projet, mathématiques pour l’informatique, services de fichiers et de temps
(function () {
var reg = function (c) {
(window.CONTENUS_PRO = window.CONTENUS_PRO || []).unshift(c.cours);
(window.CONTENUS_PLUS = window.CONTENUS_PLUS || {})[c.cours.id] = c.plus;
(window.CONTENUS_EXEMPLES = window.CONTENUS_EXEMPLES || {})[c.cours.id] = c.exemples;
(window.CONTENUS_SCHEMAS = window.CONTENUS_SCHEMAS || {})[c.cours.id] = { termes: c.termes, figs: [] };
};
reg({
cours: { id: 'ipv6', match: /IPv6|SLAAC|NDP|double pile/i,
titre: 'IPv6 : adresses, autoconfiguration, NDP et double pile', duree: '',
niveau: 'BTS SIO SISR · BTS CIEL IR · BUT R&T S2-S3 · TSSR',
prerequis: ['Adressage IPv4', 'Hexadécimal', 'ARP et diagnostic réseau'],
competences: ['BTS SIO SISR · Bloc 2 · Concevoir une infrastructure réseau', 'BUT R&T · Compétence « Connecter »'],
intro: 'Les adresses IPv4 publiques sont épuisées depuis des années et une part croissante du trafic Internet passe en IPv6 ; les opérateurs français fournissent l’IPv6 sur la plupart de leurs offres et les réseaux mobiles l’utilisent massivement. Un technicien qui l’ignore ne comprend pas pourquoi un service répond différemment selon le poste, ou pourquoi un pare-feu IPv4 bien réglé laisse passer du trafic. Ce module présente la structure des adresses, l’autoconfiguration, le protocole NDP qui remplace ARP, et la coexistence avec IPv4.',
cm: [
{ t: 'Adresses de 128 bits', d: '', html: 'Une adresse IPv6 compte 128 bits, écrits en huit groupes de quatre chiffres hexadécimaux séparés par deux-points : 2001:0db8:0000:0040:0000:0000:0000:0010. Deux règles abrègent l’écriture : on supprime les zéros en tête de chaque groupe, et on remplace une seule suite de groupes nuls par ::. L’adresse devient 2001:db8:0:40::10. Dans une URL, on l’écrit entre crochets : http://[2001:db8:0:40::10]:8080/.
Le préfixe s’écrit en notation CIDR, comme en IPv4. Un réseau local est presque toujours un /64 : 64 bits de préfixe, 64 bits d’identifiant d’interface. Un site reçoit typiquement un /48 ou un /56 de son opérateur, soit 65 536 ou 256 réseaux /64.' },
{ t: 'Types d’adresses', d: '', html: 'Il n’y a plus de diffusion (broadcast) en IPv6 : on utilise l’unicast, le multicast et l’anycast.', table: [['Préfixe', 'Type', 'Usage'], ['2000::/3', 'globale unicast', 'adresses publiques routées sur Internet'], ['fe80::/10', 'lien local', 'présente sur chaque interface, non routée'], ['fc00::/7 (fd00::/8)', 'unique locale (ULA)', 'équivalent des adresses privées'], ['ff00::/8', 'multicast', 'ff02::1 tous les nœuds, ff02::2 tous les routeurs'], ['::1/128', 'boucle locale', 'équivalent de 127.0.0.1'], ['::/128', 'non spécifiée', 'équivalent de 0.0.0.0']], attention: 'Une interface IPv6 possède toujours plusieurs adresses : au minimum une adresse de lien local fe80::, souvent une ou plusieurs adresses globales. Une adresse fe80:: s’utilise avec l’interface précisée : ping fe80::1%ens18.' },
{ t: 'NDP : le voisinage', d: '', html: 'Le protocole NDP (Neighbor Discovery, RFC 4861), porté par ICMPv6, remplace ARP et bien plus. Neighbor Solicitation / Advertisement résolvent une adresse IPv6 en adresse MAC, par multicast ciblé plutôt que par diffusion. Router Solicitation / Advertisement permettent aux hôtes de découvrir les routeurs et les préfixes du réseau. La détection d’adresse dupliquée (DAD) vérifie qu’une adresse est libre avant de l’utiliser.
Conséquence pratique : bloquer ICMPv6 sur un pare-feu casse IPv6. On filtre finement, mais on laisse passer les messages NDP sur le lien local et les messages d’erreur comme Packet Too Big, indispensables car les routeurs IPv6 ne fragmentent pas.' },
{ t: 'Autoconfiguration : SLAAC et DHCPv6', d: '', html: 'Avec SLAAC (autoconfiguration sans état), le routeur annonce le préfixe /64 dans ses Router Advertisements ; chaque hôte construit lui-même son identifiant d’interface, aujourd’hui de façon aléatoire et stable par réseau (RFC 7217), et souvent des adresses temporaires renouvelées pour limiter le traçage. Aucun serveur n’est nécessaire.
DHCPv6 distribue des adresses ou seulement des options (serveurs DNS) ; les drapeaux M et O des annonces indiquent aux hôtes ce qu’ils doivent demander. Les serveurs DNS peuvent aussi être annoncés directement dans les RA (option RDNSS). Android n’implémentant pas DHCPv6 pour les adresses, un réseau Wi-Fi mixte s’appuie en général sur SLAAC.' },
{ t: 'Configurer et diagnostiquer sous Linux', d: '', html: 'Les mêmes outils servent, avec l’option -6 : ip -6 addr, ip -6 route, ip -6 neigh pour le cache NDP, ping -6 (ou ping6), traceroute -6, ss -6. Un routeur Linux annonce ses préfixes avec radvd ou systemd-networkd.', exemple: '# /etc/radvd.conf\ninterface ens19 {\n AdvSendAdvert on;\n prefix 2001:db8:62:20::/64 { AdvOnLink on; AdvAutonomous on; };\n RDNSS 2001:db8:62:40::10 { };\n};\n\n$ ip -6 addr show ens18 | grep inet6\n inet6 2001:db8:62:20:5d3a:9f10:77c2:1b04/64 scope global dynamic mngtmpaddr\n inet6 fe80::be24:11ff:fe5e:2a10/64 scope link' },
{ t: 'Coexistence et sécurité', d: '', html: 'La transition passe par la double pile : chaque machine a une adresse IPv4 et une adresse IPv6, et les applications préfèrent IPv6 quand le DNS renvoie un enregistrement AAAA (algorithme Happy Eyeballs, qui bascule vite en IPv4 si IPv6 échoue). Sur des réseaux uniquement IPv6, NAT64 et DNS64 permettent de joindre les services restés en IPv4.
IPv6 supprime le NAT : chaque appareil a une adresse globale. La sécurité repose alors sur un pare-feu à état qui bloque par défaut les connexions entrantes. Erreur fréquente : des règles soignées dans la table IPv4 et une politique accept dans la table IPv6, activée par défaut sur les systèmes récents. Avec nftables, une table de famille inet applique les mêmes règles aux deux protocoles. Sur le réseau local, le RA Guard des switchs empêche un poste de se faire passer pour le routeur, équivalent du DHCP snooping.' }
],
synthese: ['128 bits en hexadécimal, zéros de tête omis, :: une seule fois', 'Réseau local en /64, site en /48 ou /56', 'Lien local fe80::, globale 2000::/3, ULA fd00::/8, multicast ff00::/8, pas de broadcast', 'NDP (ICMPv6) remplace ARP : ne pas bloquer ICMPv6', 'SLAAC par annonces de routeur, DHCPv6 et RDNSS pour les options', 'Double pile, AAAA, Happy Eyeballs ; NAT64/DNS64', 'Pas de NAT : pare-feu à état obligatoire, table inet, RA Guard'],
qcm: [
['Forme abrégée de 2001:0db8:0000:0000:0000:0000:0000:0001 ?', ['2001:db8::1', '2001:db8:0:1', '2001::db8::1', '2001:db8:1::'], 0, 'Une seule suite de zéros remplacée par ::'],
['Quel préfixe désigne les adresses de lien local ?', ['2000::/3', 'fe80::/10', 'ff00::/8', 'fd00::/8'], 1, 'Présentes sur toutes les interfaces.'],
['Quel protocole remplace ARP ?', ['DHCPv6', 'NDP', 'SLAAC', 'RIPng'], 1, 'Neighbor Discovery, sur ICMPv6.'],
['Taille standard d’un réseau local IPv6 ?', ['/24', '/48', '/64', '/128'], 2, 'Nécessaire à SLAAC.'],
['Pourquoi ne pas bloquer tout ICMPv6 ?', ['Il est inoffensif', 'NDP et Packet Too Big en dépendent', 'Obligation légale', 'Pour le ping'], 1, 'IPv6 cesserait de fonctionner.'],
['Les règles IPv4 d’un pare-feu nftables en table ip s’appliquent-elles à IPv6 ?', ['Oui', 'Non, il faut une table ip6 ou inet', 'Seulement en sortie', 'Seulement avec NAT'], 1, 'Famille inet pour les deux.'],
['Qui annonce le préfixe en SLAAC ?', ['Le serveur DHCP', 'Le routeur, par Router Advertisement', 'Le DNS', 'Le switch'], 1, 'RA.']
],
td: [
{ n: 'Échauffement', c: 'Abréger : 2001:0db8:0062:0020:0000:0000:0000:0001 ; fe80:0000:0000:0000:be24:11ff:fe5e:2a10 ; ff02:0000:0000:0000:0000:0000:0000:0002.', r: '2001:db8:62:20::1 · fe80::be24:11ff:fe5e:2a10 · ff02::2' },
{ n: 'Application', c: 'Le lycée reçoit 2001:db8:62::/48. Proposer un plan d’adressage /64 pour les VLAN 10, 20, 30, 40 en reprenant le numéro de VLAN dans le préfixe.', r: '2001:db8:62:10::/64 · 2001:db8:62:20::/64 · 2001:db8:62:30::/64 · 2001:db8:62:40::/64 (passerelle ::1 dans chacun)' },
{ n: 'Application', c: 'Écrire une chaîne nftables input en famille inet qui autorise SSH, les connexions établies et les messages ICMPv6 indispensables, et bloque le reste.', r: 'type filter hook input priority 0; policy drop;\nct state established,related accept\niif lo accept\nicmpv6 type { nd-neighbor-solicit, nd-neighbor-advert, nd-router-advert, packet-too-big, echo-request } accept\ntcp dport 22 accept' },
{ n: 'Approfondissement', c: 'Un site web répond lentement uniquement depuis certains postes. Le DNS renvoie A et AAAA. Formuler l’hypothèse et la vérifier.', r: 'La route IPv6 est défaillante et les clients attendent avant de basculer en IPv4. curl -6 -v et curl -4 -v pour comparer, traceroute -6, vérifier les RA reçues et la route par défaut IPv6.' }
],
tp: { type: 'Lab VM', url: 'apercu-labs.html', desc: 'Routeur Linux avec radvd et deux clients en double pile.', etapes: ['Configurer l’adresse du routeur', 'Annoncer le préfixe avec radvd', 'Observer SLAAC sur les clients', 'Lire le cache NDP', 'Filtrer en famille inet', 'Tester un service en IPv6 et IPv4'] },
plusLoin: [['RFC 8200 · IPv6', 'https://www.rfc-editor.org/rfc/rfc8200'], ['RFC 4861 · Neighbor Discovery', 'https://www.rfc-editor.org/rfc/rfc4861'], ['Arcep · Baromètre de la transition vers IPv6', 'https://www.arcep.fr/'], ['ANSSI · Guide de recommandations pour IPv6', 'https://cyber.gouv.fr/']] },
plus: { cas: { titre: '', texte: '' },
resolu: { enonce: 'Un audit révèle que le serveur web interne est joignable depuis Internet sur le port de sa base de données, alors que le pare-feu la bloque. Trouver et corriger.', etapes: [
['Reproduire', 'Depuis l’extérieur : nc -zv 203.0.113.10 5432 → timeout ; nc -zv 2001:db8:62:40::20 5432 → succeeded\n→ Bloqué en IPv4, ouvert en IPv6.'],
['Lire le pare-feu', 'nft list tables\ntable ip filtre\n→ Seule une table IPv4 existe : le trafic IPv6 n’est pas filtré.'],
['Comprendre', '→ L’opérateur a activé IPv6 ; le routeur annonce un préfixe global, le serveur a obtenu une adresse publique par SLAAC. Sans NAT et sans règles IPv6, tout est accessible.'],
['Corriger', 'Conversion de la table en famille inet (mêmes règles pour IPv4 et IPv6), politique drop en forward et input, ICMPv6 indispensable autorisé.\nnft -c -f /etc/nftables.conf && systemctl reload nftables\n→ Test : IPv6 5432 → timeout, 443 → succeeded.'],
['Prévenir', '→ Inventaire des adresses IPv6 de tous les serveurs, supervision des ports ouverts en IPv4 et en IPv6, et vérification IPv6 ajoutée à la procédure de mise en service.']
] },
erreurs: ['Utiliser :: deux fois dans une adresse', 'Bloquer tout ICMPv6', 'Filtrer IPv4 et oublier IPv6', 'Découper un LAN en préfixe plus long que /64', 'Oublier l’interface avec une adresse fe80::', 'Désactiver IPv6 au lieu de le configurer'],
memo: [['Commande', 'Usage'], ['ip -6 addr', 'adresses IPv6'], ['ip -6 route', 'routes et passerelle IPv6'], ['ip -6 neigh', 'cache NDP'], ['ping -6 ', 'tester'], ['ping ff02::1%ens18', 'voir tous les voisins du lien'], ['traceroute -6', 'chemin IPv6'], ['rdisc6 ens18', 'solliciter les annonces de routeur'], ['dig AAAA nom', 'adresse IPv6 d’un nom'], ['curl -6 · curl -4', 'comparer les deux protocoles'], ['nft list ruleset', 'vérifier les tables inet / ip6']],
examen: { titre: 'Sujet type · 20 points', q: ['Abréger et identifier le type de cinq adresses. (5 pts)', 'Proposer un plan d’adressage à partir d’un /48. (4 pts)', 'Expliquer SLAAC et NDP. (5 pts)', 'Écrire un filtrage IPv6 minimal. (4 pts)', 'Expliquer le risque de l’absence de NAT. (2 pts)'], r: ['règles d’abréviation', 'un /64 par VLAN', 'RS/RA, NS/NA, DAD', 'table inet', 'adresses globales joignables'] },
prof: { deroule: [['Ouverture', 'curl -6 ifconfig.co : qui a une IPv6 ?'], ['Cours', 'Adresses et types'], ['Cours', 'NDP, SLAAC'], ['Pratique', 'Lab radvd'], ['Incident', 'Serveur exposé en IPv6'], ['Clôture', 'Quiz flash']], diff: 'Élèves en difficulté : fiche d’abréviation. Élèves avancés : NAT64/DNS64, RA Guard.', eval: 'Lab validé, sujet type.' } },
exemples: [
['Lister ses adresses', 'Première observation.', 'ip -6 -br addr', 'lo UNKNOWN ::1/128\nens18 UP 2001:db8:62:20:5d3a:9f10:77c2:1b04/64 fe80::be24:11ff:fe5e:2a10/64', 'Une adresse globale obtenue par SLAAC et une adresse de lien local.'],
['Voir les voisins', 'Cache NDP.', 'ip -6 neigh', 'fe80::1 dev ens18 lladdr 3c:52:82:1a:0f:9b router REACHABLE', 'Le routeur est identifié comme tel (router) et joignable.'],
['Découvrir le routeur', 'Aucune adresse globale.', 'rdisc6 ens18', 'Soliciting ff02::2 (ff02::2) on ens18...\nTimed out.', 'Aucune annonce reçue : radvd arrêté ou RA filtrées. Le poste n’a que son adresse fe80::.'],
['Pinger tout le lien', 'Inventaire rapide.', 'ping -c 2 ff02::1%ens18', '64 bytes from fe80::be24:11ff:fe5e:2a10%ens18\n64 bytes from fe80::1%ens18\n64 bytes from fe80::215:5dff:fe0a:1107%ens18', 'Le multicast tous-nœuds fait répondre chaque machine du lien.'],
['Comparer IPv4 et IPv6', 'Service lent.', 'curl -6 -o /dev/null -s -w "%{time_total}\\n" https://ent.lycee-exemple.fr ; curl -4 -o /dev/null -s -w "%{time_total}\\n" https://ent.lycee-exemple.fr', '3.842\n0.118', 'IPv6 est trente fois plus lent : chemin IPv6 défaillant. traceroute -6 pour localiser.'],
['Vérifier le filtrage', 'Audit.', 'nft list ruleset | grep -E "^table"', 'table ip filtre\ntable ip nat', 'Aucune table inet ou ip6 : IPv6 n’est pas filtré.']
],
termes: ['IPv6', '::', '/64', 'fe80::', 'ULA', 'multicast', 'ff02::1', 'NDP', 'ICMPv6', 'Router Advertisement', 'Neighbor Solicitation', 'DAD', 'SLAAC', 'DHCPv6', 'RDNSS', 'radvd', 'double pile', 'AAAA', 'Happy Eyeballs', 'NAT64', 'RA Guard', 'inet']
});
reg({
cours: { id: 'projet', match: /gestion de projet|Scrum|Kanban|agile|cycle en V|ITIL|conduire un projet|management de projet|lean/i,
titre: 'Gestion de projet informatique : cycle en V, agilité, Scrum, Kanban et ITIL', duree: '',
niveau: 'BTS SIO · BTS CIEL · BUT · École d’ingénieurs · Master',
prerequis: ['Aucun'],
competences: ['BTS SIO · Bloc 1 · Travailler en mode projet', 'BUT · Compétence « Conduire un projet »', 'École d’ingénieurs · Piloter un projet'],
intro: 'La majorité des projets informatiques qui échouent ne butent pas sur la technique mais sur l’organisation : besoin mal compris, périmètre qui gonfle, délais irréalistes, utilisateurs découverts à la fin. Ce module présente les deux grandes familles de méthodes, prédictives et agiles, les pratiques concrètes de Scrum et Kanban, le pilotage par les indicateurs et, pour l’exploitation, les processus ITIL de gestion des services.',
cm: [
{ t: 'Le triangle et les parties prenantes', d: '', html: 'Tout projet arbitre entre périmètre, délai et coût, sous contrainte de qualité : on ne peut pas tout augmenter à budget constant. Les parties prenantes sont toutes les personnes concernées : le maître d’ouvrage (MOA), qui exprime le besoin et porte le projet, et le maître d’œuvre (MOE), qui réalise ; les utilisateurs, la direction, l’équipe d’exploitation, le délégué à la protection des données. Les identifier tôt évite de découvrir une exigence bloquante la veille de la mise en service.' },
{ t: 'Méthodes prédictives : cascade et cycle en V', d: '', html: 'Les méthodes prédictives planifient tout au départ. Dans le cycle en V, chaque phase de conception (expression du besoin, spécifications, conception générale, conception détaillée) a sa phase de validation en miroir (recette, tests de validation, d’intégration, unitaires). Le cahier des charges fixe le besoin, le planning de Gantt les tâches et leurs dépendances, le chemin critique la suite de tâches qui fixe la durée totale.
Ces méthodes conviennent quand le besoin est stable et bien connu (déploiement d’une infrastructure, migration réglementaire). Leur faiblesse : les utilisateurs ne voient le résultat qu’à la fin, et une erreur de compréhension coûte d’autant plus cher qu’elle est découverte tard.' },
{ t: 'L’agilité et Scrum', d: '', html: 'Le Manifeste agile (2001) privilégie les individus, le logiciel qui fonctionne, la collaboration avec le client et l’adaptation au changement. On livre par petites itérations et on ajuste à partir des retours.
Scrum organise le travail en sprints de une à quatre semaines. Trois rôles : le Product Owner porte la vision et priorise le Product Backlog ; les développeurs réalisent ; le Scrum Master facilite et lève les obstacles. Quatre événements : planification du sprint, mêlée quotidienne de 15 minutes, revue de sprint avec démonstration aux parties prenantes, rétrospective d’amélioration. Les besoins s’écrivent en user stories (« En tant que professeur, je veux voir les mains levées dans l’ordre, afin d’aider chacun à son tour ») avec des critères d’acceptation et une définition de terminé commune.' },
{ t: 'Kanban et le flux', d: '', html: 'Kanban visualise le travail sur un tableau (à faire, en cours, en revue, terminé) et limite le travail en cours (WIP) dans chaque colonne. Moins de tâches commencées en parallèle, c’est moins de changements de contexte et un délai de livraison plus court. On mesure le temps de cycle (du démarrage à la fin) et le débit. Kanban convient bien à un service support ou à une équipe d’exploitation, où les demandes arrivent en continu. Le lean, dont il est issu, traque les gaspillages : attentes, retouches, fonctionnalités inutiles.' },
{ t: 'Piloter : estimations, indicateurs, risques', d: '', html: 'En agile, on estime en points d’effort relatifs (souvent par planning poker) et on suit la vélocité de l’équipe et le burndown (reste à faire). En prédictif, on suit l’avancement réel contre le planning. Dans tous les cas, on tient un registre des risques (probabilité, impact, action de réduction, responsable) et un relevé de décisions. Un RACI clarifie qui réalise, qui décide, qui est consulté, qui est informé pour chaque livrable.' },
{ t: 'Exploiter : ITIL', d: '', html: 'ITIL rassemble les bonnes pratiques de gestion des services informatiques. Les processus clés au quotidien : la gestion des incidents (rétablir le service au plus vite), la gestion des problèmes (trouver et supprimer la cause des incidents récurrents), la gestion des changements (évaluer et planifier toute modification, avec retour arrière), la gestion des demandes (création de compte, installation), et le catalogue de services avec ses niveaux de service (SLA : délai de prise en charge, de résolution). Des outils comme GLPI, très répandu dans les établissements, outillent ces processus.' }
],
synthese: ['Périmètre, délai, coût sous contrainte de qualité ; MOA et MOE', 'Cycle en V : besoin stable, validation en miroir, Gantt et chemin critique', 'Agile : itérations courtes et retours ; Scrum : rôles, sprint, backlog, user stories', 'Kanban : visualiser, limiter le travail en cours, mesurer le flux', 'Vélocité, burndown, registre des risques, RACI', 'ITIL : incidents, problèmes, changements, demandes, SLA'],
qcm: [
['Qui priorise le Product Backlog ?', ['Le Scrum Master', 'Le Product Owner', 'Le directeur', 'Les développeurs seuls'], 1, 'Il porte la valeur du produit.'],
['Durée d’un sprint Scrum ?', ['Un jour', 'Une à quatre semaines', 'Six mois', 'Illimitée'], 1, 'Durée fixe.'],
['Que limite Kanban ?', ['Le budget', 'Le travail en cours', 'Le nombre de réunions', 'L’équipe'], 1, 'WIP.'],
['Quand préférer le cycle en V ?', ['Besoin incertain', 'Besoin stable et bien connu', 'Toujours', 'Jamais'], 1, 'Méthode prédictive.'],
['Différence incident / problème en ITIL ?', ['Aucune', 'L’incident rétablit le service, le problème traite la cause', 'Le problème est plus rapide', 'L’incident est planifié'], 1, 'Deux processus distincts.'],
['Que contient un RACI ?', ['Les coûts', 'Qui réalise, décide, est consulté, est informé', 'Le planning', 'Les risques'], 1, 'Responsabilités.']
],
td: [
{ n: 'Application', c: 'Rédiger trois user stories avec critères d’acceptation pour la fonction « Lever la main » de Syllabus.', r: 'En tant qu’élève, je veux lever la main depuis mon lab afin d’être aidé. Critères : un clic, confirmation visible, position dans la file.\nEn tant que professeur, je veux voir les mains levées dans l’ordre… Critères : ordre d’arrivée, nom, étape du lab.\nEn tant que professeur, je veux baisser une main une fois l’élève aidé…' },
{ n: 'Application', c: 'Construire le Gantt du déploiement d’une salle de TP (commande, câblage, installation des postes, image système, tests, formation) et identifier le chemin critique.', r: 'Commande → câblage → installation → image → tests → mise en service, formation en parallèle des tests. Chemin critique : la suite commande-câblage-installation-image-tests.' },
{ n: 'Approfondissement', c: 'Remplir le registre des risques du passage d’un établissement à un nouvel ENT (au moins quatre risques).', r: 'Reprise de données incomplète · indisponibilité le jour de la rentrée · refus des utilisateurs · non-conformité RGPD. Pour chacun : probabilité, impact, action (migration à blanc, bascule en vacances, formation, AIPD), responsable.' }
],
tp: { type: 'Projet', url: 'apercu-devoirs.html', desc: 'Projet en équipe sur trois sprints.', etapes: ['Rédiger le backlog', 'Planifier le sprint 1', 'Tenir le tableau Kanban', 'Démontrer en revue de sprint', 'Rétrospective et ajustements'] },
plusLoin: [['Manifeste agile (fr)', 'https://agilemanifesto.org/iso/fr/manifesto.html'], ['Scrum Guide (fr)', 'https://scrumguides.org/'], ['GLPI', 'https://glpi-project.org/fr/']] },
plus: { cas: { titre: '', texte: '' },
resolu: { enonce: 'À trois semaines de la date prévue, le projet d’application de réservation des salles accumule du retard, les utilisateurs découvrent des écrans qui ne leur conviennent pas et l’équipe travaille sur huit fonctionnalités à la fois.', etapes: [
['Faire l’état des lieux', '→ Tableau : 8 fonctionnalités en cours, 1 terminée ; aucune démonstration aux utilisateurs depuis deux mois ; le cahier des charges n’a pas été relu depuis le lancement.'],
['Réduire le travail en cours', '→ Limite de 3 tâches en cours ; on termine avant de commencer. En une semaine, 3 fonctionnalités passent en terminé.'],
['Reprioriser avec la MOA', '→ Atelier avec le Product Owner (proviseure adjointe) : les fonctionnalités sont classées selon la méthode MoSCoW ; l’export statistique passe en « plus tard ».'],
['Montrer tôt', '→ Démonstration hebdomadaire à trois enseignants ; deux écrans sont simplifiés dès la première séance.'],
['Décider', '→ Mise en service à la date prévue avec le périmètre essentiel, le reste en livraisons suivantes. Rétrospective : démonstrations régulières et limite de travail en cours adoptées pour la suite.']
] },
erreurs: ['Ne montrer le produit qu’à la fin', 'Commencer beaucoup de tâches en parallèle', 'Oublier des parties prenantes (DPO, exploitation)', 'User stories sans critères d’acceptation', 'Aucun registre des risques', 'Confondre incident et problème'],
memo: [['Outil', 'Usage'], ['Cahier des charges', 'fixer le besoin (prédictif)'], ['Gantt et chemin critique', 'planifier et identifier les tâches déterminantes'], ['User story + critères d’acceptation', 'exprimer un besoin (agile)'], ['Product Backlog', 'liste priorisée'], ['Tableau Kanban + limite WIP', 'piloter le flux'], ['Burndown · vélocité', 'suivre l’avancement'], ['MoSCoW', 'prioriser'], ['RACI', 'répartir les responsabilités'], ['Registre des risques', 'anticiper'], ['SLA', 'engagement de service (ITIL)']],
examen: { titre: 'Sujet type · 20 points', q: ['Choisir et justifier une méthode pour deux projets donnés. (4 pts)', 'Rédiger quatre user stories. (4 pts)', 'Construire un Gantt et identifier le chemin critique. (5 pts)', 'Remplir un RACI. (3 pts)', 'Distinguer incident, problème et changement ITIL. (4 pts)'], r: ['besoin stable ou non', 'format + critères', 'dépendances', 'une seule A par ligne', 'voir cours'] },
prof: { deroule: [['Ouverture', 'Jeu : construire une tour en cascade puis en itérations'], ['Cours', 'Prédictif et agile'], ['Pratique', 'User stories et backlog'], ['Cours', 'Kanban et ITIL'], ['Clôture', 'Quiz flash']], diff: 'Élèves en difficulté : modèles de user stories. Élèves avancés : SAFe, indicateurs de flux.', eval: 'Projet par sprints, sujet type.' } },
exemples: [
['Lire un burndown', 'Revue de mi-sprint.', 'Reste à faire : J1 34 pts · J5 30 pts · J8 27 pts (idéal J8 : 14 pts)', 'Écart de 13 points', 'L’équipe ne terminera pas le sprint : on retire des éléments avec le Product Owner plutôt que d’allonger le sprint.'],
['Calculer la vélocité', 'Planification.', 'Sprints précédents : 21, 24, 19 points', 'Moyenne ≈ 21 points', 'On engage environ 21 points au prochain sprint, pas 35.'],
['Temps de cycle Kanban', 'Service support.', 'Tickets terminés : 2, 3, 9, 2, 14, 3 jours', 'Médiane 3 jours, deux tickets très longs', 'Les deux tickets longs attendaient une validation extérieure : on ajoute une colonne « en attente » pour rendre ce blocage visible.'],
['Chemin critique', 'Déploiement de salle.', 'Commande 10 j → câblage 3 j → installation 2 j → image 1 j → tests 1 j ; formation 2 j en parallèle des tests', 'Durée totale : 17 jours', 'Tout retard de commande décale la mise en service ; la formation a une marge.'],
['Priorisation MoSCoW', 'Périmètre trop large.', 'Must : réserver, annuler · Should : notifications · Could : statistiques · Won’t : application mobile', 'Livraison 1 : Must + Should', 'Le périmètre essentiel tient dans le délai.'],
['Suivi d’un SLA', 'Rapport mensuel du support.', 'Incidents prioritaires : 42, dont 39 résolus en moins de 4 h', '92,9 % contre un objectif de 95 %', 'Analyse des trois dépassements (tous liés à des pièces à commander) : stock minimal de pièces critiques.']
],
termes: ['MOA', 'MOE', 'cahier des charges', 'cycle en V', 'Gantt', 'chemin critique', 'agile', 'Scrum', 'sprint', 'Product Owner', 'Scrum Master', 'Product Backlog', 'user story', 'critères d’acceptation', 'Kanban', 'WIP', 'vélocité', 'burndown', 'MoSCoW', 'RACI', 'ITIL', 'incident', 'problème', 'changement', 'SLA', 'GLPI']
});
reg({
cours: { id: 'maths', match: /Matrices|Suites|Nombres complexes|Trigonométrie|Intégrales|Fourier|Probabilités|Équations différentielles|Ensembles, relations|Maths :|Décibels|Modulation|échantillonnage|signal/i,
titre: 'Mathématiques pour l’informatique et les réseaux : suites, matrices, complexes, probabilités, signal', duree: '',
niveau: 'BTS SIO (maths approfondies) · BTS CIEL · BUT R&T / Informatique · Classes préparatoires',
prerequis: ['Mathématiques du lycée'],
competences: ['BTS SIO · Mathématiques pour l’informatique', 'BTS CIEL · Mathématiques', 'BUT R&T · Ressources mathématiques et signal'],
intro: 'Les mathématiques ne sont pas un passage obligé déconnecté du métier : les suites décrivent la croissance d’un stockage ou d’un nombre d’utilisateurs, les matrices font tourner les images et les réseaux de neurones, les nombres complexes et Fourier décrivent le signal qui circule sur un câble ou dans l’air, les probabilités mesurent la fiabilité d’un serveur et la sécurité d’un mot de passe. Ce module présente chaque notion avec son application directe en informatique ou en réseaux.',
cm: [
{ t: 'Suites : prévoir une croissance', d: '', html: 'Une suite arithmétique ajoute une raison constante : un = u0 + n·r. Une suite géométrique multiplie par une raison : un = u0·qn. Un stockage qui gagne 200 Go par mois suit une croissance arithmétique ; un nombre d’utilisateurs qui augmente de 8 % par mois suit une croissance géométrique, beaucoup plus rapide à long terme. La somme des termes d’une suite géométrique, S = u0·(1 − qn)/(1 − q), sert par exemple à calculer le volume cumulé de sauvegardes.', exemple: 'Disque de 10 To, 4 To utilisés, +6 % par mois :\n4 × 1,06ⁿ ≥ 10 ⇔ n ≥ ln(2,5) / ln(1,06) ≈ 15,7\n→ saturation dans environ 16 mois' },
{ t: 'Matrices : transformer et calculer en masse', d: '', html: 'Une matrice est un tableau de nombres. Le produit d’une matrice par un vecteur applique une transformation linéaire : rotation, mise à l’échelle, projection. En infographie, faire tourner une image d’un angle θ revient à multiplier chaque point par la matrice de rotation [[cos θ, −sin θ], [sin θ, cos θ]]. Une couche d’un réseau de neurones est exactement un produit matriciel suivi d’une activation. La matrice inverse permet de résoudre un système linéaire ; la matrice d’adjacence représente un graphe, par exemple un réseau de routeurs, et ses puissances comptent les chemins.' },
{ t: 'Nombres complexes : représenter un signal', d: '', html: 'Un nombre complexe z = a + ib s’écrit aussi sous forme exponentielle z = r·eiθ, avec un module r et un argument θ. Cette forme décrit naturellement une onde : amplitude et phase. En électronique, l’impédance d’un circuit en régime sinusoïdal est un nombre complexe ; en télécommunications, la modulation QAM utilisée par le Wi-Fi, la 4G et la fibre code des bits par des points du plan complexe (la constellation) : 256-QAM place 256 points, soit 8 bits par symbole.' },
{ t: 'Trigonométrie, Fourier et échantillonnage', d: '', html: 'Tout signal périodique se décompose en une somme de sinusoïdes : c’est la série de Fourier. La transformée de Fourier généralise cette idée et donne le spectre d’un signal, sa répartition en fréquences : c’est ce que calcule un spectrogramme pour la reconnaissance vocale, ou un analyseur de spectre pour repérer un canal Wi-Fi encombré.
Pour numériser un signal, on l’échantillonne à intervalles réguliers. Le théorème de Shannon-Nyquist impose une fréquence d’échantillonnage au moins double de la plus haute fréquence du signal, sinon apparaît le repliement (aliasing). La voix téléphonique, limitée à environ 3,4 kHz, est échantillonnée à 8 kHz ; la musique, jusqu’à 20 kHz, à 44,1 kHz.' },
{ t: 'Décibels et bilan de liaison', d: '', html: 'Le décibel exprime un rapport de puissances sur une échelle logarithmique : 10·log10(P2/P1). +3 dB double la puissance, −3 dB la divise par deux, −10 dB la divise par dix. Le dBm exprime une puissance par rapport à 1 mW : 20 dBm = 100 mW, puissance maximale courante d’une borne Wi-Fi à 2,4 GHz en France.
Le bilan de liaison additionne simplement en dB puissance émise, gains d’antennes et pertes (câbles, affaiblissement en espace libre, murs) pour estimer la puissance reçue et la comparer à la sensibilité du récepteur. C’est ainsi qu’on dimensionne une liaison Wi-Fi entre deux bâtiments ou un réseau LoRaWAN.' },
{ t: 'Probabilités : fiabilité et sécurité', d: '', html: 'Une variable aléatoire et sa loi décrivent un phénomène incertain ; l’espérance en donne la valeur moyenne. En informatique, les probabilités servent à mesurer la fiabilité : si un serveur est disponible 99 % du temps, deux serveurs redondants indépendants le sont 1 − 0,01² = 99,99 % du temps. Elles mesurent la force d’un mot de passe : 12 caractères parmi 94 donnent 9412 ≈ 4,8 × 1023 possibilités. La loi binomiale modélise le nombre de paquets perdus sur n envois, et le paradoxe des anniversaires explique pourquoi une empreinte de 64 bits connaît une collision après seulement environ 232 essais.' }
],
synthese: ['Suites arithmétiques et géométriques pour prévoir une croissance', 'Matrices : transformations, réseaux de neurones, graphes', 'Complexes : amplitude et phase, constellations QAM', 'Fourier : spectre ; Shannon-Nyquist : échantillonner à plus du double', 'Décibels : +3 dB = ×2, bilan de liaison additif', 'Probabilités : redondance, force des mots de passe, collisions'],
qcm: [
['Un nombre d’utilisateurs augmente de 5 % par mois. Type de suite ?', ['Arithmétique', 'Géométrique', 'Constante', 'Aucune'], 1, 'Raison 1,05.'],
['Combien de bits par symbole en 64-QAM ?', ['4', '6', '8', '64'], 1, '2⁶ = 64.'],
['Fréquence d’échantillonnage minimale pour un signal jusqu’à 4 kHz ?', ['2 kHz', '4 kHz', '8 kHz', '44,1 kHz'], 2, 'Double de la fréquence maximale.'],
['+6 dB correspond à une puissance :', ['doublée', 'environ quadruplée', 'décuplée', 'divisée par deux'], 1, '3 dB = ×2, donc 6 dB ≈ ×4.'],
['Deux serveurs indépendants disponibles à 99 % en redondance :', ['98 %', '99 %', '99,99 %', '100 %'], 2, '1 − 0,01².'],
['20 dBm vaut :', ['20 mW', '100 mW', '1 W', '2 mW'], 1, '10^(20/10) mW.']
],
td: [
{ n: 'Application', c: 'Un serveur de sauvegarde conserve 30 sauvegardes quotidiennes de 200 Go, chacune augmentant de 1 % par jour. Estimer le volume total avec une somme géométrique.', r: 'S = 200 × (1 − 1,01³⁰)/(1 − 1,01) ≈ 200 × 34,78 ≈ 6,96 To' },
{ n: 'Application', c: 'Faire tourner le point (3, 1) de 90° autour de l’origine avec la matrice de rotation.', r: '[[0, −1], [1, 0]] × (3, 1) = (−1, 3)' },
{ n: 'Application', c: 'Bilan de liaison Wi-Fi : émission 17 dBm, antennes 2 × 12 dBi, câbles 2 × 1,5 dB, espace libre 100 dB. Puissance reçue ? Liaison possible si sensibilité −75 dBm ?', r: '17 + 24 − 3 − 100 = −62 dBm > −75 dBm : liaison possible avec 13 dB de marge.' },
{ n: 'Approfondissement', c: 'Comparer le nombre de combinaisons d’un mot de passe de 8 caractères parmi 94 et d’une phrase de passe de 5 mots tirés d’une liste de 7 776 mots.', r: '94⁸ ≈ 6,1 × 10¹⁵ ; 7 776⁵ ≈ 2,8 × 10¹⁹ : la phrase de passe est environ 4 600 fois plus forte et plus facile à retenir.' }
],
tp: { type: 'IDE Python', url: 'apercu-ide.html', desc: 'Mathématiques appliquées avec numpy.', etapes: ['Prévoir la saturation d’un disque', 'Rotations d’images par matrices', 'Spectre d’un signal avec numpy.fft', 'Repliement lors d’un sous-échantillonnage', 'Simulation de disponibilité'] },
plusLoin: [['Eduscol · programmes de mathématiques', 'https://eduscol.education.fr/'], ['3Blue1Brown · Essence of linear algebra', 'https://www.3blue1brown.com/topics/linear-algebra'], ['Khan Academy (fr)', 'https://fr.khanacademy.org/math']] },
plus: { cas: { titre: '', texte: '' },
resolu: { enonce: 'La direction demande pour quand prévoir l’achat de stockage pour l’ENT : 18 To utilisés sur 30 To, avec +0,9 To le mois dernier et +1,1 To le mois précédent l’année d’avant à la même période.', etapes: [
['Choisir le modèle', '→ Relevé sur 12 mois : la croissance mensuelle rapportée au volume est à peu près constante, environ 5 % : modèle géométrique.'],
['Calculer', '18 × 1,05ⁿ ≥ 30 ⇔ n ≥ ln(30/18)/ln(1,05) ≈ 10,5 mois.'],
['Intégrer une marge', '→ Seuil d’alerte à 85 % (25,5 To) : 18 × 1,05ⁿ ≥ 25,5 ⇔ n ≈ 7,1 mois.'],
['Comparer avec le modèle linéaire', '→ À +1 To par mois, la saturation serait dans 12 mois : l’écart de 1,5 mois montre l’importance du bon modèle.'],
['Recommander', '→ Commande dans 5 à 6 mois pour tenir compte des délais de livraison, et supervision prédictive dans Prometheus (predict_linear) pour affiner.']
] },
erreurs: ['Confondre croissance arithmétique et géométrique', 'Additionner des puissances en mW au lieu de travailler en dB', 'Échantillonner à la fréquence du signal', 'Supposer des pannes indépendantes quand elles ne le sont pas (même alimentation)', 'Multiplier des matrices dans le mauvais ordre'],
memo: [['Formule', 'Usage'], ['uₙ = u₀ + n·r', 'suite arithmétique'], ['uₙ = u₀·qⁿ', 'suite géométrique'], ['S = u₀(1 − qⁿ)/(1 − q)', 'somme géométrique'], ['n = ln(a)/ln(q)', 'temps pour atteindre un seuil'], ['R(θ) = [[cos, −sin], [sin, cos]]', 'rotation'], ['z = r·e^{iθ}', 'amplitude et phase'], ['fₑ ≥ 2·f_max', 'Shannon-Nyquist'], ['dB = 10·log₁₀(P₂/P₁)', 'décibels'], ['1 − Π(1 − dispoᵢ)', 'disponibilité en redondance'], ['Nᴸ', 'combinaisons d’un mot de passe']],
examen: { titre: 'Sujet type · 20 points', q: ['Prévoir une saturation par suite géométrique. (5 pts)', 'Appliquer une transformation matricielle. (4 pts)', 'Justifier une fréquence d’échantillonnage. (3 pts)', 'Faire un bilan de liaison. (4 pts)', 'Calculer une disponibilité et une force de mot de passe. (4 pts)'], r: ['ln', 'produit matriciel', 'Nyquist', 'somme en dB', '1 − produit ; Nᴸ'] },
prof: { deroule: [['Ouverture', 'Quand notre disque sera-t-il plein ?'], ['Cours', 'Suites et matrices'], ['Cours', 'Complexes, Fourier, dB'], ['Pratique', 'numpy'], ['Clôture', 'Quiz flash']], diff: 'Élèves en difficulté : formulaire, calculs guidés. Élèves avancés : FFT, algèbre linéaire.', eval: 'Sujet type.' } },
exemples: [
['Prévoir une saturation', 'Planification du stockage.', 'python3 -c "import math; print(math.log(30/18)/math.log(1.05))"', '10.47', 'Environ 10 mois et demi avant saturation au rythme de 5 % par mois.'],
['Produit matriciel', 'Couche d’un réseau de neurones.', 'import numpy as np; W = np.array([[0.5, -1],[2, 0.1]]); x = np.array([1, 2]); W @ x', 'array([-1.5, 2.2])', 'Chaque sortie est une combinaison pondérée des entrées.'],
['Spectre d’un signal', 'Analyser un bruit.', 'f = np.fft.rfftfreq(8000, 1/8000); s = np.abs(np.fft.rfft(np.sin(2*np.pi*440*t) + 0.5*np.sin(2*np.pi*1200*t))); f[s.argsort()[-2:]]', 'array([1200., 440.])', 'La FFT retrouve les deux fréquences qui composent le signal.'],
['Conversion dBm', 'Réglage d’une borne.', 'python3 -c "print(10**(20/10), 10**(14/10))"', '100.0 25.1', '20 dBm = 100 mW ; 14 dBm ≈ 25 mW : baisser de 6 dB divise par quatre.'],
['Disponibilité en redondance', 'Justifier un second serveur.', 'python3 -c "print(1 - (1-0.99)**2)"', '0.9999', 'De 3 jours et demi d’indisponibilité par an à moins d’une heure, si les pannes sont indépendantes.'],
['Force d’un mot de passe', 'Politique de mots de passe.', 'python3 -c "import math; print(math.log2(94**12), math.log2(7776**6))"', '78.66 77.55', 'Un mot de passe aléatoire de 12 caractères et une phrase de 6 mots ont une force comparable, environ 78 bits.']
],
termes: ['suite arithmétique', 'suite géométrique', 'raison', 'matrice', 'produit matriciel', 'matrice de rotation', 'nombre complexe', 'module', 'argument', 'QAM', 'série de Fourier', 'transformée de Fourier', 'spectre', 'échantillonnage', 'Shannon-Nyquist', 'repliement', 'décibel', 'dBm', 'bilan de liaison', 'espérance', 'loi binomiale', 'disponibilité']
});
reg({
cours: { id: 'fichiers', match: /NFS|SFTP|FTP|NTP|chrony|serveur de temps|partage de fichiers|GLPI|bonding|agrégation de liens/i,
titre: 'Services d’infrastructure : partage de fichiers (NFS, SMB, SFTP), temps (NTP) et inventaire (GLPI)', duree: '',
niveau: 'BTS SIO SISR · BTS CIEL IR · BUT R&T · TSSR',
prerequis: ['Droits Unix', 'SSH par clé', 'Annuaires (pour SMB)'],
competences: ['BTS SIO SISR · Bloc 2 · Installer et administrer des services', 'TSSR · Exploiter des serveurs', 'BTS SIO · Bloc 1 · Gérer le patrimoine informatique'],
intro: 'Derrière chaque établissement tournent des services discrets mais indispensables : les partages de fichiers où enseignants et élèves déposent leurs documents, l’heure exacte sans laquelle l’authentification et les journaux deviennent inutilisables, et l’inventaire qui dit quel matériel existe et quels tickets sont ouverts. Ce module les présente avec leurs pièges de production : FTP en clair, NFS mal exporté, horloges qui dérivent, parc non inventorié.',
cm: [
{ t: 'Transférer des fichiers : oublier FTP', d: '', html: 'FTP (1971) transmet identifiants et données en clair et utilise deux connexions (commande sur 21, données sur un port négocié), ce qui complique le filtrage et le NAT. On l’abandonne au profit de SFTP, sous-système de SSH : un seul port (22), chiffrement, authentification par clé. Pour un espace de dépôt, on crée un groupe dédié et on enferme ses membres dans un dossier avec la directive ChrootDirectory d’OpenSSH, sans accès shell.', exemple: '# /etc/ssh/sshd_config\nMatch Group depot\n ChrootDirectory /srv/depot/%u\n ForceCommand internal-sftp\n AllowTcpForwarding no\n X11Forwarding no\n# le dossier chroot doit appartenir à root et ne pas être modifiable par l’utilisateur', attention: 'Le dossier désigné par ChrootDirectory doit appartenir à root et ne pas être accessible en écriture par le groupe ou les autres, sinon sshd refuse la connexion (« bad ownership or modes for chroot directory »). On crée un sous-dossier accessible en écriture pour l’utilisateur.' },
{ t: 'NFS entre serveurs Linux', d: '', html: 'NFS monte un dossier distant comme s’il était local, entre machines Unix. Le serveur déclare ses exports dans /etc/exports avec les clients autorisés et les options : rw ou ro, root_squash (par défaut, root du client devient nobody sur le serveur), sync. NFSv3 identifie les utilisateurs par leur UID numérique : les UID doivent correspondre entre machines. NFSv4 utilise un seul port (2049) et peut s’appuyer sur Kerberos pour authentifier et chiffrer.', exemple: '# /etc/exports\n/srv/sauvegardes 10.62.40.0/24(rw,sync,root_squash,no_subtree_check)\nsudo exportfs -ra ; sudo exportfs -v\n# côté client\nsudo mount -t nfs4 fichiers:/srv/sauvegardes /mnt/sauv\n# /etc/fstab : fichiers:/srv/sauvegardes /mnt/sauv nfs4 defaults,_netdev 0 0' },
{ t: 'SMB pour les postes Windows', d: '', html: 'SMB est le protocole de partage des postes Windows, servi par Windows Server ou par Samba sous Linux. Les droits combinent les permissions du partage et celles du système de fichiers ; en domaine, ils s’appuient sur les groupes de l’annuaire. SMBv1, exploité par le rançongiciel WannaCry en 2017, doit être désactivé ; SMB 3 chiffre les échanges. Les clichés instantanés (shadow copies, ou snapshots ZFS et Btrfs exposés par Samba) permettent aux utilisateurs de restaurer eux-mêmes une version précédente d’un fichier.' },
{ t: 'L’heure exacte : NTP et chrony', d: '', html: 'Sans horloge synchronisée, Kerberos refuse les authentifications (écart maximal de 5 minutes), les certificats paraissent invalides, les journaux de plusieurs machines deviennent impossibles à corréler et les tâches planifiées se déclenchent au mauvais moment. NTP (UDP 123) synchronise les horloges sur des serveurs de référence organisés en strates : strate 0 pour l’horloge atomique ou le GPS, strate 1 pour le serveur qui y est relié, et ainsi de suite.
Sous Debian, chrony est le client et serveur recommandé ; il corrige progressivement la dérive plutôt que de faire sauter l’heure. On configure quelques serveurs internes qui se synchronisent sur des sources publiques (pool.ntp.org, serveurs d’opérateurs), et tous les autres équipements sur ces serveurs internes.', exemple: '# /etc/chrony/chrony.conf (serveur interne)\npool fr.pool.ntp.org iburst\nallow 10.62.0.0/16\n\n$ chronyc tracking\nReference ID : 5B1A2C3D (ntp1.fr.example)\nStratum : 3\nSystem time : 0.000012873 seconds fast of NTP time\nLeap status : Normal' },
{ t: 'Inventaire et assistance : GLPI', d: '', html: 'GLPI, logiciel libre français, est très présent dans les établissements et les collectivités. Il tient l’inventaire du parc (ordinateurs, logiciels, licences, imprimantes, contrats), alimenté automatiquement par un agent qui remonte la configuration de chaque poste, et gère l’assistance : tickets d’incident et de demande, catégories, priorités, délais (SLA), base de connaissances. Relier un ticket au matériel concerné permet de repérer un poste qui tombe en panne à répétition et de justifier un remplacement.' },
{ t: 'Redondance des liens : agrégation', d: '', html: 'Un serveur de fichiers critique ne doit pas dépendre d’un seul câble. L’agrégation de liens (bonding sous Linux, LACP 802.3ad côté switch) regroupe plusieurs interfaces physiques en une interface logique : en mode active-backup, une seule sert et l’autre prend le relais en cas de panne ; en mode 802.3ad, les deux se partagent le trafic, ce qui augmente le débit total pour plusieurs clients, mais pas le débit d’une connexion unique. Le switch doit être configuré en cohérence.' }
],
synthese: ['FTP en clair : SFTP avec clé et chroot', 'NFS : exports, root_squash, UID cohérents, NFSv4 et Kerberos', 'SMB : Samba ou Windows, SMBv1 désactivé, clichés pour restaurer', 'NTP et chrony : heure exacte indispensable à Kerberos, TLS et journaux', 'GLPI : inventaire automatique et tickets liés au matériel', 'Bonding active-backup ou LACP pour la redondance'],
qcm: [
['Pourquoi abandonner FTP ?', ['Trop lent', 'Identifiants et données en clair', 'Payant', 'Interdit'], 1, 'SFTP chiffre.'],
['Que fait root_squash ?', ['Supprime root', 'Transforme root du client en nobody sur le serveur', 'Chiffre', 'Donne root à tous'], 1, 'Protection par défaut.'],
['Pourquoi les UID doivent-ils concorder en NFSv3 ?', ['Pour la vitesse', 'NFS identifie les utilisateurs par leur UID numérique', 'Pour Kerberos', 'Ils n’ont pas à concorder'], 1, 'Sinon mauvais propriétaire.'],
['Quel protocole de partage exploité par WannaCry ?', ['NFS', 'SMBv1', 'SFTP', 'NTP'], 1, 'À désactiver.'],
['Port de NTP ?', ['TCP 22', 'UDP 123', 'TCP 443', 'UDP 53'], 1, 'UDP 123.'],
['En bonding 802.3ad, une seule copie de fichier va-t-elle deux fois plus vite ?', ['Oui', 'Non, une connexion unique reste sur un lien', 'Parfois', 'Seulement en IPv6'], 1, 'Le débit total augmente pour plusieurs clients.']
],
td: [
{ n: 'Application', c: 'Mettre en place un dépôt SFTP pour que chaque élève de SIO1 dépose ses rendus dans son seul dossier, sans shell.', r: 'groupe depot, utilisateurs dans ce groupe · /srv/depot/ root:root 755, sous-dossier rendus appartenant à l’élève · bloc Match Group depot avec ChrootDirectory /srv/depot/%u et ForceCommand internal-sftp · sshd -t puis reload.' },
{ n: 'Application', c: 'Exporter /srv/iso en lecture seule vers tout le réseau serveurs et /srv/sauvegardes en lecture-écriture vers le seul serveur de sauvegarde.', r: '/srv/iso 10.62.40.0/24(ro,root_squash,no_subtree_check)\n/srv/sauvegardes 10.62.40.50(rw,sync,root_squash,no_subtree_check)\nexportfs -ra' },
{ n: 'Approfondissement', c: 'Concevoir la hiérarchie de temps d’un établissement (serveurs, contrôleurs de domaine, switchs, postes).', r: 'Deux serveurs chrony internes synchronisés sur des sources publiques · DC principal synchronisé sur eux, postes Windows sur la hiérarchie du domaine · switchs et Linux sur les serveurs internes · flux UDP 123 sortants limités à ces deux serveurs.' }
],
tp: { type: 'Lab VM', url: 'apercu-labs.html', desc: 'Serveur de fichiers et de temps sur deux VM.', etapes: ['Configurer un dépôt SFTP chrooté', 'Exporter un dossier NFS et le monter', 'Configurer chrony serveur et client', 'Mesurer l’écart avec chronyc', 'Inventorier les VM dans GLPI avec l’agent'] },
plusLoin: [['Debian Wiki · NFS Server Setup', 'https://wiki.debian.org/NFSServerSetup'], ['Documentation chrony', 'https://chrony-project.org/documentation.html'], ['Documentation GLPI', 'https://glpi-project.org/fr/documentation/'], ['ANSSI · Recommandations pour un usage sécurisé d’OpenSSH', 'https://cyber.gouv.fr/publications/openssh-secure-use-recommendations']] },
plus: { cas: { titre: '', texte: '' },
resolu: { enonce: 'Les sauvegardes nocturnes écrites par le serveur de sauvegarde sur un partage NFS échouent avec « Permission denied », alors qu’elles fonctionnaient avant la réinstallation du serveur de sauvegarde.', etapes: [
['Reproduire', 'Sur le serveur de sauvegarde : sudo -u backup touch /mnt/sauv/test\ntouch: cannot touch \'/mnt/sauv/test\': Permission denied'],
['Comparer les identités', 'Sur le client : id backup → uid=998(backup)\nSur le serveur NFS : ls -ln /srv/sauvegardes → propriétaire 1001\n→ Après réinstallation, l’utilisateur backup a reçu un autre UID. NFSv3 compare les numéros, pas les noms.'],
['Corriger', 'Sur le client : usermod -u 1001 backup && find / -xdev -uid 998 -exec chown -h 1001 {} +\n→ L’UID est aligné sur celui du serveur.'],
['Vérifier', 'sudo -u backup touch /mnt/sauv/test && ls -l /mnt/sauv/test\n-rw-r--r-- 1 backup backup 0 … test\n→ La sauvegarde de test passe.'],
['Prévenir', '→ UID des comptes de service fixés dans la procédure d’installation (ou gérés par l’annuaire), passage à NFSv4 avec idmapping par nom, et supervision du succès de chaque sauvegarde.']
] },
erreurs: ['Laisser un serveur FTP en clair', 'Chroot SFTP avec un dossier appartenant à l’utilisateur', 'Exporter NFS vers * ou avec no_root_squash sans raison', 'UID différents entre machines en NFSv3', 'SMBv1 encore actif', 'Machines sans synchronisation d’heure', 'Parc non inventorié'],
memo: [['Commande', 'Usage'], ['sftp -i cle eleve@serveur', 'se connecter en SFTP'], ['sshd -t', 'valider la configuration SSH'], ['exportfs -v', 'exports NFS actifs'], ['showmount -e serveur', 'exports vus depuis un client'], ['mount -t nfs4 …', 'monter un partage'], ['smbclient -L //serveur -U user', 'lister les partages SMB'], ['testparm', 'valider la configuration Samba'], ['chronyc tracking · sources -v', 'état de la synchronisation'], ['timedatectl', 'heure et fuseau du système'], ['cat /proc/net/bonding/bond0', 'état de l’agrégation']],
examen: { titre: 'Sujet type · 20 points', q: ['Remplacer un FTP par un SFTP chrooté. (5 pts)', 'Écrire des exports NFS justifiés. (4 pts)', 'Expliquer l’importance de NTP pour Kerberos et les journaux. (4 pts)', 'Diagnostiquer un problème d’UID NFS. (4 pts)', 'Présenter l’intérêt de GLPI. (3 pts)'], r: ['Match Group, chroot root:root', 'ro/rw, root_squash', '5 minutes, corrélation', 'id et ls -ln', 'inventaire + tickets'] },
prof: { deroule: [['Ouverture', 'Capturer un mot de passe FTP avec tcpdump'], ['Cours', 'SFTP, NFS, SMB'], ['Pratique', 'Lab fichiers'], ['Cours', 'NTP et GLPI'], ['Clôture', 'Quiz flash']], diff: 'Élèves en difficulté : configurations fournies. Élèves avancés : NFSv4 Kerberos, bonding LACP.', eval: 'Lab validé, sujet type.' } },
exemples: [
['Voir un mot de passe FTP', 'Démonstration de sécurité.', 'sudo tcpdump -ni ens18 -A port 21 | grep -E "USER|PASS"', 'USER prof.sio\nPASS Rentree2026', 'Le mot de passe circule en clair : raison suffisante pour passer à SFTP.'],
['Chroot refusé', 'Élève qui ne se connecte pas.', 'journalctl -u ssh | tail -1', 'fatal: bad ownership or modes for chroot directory "/srv/depot/lea.martin"', 'Le dossier chroot appartient à l’élève : il doit appartenir à root, avec un sous-dossier inscriptible pour elle.'],
['Voir les exports', 'Client qui ne monte pas.', 'showmount -e fichiers', 'Export list for fichiers:\n/srv/iso 10.62.40.0/24\n/srv/sauvegardes 10.62.40.50', 'Le client 10.62.40.51 n’est pas autorisé sur /srv/sauvegardes.'],
['Vérifier l’heure', 'Kerberos refuse les connexions.', 'chronyc tracking | grep -E "Reference|System time"', 'Reference ID : 00000000 ()\nSystem time : 412.8 seconds slow of NTP time', 'Aucune source joignable et près de 7 minutes de retard : vérifier le flux UDP 123 vers les serveurs internes.'],
['État du bonding', 'Serveur de fichiers critique.', 'grep -E "Mode|Slave Interface|MII Status" /proc/net/bonding/bond0', 'Bonding Mode: IEEE 802.3ad Dynamic link aggregation\nSlave Interface: ens18\nMII Status: up\nSlave Interface: ens19\nMII Status: down', 'Un des deux liens est tombé : le service continue, mais il n’y a plus de redondance. Vérifier le câble et le port du switch.'],
['Lister les partages SMB', 'Audit.', 'smbclient -L //fichiers -U technicien -m SMB3', 'Sharename Type Comment\n--------- ---- -------\nprofs Disk Documents enseignants\neleves Disk Espaces élèves', 'Connexion forcée en SMB 3. Un échec avec -m SMB3 alors que -m NT1 passe révélerait un serveur encore en SMBv1.']
],
termes: ['FTP', 'SFTP', 'ChrootDirectory', 'internal-sftp', 'NFS', 'NFSv4', '/etc/exports', 'root_squash', 'UID', 'SMB', 'SMBv1', 'Samba', 'clichés instantanés', 'NTP', 'chrony', 'strate', 'UDP 123', 'GLPI', 'inventaire', 'ticket', 'bonding', 'LACP', '802.3ad']
});
})();