Vérifier les permissions du répertoire de drop-ins du serveur SSH
Garantit que le répertoire de drop-ins /etc/ssh/sshd_config.d appartient à root sans accès pour le groupe ou les autres, afin que les fragments de politique SSH ne puissent être injectés ni lus par des utilisateurs non privilégiés.
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
Sur Ubuntu et RHEL 9 / Fedora, le sshd_config principal inclut chaque fragment de /etc/ssh/sshd_config.d, ces drop-ins définissent donc la politique SSH effective (par ex. 50-cloud-init.conf d'Ubuntu). Si le répertoire est modifiable par le groupe ou les autres, un utilisateur non privilégié peut y ajouter un fragment qui réactive la connexion root, affaiblit les chiffrements ou installe une porte dérobée au prochain rechargement ; s'il est lisible au-delà de root, la politique est divulguée. Le répertoire doit appartenir à root sans lecture/écriture/exécution pour le groupe ou les autres ni bits spéciaux.
Ce que vérifie Pavois
Pavois lit le mode effectif du répertoire /etc/ssh/sshd_config.d et vérifie l'absence de lecture/écriture/exécution pour le groupe ou les autres et l'absence de bits setuid/setgid/sticky. Protégé par only_if { file('/etc/ssh/sshd_config.d').exist? }. C'est précisément l'angle de Pavois : un scanner basé sur les fichiers qui ne vérifie que sshd_config rate les drop-ins Include qui définissent réellement la politique, sécuriser ce répertoire ferme la voie d'injection, et sshd -T confirme le résultat résolu.
only_if { file('/etc/ssh/sshd_config.d').exist? }
describe file('/etc/ssh/sshd_config.d') do
it { should_not be_executable.by('owner') }
it { should_not be_setuid }
it { should_not be_executable.by('group') }
it { should_not be_writable.by('group') }
it { should_not be_readable.by('group') }
it { should_not be_setgid }
it { should_not be_executable.by('other') }
it { should_not be_writable.by('other') }
it { should_not be_readable.by('other') }
it { should_not be_sticky }
endComment vérifier qu’elle est appliquée
Exécutez stat -c '%a %U %G' /etc/ssh/sshd_config.d. La sortie attendue est 700 root root (ou plus strict) : aucune lecture, écriture ou exécution pour le groupe ou les autres. Ensuite sshd -T affiche la politique effective assemblée depuis les fragments.
Inspecter et investiguer
stat /etc/ssh/sshd_config.d affiche le mode du répertoire ; sshd -T affiche la politique effective après assemblage des drop-ins. Les événements SSH/authentification sont dans journalctl -u ssh / /var/log/auth.log (Ubuntu) ou journalctl -u sshd / /var/log/secure (RHEL/Fedora). Les modifications du répertoire apparaissent dans /var/log/audit/audit.log si surveillées.
Remédiation
Aucun plan de durcissement automatisé n'est défini pour cette règle, appliquez-la donc manuellement : chown root:root /etc/ssh/sshd_config.d puis chmod 0700 /etc/ssh/sshd_config.d.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| mode | 0600 |
|---|---|
| path | /etc/ssh/sshd_config.d |
| resource | file |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
Comme les drop-ins surchargent la configuration principale, un sshd_config.d modifiable par le groupe ou tous est un risque encore plus aigu qu'un sshd_config modifiable : un utilisateur non privilégié peut discrètement l'emporter sur la précédence du dernier appliqué et réactiver la connexion root ou une authentification faible au prochain rechargement. Précautions : modifier uniquement les permissions du répertoire ne coupe pas les sessions actives, c'est donc sûr ; conservez 0700 root:root, et validez tout changement de configuration avec sshd -t avant de recharger pour éviter un démon qui ne démarre pas et vous verrouille dehors.
Mapping des normes
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| CIS | 5.1.1 | direct | per OS, see the benchmark table | haute |
| NIST | AC-17(a), AC-6(1), CM-6(a) | support | 800-53 Rev 5 · 800-171 Rev 2 (pinned) | 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.