S'assurer que seuls les utilisateurs connectés sur un vrai tty peuvent exécuter sudo - sudo requiretty
Active l'option Defaults requiretty afin que sudo ne puisse être invoqué que depuis un vrai terminal (tty), et non depuis un script, une tâche cron ou un démon sans tty.
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
Exiger un vrai tty restreint les contextes dans lesquels sudo peut être utilisé et réduit la surface d'attaque. Sans requiretty, un service web, un démon ou un processus d'arrière-plan compromis pourrait appeler sudo de façon non interactive ; cela limite aussi l'impact des détournements de session où l'attaquant ne dispose d'aucun terminal de contrôle. Imposer un tty interactif rattache l'élévation de privilèges à une véritable session de connexion attribuable.
Ce que vérifie Pavois
Pavois recherche dans l'arborescence sudoers active, /etc/sudoers et chaque fichier sous /etc/sudoers.d/, une directive non commentée Defaults ... requiretty. Comme sudo fusionne sa politique à partir du fichier principal et de tous les drop-ins, parcourir toute l'arborescence reflète la politique effective plutôt qu'un seul fichier qu'un drop-in ultérieur pourrait écraser.
describe command('grep -rqE \'^[^#]*Defaults[^#]*\brequiretty\b\' /etc/sudoers /etc/sudoers.d/ 2>/dev/null && echo ok || echo ko') do
its('stdout.strip') { should eq 'ok' }
endComment vérifier qu’elle est appliquée
Exécutez sudo grep -rE '^[^#]*Defaults.*requiretty' /etc/sudoers /etc/sudoers.d/. Une ligne correspondante, non commentée, confirme que l'option est active. Pour tester, un appel sudo sans tty (par ex. ssh hôte 'sudo id' sans -t) doit désormais échouer avec sorry, you must have a tty to run sudo.
Inspecter et investiguer
Les appels à sudo et leurs refus sont journalisés dans /var/log/auth.log (Debian/Ubuntu) ou /var/log/secure (RHEL), et via journalctl -t sudo. Une tentative sans tty est enregistrée avec un refus requiretty/must have a tty, utile pour repérer les scripts ou services qui utilisaient sudo en silence.
Remédiation
Le plan de durcissement de Pavois écrit une ressource file dans /etc/sudoers.d/99-Pavois-requiretty contenant Defaults requiretty, appartenant à root:root avec le mode 0440, validée avec visudo -cf avant activation. Appliquez-le avec pavois harden apply. Le drop-in dédié isole la modification et la rend réversible.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| content | Defaults requiretty |
|---|---|
| group | root |
| mode | 0440 |
| owner | root |
| path | /etc/sudoers.d/99-pavois-requiretty |
| resource | file |
| verify | visudo -cf %{path} |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
requiretty casse le sudo non interactif : tâches cron, pipelines CI, agents de gestion de configuration (Ansible, Chef) et appels ssh hôte 'sudo ...' sans pseudo-tty échoueront. Avant d'appliquer, auditez ces appelants, passez l'automatisation SSH à ssh -t, réglez le pipelining/pty d'Ansible en conséquence, ou accordez aux chemins sans tty une exemption ciblée avec une règle Defaults!/commande !requiretty. Le drop-in est validé par visudo avant activation : il ne peut donc pas corrompre sudoers ; vérifiez vos automatisations juste après l'application.
Mapping des normes
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| ANSSI BP-028 | R39 | direct | 2.0 | haute |
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.