2013-12-17 1 views
2

Этот пример SUID программыsetuid() Функция C также меняет значение euid?

#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()); 
} 

имеет 'Ноэми' (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.b была начата 'Sarah'):

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

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

+1

Я думаю, что p.bin меняет только euid, а не uid. – Medinoc

+0

Право, спасибо – user2431763

ответ

3

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

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

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