Функция setuid() C также изменяет значение euid?

Этот пример программы suid

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

void main() {
int ret;
printf("uid=%d, euid=%d\n", getuid(), geteuid());
ret = setuid(1000);
printf("uid=%d, euid=%d\n", getuid(), geteuid());
}

имеет «noemi» (id = 1001) в качестве владельца:

sarah-$ logname
sarah
sarah-$ ls -l p.bin
-rwsr-xr-x 1 noemi noemi 7028 17 dic 10.30 p.bin

Если начать с пользователя 'sarah' (id=1000), euid изменится на 1000
Почему? p.bin изменяет только uid (это не должно иметь никакого эффекта, так как uid был 1000, когда p.bin был запущен 'сарой'):

sarah-$ ./p.bin
uid=1000, euid=1001
uid=1000, euid=1000
sarah-$

Я использую 64-разрядную версию Debian 6.
Пожалуйста, помогите мне понять. Спасибо


person Antonio Rizzo    schedule 17.12.2013    source источник
comment
Я думаю, что p.bin меняет только euid, а не uid.   -  person Medinoc    schedule 17.12.2013


Ответы (1)


Проверить man 2 setuid:

setuid() устанавливает эффективный идентификатор пользователя вызывающего процесса. Если эффективный UID вызывающей стороны — root, также устанавливаются реальный UID и сохраненный set-user-ID.

Итак, как вы уже заметили, когда вы выполняете setuid() как обычный пользователь, он изменит только эффективный идентификатор пользователя.

person hek2mgl    schedule 17.12.2013