Comment tracer sudo
$ sudo strace -u <username> sudo -k <command>
sudo
exécutestrace
en tant que root.strace
exécutesudo
comme<username>
passé par le-u
option.sudo
supprime les informations d'identification mises en cache du précédentsudo
avec-k
option (pour redemander le mot de passe) et exécute<command>
.
Le deuxième sudo
est le suivi (le processus suivi).
Pour mettre automatiquement l'utilisateur courant à la place de <username>
, utilisez $(id -u -n)
.
Pourquoi sudo ne fonctionne pas avec strace
En plus de cette réponse de Charles, voici ce que execve()
la page de manuel indique :
Si le bit set-user-ID est défini sur le fichier de programme référencé par pathname, l'ID utilisateur effectif du processus appelant est remplacé par celui du propriétaire du fichier de programme. De même, lorsque le bit set-group-ID du fichier programme est défini, l'ID de groupe effectif du processus appelant est défini sur le groupe du fichier programme.
Les transformations susmentionnées des ID effectifs ne sont pas effectuées (c'est-à-dire que les bits set-user-ID et set-group-ID sont ignorés) si l'une des conditions suivantes est vraie :
- l'attribut no_new_privs est défini pour le thread appelant (voir prctl(2)) ;
- le système de fichiers sous-jacent est monté nosuid (l'indicateur MS_NOSUID pour mount(2)) ; ou
- le processus appelant est en cours de traçage.
Les capacités du fichier de programme (voir capacity(7)) sont également ignorées si l'une des conditions ci-dessus est vraie.
Les permissions pour tracer un processus, inspecter ou modifier sa mémoire, sont décrites dans la sous-section Vérification du mode d'accès Ptrace dans la section REMARQUES de la page de manuel de ptrace(2). J'ai commenté cela dans cette réponse.
Pour des raisons de sécurité, le bit setuid et ptrace (utilisé pour exécuter des binaires sous un débogueur) ne peuvent pas être honorés en même temps. Le non-respect de cette restriction dans le passé a conduit à CVE-2001-1384.
Par conséquent, tout système d'exploitation conçu dans un souci de sécurité cessera d'honorer ptrace lors de l'exécution d'un binaire setuid, ou ne respectera pas le bit setuid lorsque ptrace est utilisé.
Sous Linux, envisagez plutôt d'utiliser Sysdig -- qui, ne pouvant que visualiser mais pas modifier le comportement, ne court pas les mêmes risques.