В настоящее время я пытаюсь выяснить, как работают 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-bit для владельца файла:
[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 должен фактически возвращать идентификатор пользователя, вызывающего эту программу (т.е. chris - мой идентификатор будет 1000), но программа показывает root в качестве эффективного идентификатора пользователя. Может кто-нибудь объяснить мне, почему это так?