Jak sledovat sudo
$ sudo strace -u <username> sudo -k <command>
sudo
běžístrace
jako root.strace
běžísudo
jako<username>
předán přes-u
možnost.sudo
zruší přihlašovací údaje uložené v mezipaměti z předchozíhosudo
s-k
(pro opětovné dotazování na heslo) a spustí<command>
.
Druhý sudo
je tracee (sledovaný proces).
Pro automatické vložení aktuálního uživatele na místo <username>
, použijte $(id -u -n)
.
Proč sudo nefunguje se strace
Kromě této odpovědi od Charlese je zde co execve()
manuálová stránka říká:
Pokud je bit set-user-ID nastaven na programový soubor, na který odkazuje cesta, pak se skutečné ID uživatele volajícího procesu změní na ID vlastníka programového souboru. Podobně, když je nastaven bit set-group-ID souboru programu, efektivní ID skupiny volajícího procesu je nastaveno na skupinu souboru programu.
Výše uvedené transformace efektivních ID se neprovedou (tj. bity set-user-ID a set-group-ID se ignorují), pokud platí cokoli z následujícího:
- atribut no_new_privs je nastaven pro volající vlákno (viz prctl(2));
- podkladový souborový systém je připojen nosuid (příznak MS_NOSUID pro mount(2)); nebo
- Probíhá sledování procesu volání.
Schopnosti programového souboru (viz schopnosti(7)) jsou také ignorovány, pokud platí cokoli z výše uvedeného.
Oprávnění pro trasování procesu, kontrolu nebo úpravu jeho paměti jsou popsána v podsekci Kontrola režimu přístupu Ptrace v sekci POZNÁMKY manuálové stránky ptrace(2). Vyjádřil jsem se k tomu v této odpovědi.
Z bezpečnostních důvodů nelze setuid bit a ptrace (používané ke spouštění binárních souborů pod ladicím programem) současně respektovat. Neschopnost prosadit toto omezení v minulosti vedlo k CVE-2001-1384.
V důsledku toho jakýkoli operační systém navržený s ohledem na bezpečnost buď přestane respektovat ptrace na exec binárního souboru setuid, nebo selže respektovat bit setuid, když se ptrace používá.
V Linuxu zvažte místo toho použití Sysdigu – který je schopen pouze prohlížet, ale nikoli upravovat chování, nepředstavuje stejná rizika.