В настоящее время я пытаюсь выяснить, как работают бит SUID и соответствующие функции seteuid и geteuid. Итак, я написал эту небольшую программу:
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char **argv) {
printf("oldid %d\n", geteuid());
if(seteuid(0) == -1)
perror("seteuid faied");
printf("newid %d\n", geteuid());
return 0;
}
Скомпилировал, сменил владельца на root и s-бит на владельца файла:
[chris@myhost Test]$ ls -l test
-rwsr-xr-x 1 root root 4830 Apr 5 07:56 test
Но тогда произведенный вывод выглядит следующим образом:
[chris@myhost Test]$ ./test
oldid 0
newid 0
А вот этого я не понимаю. Согласно тому, что я обнаружил, первый вызов geteuid должен фактически возвращать идентификатор пользователя вызывающей стороны этой программы (т. Е. Крис - мой идентификатор будет 1000), но программа показывает root как эффективный идентификатор пользователя. Может ли кто-нибудь объяснить мне, почему это так?