PALI — revue des archives et restauration limitée
Date : 26 octobre 2026
Périmètre : lecture des deux sources Wayback, création de variantes séparées,
vérifications statiques et simulations APT. Aucun script d'installation exécuté,
aucun service installé/reconfiguré, aucune intervention en production.

SOURCES ORIGINALES, INCHANGÉES

- Debian 8 : palid8-archive-20201028.sh.txt, version 1.26,
  capture Wayback du 28 octobre 2020, 26 914 octets.
  SHA256 dea7afe081f5672c3a26c9775484216b2c9307912a102145cc6acf60e77b3cc7
- Debian 9 : paliv9-archive-20191113.sh.txt, version 2.3,
  capture Wayback du 13 novembre 2019, 26 198 octets.
  SHA256 2791540283d7ca9d6d7483daaf18fcb2e1a1d16bb730521604f6f2b9b0606efe

Les références de lignes ci-dessous concernent ces sources originales. La date
de capture prouve la présence à cette date, pas la date de publication du code.
Les variantes restored/palid8.sh et restored/paliv9.sh portent un en-tête distinct.

RISQUES CONCRETS TROUVÉS ET TRAITEMENT

1. Installation root de code Internet non figé / clé de confiance en HTTP.
   D8 : 678–712 et 888–900. D9 : 675–702 et 876–888.
   Composer et NodeSource étaient pipés vers PHP/Bash ; Drush, WP-CLI et Drupal
   Console utilisaient des cibles mouvantes ; la clé Webmin était importée après
   téléchargement HTTP. Duplicity D8 était compilé depuis une archive sans
   vérification d'empreinte.
   Correction : suppression explicite des téléchargements/exécutions tiers de la
   variante. Composer, NodeSource, Grunt, Drush, WP-CLI, Drupal Console, Webmin et
   l'intégration Certbot historique sont annoncés indisponibles. Les options -j,
   -w et -l 1 échouent avant modification. Duplicity D8 utilise le paquet signé
   jessie-backports 0.7.10. Ce changement ne prétend pas restaurer ces extras.

2. Poursuite après échecs et absence de garde de machine/cible.
   Original : commandes de mutation dès D8/D9 150–194, sans arrêt général sur
   erreurs ; marqueur de succès puis exit 0 même si certains services échouaient.
   Correction : Bash strict ; validation des entrées, Debian 8 ou 9 amd64 exact,
   machine neuve et absence de pile existante ; au moins 2 Gio RAM. Mode --check
   par défaut, --install-archive nécessaire. Authentification et téléchargement
   APT de tous les paquets AVANT hostname, comptes, services et installation.
   Installations ensuite avec --no-download ; refus APT jamais contourné.
   Marqueur de réussite après vérification de tous les services seulement.

3. Sources APT périmées et modifications du sources.list général.
   D8/D9 : 175–194. Les dépôts normaux ne desservent plus ces distributions.
   Correction : sources archive.debian.org exclusives dans un répertoire APT
   temporaire, avec cache, listes et trousseau dédiés. Aucun remplacement des
   sources ou trousseaux du système. Le trousseau local est fourni explicitement
   (--keyring) et doit être vérifié indépendamment ; aucune clé récupérée en HTTP.
   Les paquets HTTP restent contrôlés par APT à partir des métadonnées signées.
   Check-Valid-Until=false est limité à cette invocation Jessie, nécessaire pour
   son vieux backports. Aucun trusted=yes, allow-unauthenticated ou mécanisme
   d'acceptation de dépôt non signé. Les versions historiques d'APT peuvent
   refuser des clés/signatures expirées : le script s'arrête dans ce cas.

4. Mots de passe root SSH, faiblesse relative du générateur et envoi de secrets.
   D8 : 199–212, 670, 924–968. D9 : 199–212, 666–667, 913–957.
   Correction : aucun changement du mot de passe root Unix ni de sa politique
   d'authentification SSH. Secrets des nouveaux comptes de 24 octets aléatoires
   (/dev/urandom), conservés avant configuration dans un fichier root 0600, sous
   /root/pali-archives mode 0700. Statut INCOMPLETE tant que l'installation échoue.
   Aucun envoi par mail, aucune copie vers .p, aucun mot de passe en argument de
   mysql/htpasswd. chpasswd/htpasswd reçoivent les secrets sur entrée standard ;
   MySQL D8 utilise un fichier client 0600, supprimé avec les temporaires.
   MariaDB D9 conserve l'authentification root locale unix_socket du paquet.

5. Exposition de services et protections réseau incomplètes.
   MySQL bind=* : D8 595, D9 586 ; pare-feu IPv4 seulement D8 970–984/D9 960–973.
   FTP TLS=0 et MinUID=33 : D8 844–848, D9 822–826.
   Correction : MySQL et Memcached sur loopback ; FTP TLS=3 impose chiffrement de
   la session et des données, comptes UID >=1000 et anonymes interdits. Plage
   passive explicite 30000–30100. Pare-feu IPv4 ET IPv6 avant démarrage final des
   services ; restauration des anciens filtres sur échec, après arrêt des seuls
   services nouvellement installés, hors SSH. Aucune ouverture Webmin.
   Munin et phpMyAdmin limités au local, accessibles par redirection SSH.
   Le certificat FTP est local/autosigné : l'administrateur doit vérifier son
   empreinte ; ce n'est pas une validation d'identité par une autorité publique.
   Compatibilité TLS=3 confirmée dans les manuels Debian Jessie/Stretch pure-ftpd :
   https://manpages.debian.org/jessie/pure-ftpd-common/pure-ftpd.8.en.html
   https://manpages.debian.org/stretch/pure-ftpd-common/pure-ftpd.8.en.html

6. Divulgation et écriture de configuration trop larges.
   phpinfo public : D8 883/D9 870 ; réécriture de clés publiques SSH : 161.
   Entrées hostname/email/ports reprises dans chemins, SQL, sed et configuration
   sans validation stricte ; changements de locale écrasant /etc/environment.
   Correction : phpinfo supprimé, aucune réécriture de clé publique, aucune
   réécriture globale de locale. FQDN, IPv4, mail et ports validés avant mutation.
   Les comptes SQL restent alphanumériques et les mots de passe hexadécimaux.
   Le répertoire Apache autorisé est limité au www. SSH n'est modifié et relancé
   que si -s est explicitement demandé ; sinon tous ses ports restent inchangés.

7. Compatibilité fonctionnelle vérifiée par lecture des paquets historiques.
   - phpMyAdmin dbconfig nécessite un MySQL déjà actif. L'installation se fait
     donc en deux temps : core bloqué par policy-rc.d ; MySQL configuré loopback
     et démarré ; phpMyAdmin configuré ensuite, les autres services restant
     empêchés de démarrer automatiquement.
   - MariaDB Stretch initialise root en unix_socket (postinst officiel confirmé).
     Aucune réécriture SQL du mot de passe root n'est nécessaire.
   - www D9 conserve /run/php/php7.0-fpm.sock, cohérent avec le handler du paquet.
     Le handler phpMyAdmin reste dans son bloc Directory. D8 conserve le socket
     par défaut /var/run/php5-fpm.sock ; les pools applicatifs restent distincts.
   - mod_php/prefork désactivés si présents ; MPM worker D8 ou event D9 et FPM
     activés explicitement. CGI Munin dispose de cgid. Le dossier de slowlogs
     /var/log/php-fpm est créé. Userdir est conservé.
   - Les versions archivées de fail2ban-client n'ont pas -t. Validation avec -d
     puis statut du service lancé. Preuves dans archive-evidence/package-inspection.
   - Calcul RAM tiré de MemTotal plutôt que de la 3e ligne de free (qui peut être
     le swap). Taille minimale vérifiée avant installation. Les pools FPM ont
     des valeurs de démarrage moins gourmandes ; le tuning reste historique.
   - Sessions Memcached dans les contextes PHP originaux et max_input_vars
     conservés. phpinfo public et installateurs tiers retirés sont explicitement
     identifiés, ils ne constituent pas une suppression silencieuse.

VALIDATION RÉELLEMENT EFFECTUÉE

- Lecture intégrale des deux scripts originaux et des différences D8/D9.
- bash -n des deux variantes : PASS. Aide, refus d'options et validateurs isolés
  couverts par le parent et le pair ; voir script-verification.json et
  FUNCTIONAL-REVIEW.json. Aucun chemin --install-archive exécuté.
- Index Debian amd64 et empreintes des paquets vérifiés par le pair archive.
- Simulations APT par phases avec état dpkg synthétique, sans installation :
  Jessie principal 606 paquets, core 600, backports après core 58, PMA final 6 ;
  Stretch principal 616, core 602, PMA final 14. Retours 0. Aucun mod_php implicite.
  Couverture des versions des phases --no-download par les téléchargements
  simulés : aucune manquante. Ces comptes dépendent de l'état synthétique de
  test et ne sont pas une promesse sur une machine réelle.
- Aucun daemon historique, postinst, changement réseau ou téléchargement lancé
  par les variantes. Les scripts d'installation n'ont pas été exécutés.

LIMITES ET VÉRIFICATIONS ENCORE REQUISES

Debian 8/9, PHP5/7.0, MySQL/MariaDB et les outils concernés sont anciens. APT signé
authentifie les archives, il ne corrige pas les vulnérabilités apparues depuis.
Les originaux sont proposés comme documents historiques. Les variantes corrigent
des dangers concrets et préparent une installation d'archive ; elles ne sont pas
certifiées utilisables en production ni validées de bout en bout sur une VM.

Avant toute affirmation d'installation complète, il reste un essai sur deux VM
vierges Debian8/9 isolées : authentification de leur APT réel, scripts postinst,
FPM/Apache, authentification SQL, phpMyAdmin local, graphe Munin, sessions PHP,
FTPS contrôle ET données, accès SSH/reconnexion, pare-feu et persistance au reboot,
arrêt propre lors d'échecs injectés. Les modifications réseau ne doivent pas être
essayées sur le poste de développement ou sur un serveur existant.

POINT D'AUDIT ÉCARTÉ APRÈS VÉRIFICATION

Une première lecture de sortie JSON avait fait croire à un double antislash avant
les guillemets SetHandler D9. Vérification octet par octet : il s'agit d'un seul
antislash, correct en Bash. Aucun correctif n'a été appliqué sur ce faux positif.
