На днях я обнаружил интересный нюанс в поведении pthread_setugid_np (да, да, я знаю, что она задепрекейчена), который интересен в контексте кроссплатформенной разработки.
Оказывается, если из потока имперсонированного данной функцией, создать другой поток, то он унаследует изменённые uid и gid.
В то время как при использовании аналогичной виндовой функции - SetThreadToken - создаваемый поток получит токен процесса.