Zalogować każde wywołanie każdego programu SUID?

12

Chciałbym mieć plik dziennika zawierający wpis za każdym razem, gdy użytkownik uruchamia dowolny program suid, zawierający nazwę użytkownika, program i wszelkie przekazane mu argumenty wiersza poleceń. Czy jest standardowy sposób na osiągnięcie tego w Linuksie?

Kim
źródło

Odpowiedzi:

7

Można rejestrować wszystkie wywołania określonego pliku wykonywalnego (setuid lub nie) za pośrednictwem podsystemu kontroli . Dokumentacja jest raczej rzadka; zacznij od strony manuala auditctl lub może tego samouczka . Najnowsze dystrybucje wysyłają auditdpaczkę. Zainstaluj go i upewnij się, że auditddemon działa, a następnie zrób

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

i obserwuj, jak połączenia się logują /var/log/audit/audit.log(lub gdziekolwiek skonfigurowała to Twoja dystrybucja).

Gilles „SO- przestań być zły”
źródło
1
Wydaje mi się, że można napisać skrypt, aby najpierw pobrać wszystkie pliki binarne SUID z funkcją find, a następnie użyć rozwiązania dla każdego z nich. Nie elegancki, ale z pewnością wykonalny. Dzięki!
Kim
2
@Kim: Myślę, że możesz zalogować wszystkie wywołania binarnego katalogu głównego setuid przez użytkownika innego niż root, zastępując -F path=…je -F euid=0 -F 'uid!=0'lub coś podobnego. Nie widzę haka w kodzie setxid wywoływanego przezexecve konkretny zegarek setxid w podsystemie kontroli . Lub, oczywiście, możesz rejestrować wszystkie execvei postprocesy.
Gilles „SO - przestań być zły”
Ciekawy. Nigdy wcześniej o tym nie słyszałem. Zastanawiam się, jak szeroko jest stosowany. Debian popcon nie ma wpisu auditd.
Faheem Mitha
findpolecenie, aby wyświetlić listę wszystkich plików SUID:find / -xdev \( -perm -4000 \) -type f -print
1
@FaheemMitha Posiada wpis popcona: qa.debian.org/popcon-graph.php?packages=auditd
jofel