В момента се опитвам да разбера как работят SUID-bit и съответните функции 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 всъщност трябва да върне потребителския идентификатор на повикващия на тази програма (т.е. Крис - моят ID ще бъде 1000), но програмата показва root като действителен потребителски идентификатор. Може ли някой да ми обясни защо е така?