Vérifier que seuls les utilisateurs connectés à un vrai tty peuvent exécuter sudo - use_pty sudo
Exige que sudo exécute chaque commande dans un pseudo-terminal dédié (Defaults use_pty), empêchant le détournement du terminal après la fin d'un programme privilégié.
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
Activer Defaults use_pty force chaque commande sudo à s'exécuter dans un pseudo-terminal alloué par sudo lui-même. Sans cela, un programme malveillant lancé via sudo peut utiliser l'ioctl TIOCSTI pour réinjecter des caractères dans le terminal de contrôle, ce qui lui permet d'exécuter d'autres commandes en tant qu'utilisateur privilégié après la fin du programme initial. Exiger un PTY dédié empêche cette technique de détournement de terminal et garantit que la sortie de session peut être capturée de façon fiable.
Ce que vérifie Pavois
Pavois vérifie la politique sudo effective en recherchant, dans /etc/sudoers et chaque drop-in de /etc/sudoers.d/, une ligne Defaults ... use_pty active. Comme sudo fusionne son fichier principal avec tous les drop-ins @includedir, analyser l'ensemble reflète la politique réellement imposée à l'exécution, une vérification sur un seul fichier raterait une directive placée dans un drop-in.
describe command('grep -rqE \'^[^#]*Defaults[^#]*\buse_pty\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[^#]*\buse_pty\b' /etc/sudoers /etc/sudoers.d/, vous devez obtenir une ligne Defaults use_pty. Validez la syntaxe du drop-in avec sudo visudo -cf /etc/sudoers.d/99-Pavois-use_pty (attendu : parsed OK).
Inspecter et investiguer
Les invocations de sudo sont enregistrées dans /var/log/auth.log (Debian/Ubuntu) ou /var/log/secure (RHEL) ; interrogez-les avec journalctl _COMM=sudo. Avec use_pty actif, sudo alloue un PTY pour chaque session, observable dans la liste des processus (ps -t) pendant une commande privilégiée.
Remédiation
Le plan de durcissement de Pavois écrit un fichier drop-in /etc/sudoers.d/99-Pavois-use_pty (propriétaire root:root, mode 0440) contenant Defaults use_pty, et le valide avec visudo -cf avant de l'activer. Appliqué avec pavois harden apply.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| content | Defaults use_pty |
|---|---|
| group | root |
| mode | 0440 |
| owner | root |
| path | /etc/sudoers.d/99-pavois-use_pty |
| 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
Risque faible pour un usage interactif. La principale réserve concerne l'automatisation : les programmes qui lancent sudo sans terminal attaché (certains jobs CI, tâches cron, ou appels distants ssh hôte sudo cmd sans -t) peuvent échouer avec sudo: a terminal is required to read the password ou sudo: no tty present. Auditez les appelants sudo non interactifs avant d'appliquer, et utilisez ssh -t ou des règles NOPASSWD selon les cas. Le drop-in est validé avec visudo -cf avant activation, pour éviter qu'une erreur de syntaxe dans sudoers ne bloque l'élévation de privilèges.
Mapping des normes
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| ANSSI BP-028 | R39 | direct | 2.0 | haute |
| CIS | 2.2.6, 5.2.2 | direct | per OS, see the benchmark table | haute |
| 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.