Enregistrer chaque invocation de chaque programme SUID?

12

Je voudrais avoir un fichier journal qui contient une entrée pour chaque fois qu'un utilisateur exécute un programme suid, contenant le nom d'utilisateur, le programme et tous les arguments de ligne de commande qui lui sont passés. Existe-t-il un moyen standard d'y parvenir sous Linux?

Kim
la source

Réponses:

7

Vous pouvez consigner toutes les invocations d'un exécutable spécifique (setuid ou non) via le sous-système d'audit . La documentation est plutôt clairsemée; commencez par la page de manuel auditctl , ou peut - être ce tutoriel . Les distributions les plus récentes expédient un auditdpackage. Installez-le et assurez-vous que le auditddémon est en cours d'exécution, puis faites

auditctl -A exit,always -F path=/path/to/executable -S execve

et regardez les appels se connecter /var/log/audit/audit.log(ou partout où votre distribution l'a configuré).

Gilles 'SO- arrête d'être méchant'
la source
1
Je suppose que l'on pourrait écrire un script pour obtenir d'abord tous les binaires SUID avec find, puis utiliser votre solution pour chacun. Pas élégant, mais certainement faisable. Merci!
Kim
2
@Kim: Je pense que vous pouvez enregistrer toutes les invocations d'un binaire racine setuid par un utilisateur non root en le remplaçant -F path=…par -F euid=0 -F 'uid!=0'ou quelque chose comme ça. Je ne vois pas de hook dans le code setxid invoqué parexecve ni une veille setxid spécifique dans le sous-système d'audit . Ou bien sûr, vous pouvez enregistrer chaque execvepost-traitement.
Gilles 'SO- arrête d'être méchant'
Intéressant. Jamais entendu ça avant. Je me demande à quel point il est largement utilisé. Debian popcon n'a pas d'entrée pour auditd.
Faheem Mitha
findcommande pour lister tous les fichiers SUID:find / -xdev \( -perm -4000 \) -type f -print
1
@FaheemMitha Il a une entrée popcon: qa.debian.org/popcon-graph.php?packages=auditd
jofel