Suid bit strace

Проблема возникает из-за того, что при strace процесса из-под учётной записи не привилегированного юзера(к примеру, трейсим процесс-обработчик php, запускаемый на шаред хостинге, к которому у нас нет рутового доступа) возникает проблема со сбросом suid bit для вызываемого дочернего процесса, описанная в https://sourceforge.net/p/strace/mailman/message/29565633/ и в https://stackoverflow.com/questions/37333618/ptrace-suid-process-after-it-drops-previlege

Причины такого поведения изложены в https://security.stackexchange.com/questions/176398/debugging-suid-for-privilege-escalation, если кратко, то возможностью трейсить процесс с повышенными через suid bit привелегиями у процесса, запущенного процессом обычного пользователя, из под учётки этого пользователя, как и возможность получать core-файлы(корки) процессов с suid bit из-под не привелигированной учётки – это большая дыра в безопасности, а потому по умолчанию только пользователь с привилегиями администратора, имеющий возможность трейсить процессы, запущенные из под других пользователей, имеет возможность трейсить дочерние процессы, запускаемые с suid bit.

Для того, чтобы strace(или другое приложение, юзающее ptrace) имел возможность трейсить процессы, запущенные с suid bit, приложение должно быть запущено от рута, или приложению необходим атрибут CAP_SYS_PTRACE.

Вот так в трейсе setuid 93(вызов sendmail на системе с exim)

[pid 26763] 10:58:52.452841 setgid(93)  = 0
[pid 26763] 10:58:52.452887 setuid(93)  = 0

выглядит когда strace запущен с CAP_SYS_PTRACE или от рута.

А так, когда его нет

[pid 19291] 10:34:03.915342 setgid(93)  = -1 EPERM (Operation not permitted)
В итоге процесс, что обычно запускаетя с suid bit от имени exim(93), получает вместо этого привилегии рядового пользователя, а значит этот процесс будет выполняться с ошибками(ему же не случайно нужен suid bit), и в итоге в strace мы увидим не тот результат, что воспроизводится при выполнении приложения не из под strace. Чтобы не возникало таких коллизий приложения, порождающие процессы через запуск приложения с suid bit необходимо трейсить с помощью strace, запущенного от рута.