Vérifier les permissions des fichiers de clés publiques *.pub du serveur SSH
Garantit que le répertoire /etc/ssh (qui contient les clés d'hôte SSH et les fichiers *.pub) n'est ni modifiable ni exécutable par le groupe ou les autres, protégeant l'intégrité des clés d'hôte.
Vérifié sur le contenu d’un fichier de configuration persistant, la source de vérité qui survit aux redémarrages.
Un mapping est une référence croisée vers l’endroit où chaque norme situe cette exigence, ancrée et recoupée, pas une affirmation d’équivalence. Un check réussi est une preuve vers ces références, comment le lire.
Pourquoi cette règle
Le répertoire /etc/ssh contient les paires de clés d'hôte SSH, dont les clés d'hôte publiques *.pub que les clients utilisent pour authentifier le serveur. Si un fichier de clé d'hôte publique (ou le répertoire qui le contient) est modifiable par un utilisateur non privilégié, un attaquant pourrait le remplacer pour faciliter des attaques de l'homme du milieu ou saper la confiance dans la clé d'hôte, compromettant le service SSH. Le répertoire doit appartenir à root sans écriture/exécution pour le groupe ou les autres ni bits spéciaux, afin que le matériel de clé d'hôte ne puisse être altéré par des utilisateurs non autorisés.
Ce que vérifie Pavois
Pavois lit le mode effectif du répertoire /etc/ssh et vérifie l'absence d'écriture/exécution pour le groupe ou les autres et l'absence de bits setuid/setgid/sticky (les fichiers publics *.pub sont lisibles par tous par conception ; la protection vise leur écriture). Protégé par only_if { file('/etc/ssh').exist? }. Vérifier l'inode réel du répertoire reflète ce qu'un attaquant pourrait réellement modifier à l'exécution, indépendamment de ce que le paquet a livré.
describe command("find /etc/ssh -maxdepth 1 -name '*.pub' -perm /133 2>/dev/null") do
its('stdout.strip') { should eq '' }
endComment vérifier qu’elle est appliquée
Exécutez stat -c '%a %U %G' /etc/ssh. La sortie attendue est 755 root root ou plus strict : aucun bit d'écriture pour le groupe ou les autres. Les clés publiques elles-mêmes doivent être en 644 root root et les clés d'hôte privées en 600 root root (vérifiez avec ls -l /etc/ssh/ssh_host_*).
Inspecter et investiguer
stat /etc/ssh et ls -l /etc/ssh/*.pub affichent les modes courants. Les empreintes de clé d'hôte présentées aux clients se vérifient avec ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub. Les événements du service SSH sont dans journalctl -u ssh / /var/log/auth.log (Debian/Ubuntu) ou journalctl -u sshd / /var/log/secure (famille RHEL). Les modifications apparaissent dans /var/log/audit/audit.log si /etc/ssh est surveillé.
Remédiation
Aucun plan de durcissement automatisé n'est défini pour cette règle, appliquez-la donc manuellement : chown root:root /etc/ssh puis chmod 0755 /etc/ssh, et assurez-vous que les clés publiques sont en chmod 0644 /etc/ssh/*.pub (les clés d'hôte privées doivent rester en 0600).
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| command | find /etc/ssh -maxdepth 1 -name '*.pub' -exec chmod 0644 {} + 2>/dev/null; true |
|---|---|
| name | sshd-pubkey-perms |
| not_if | test -z "$(find /etc/ssh -maxdepth 1 -name '*.pub' -perm /133 2>/dev/null)" |
| resource | exec |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
Si /etc/ssh est modifiable par un non-root, un attaquant peut échanger les clés d'hôte et mettre en place un homme du milieu, ou remplacer les clés du démon pour rompre la confiance des clients et déclencher des avertissements de non-correspondance de clé d'hôte. Précautions : conservez le répertoire lisible/traversable (0755) et les clés publiques lisibles par tous (0644), les clients et le démon en ont besoin ; ne mettez pas le répertoire en 0700 ni les fichiers .pub en 0600, cela pourrait perturber la gestion des clés. Resserrer uniquement les bits d'écriture n'interrompt pas les sessions SSH existantes.
Mapping des normes
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| ANSSI BP-028 | R50 | direct | 2.0 | haute |
| CIS | 2.2.6, 5.1.3, 5.1.5 | direct | per OS, see the benchmark table | haute |
| NIST | 3.1.13, AC-17(a), AC-6(1), CM-6(a) | support | 800-53 Rev 5 · 800-171 Rev 2 (pinned) | moyenne |
| PCI DSS | 2.2.6 | support | 4.0.1 | moyenne |
Chaque référence est une référence croisée ancrée dans le benchmark amont et recoupée avec le SCAP Security Guide et ansible-lockdown, pas une affirmation d’équivalence. Direct = une exigence prescriptive au niveau de la ligne ; support = une famille de contrôle abstraite (NIST) vers laquelle le check apporte une preuve. Comment lire un mapping.