getuid
или geteuid
будет очевидным выбором.
getuid
проверяет учетные данные фактического пользователя.
Добавлено e
в geteuid
означает effective
. Проверяет действительные учетные данные.
Например, если вы используете sudo
для запуска программы от имени пользователя root (суперпользователь), ваши действительные учетные данные остаются вашей учетной записью, а действительные учетные данные - учетная запись root (или члена группы wheel) и т. д.)
Например, рассмотрим код, подобный следующему:
#include <unistd.h>
#include <iostream>
int main() {
auto me = getuid();
auto myprivs = geteuid();
if (me == myprivs)
std::cout << "Running as self\n";
else
std::cout << "Running as somebody else\n";
}
Если вы запустите это нормально, getuid()
и geteuid()
вернут одно и то же значение, поэтому он скажет «работает как сам». Если вы вместо этого сделаете sudo ./a.out
, getuid()
все равно вернет ваш идентификатор пользователя, но geteuid()
вернет учетные данные для пользователя root или wheel, поэтому он скажет: «Работать как кто-то другой».