2

このサンプル 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 のみを変更します (p.bin が 'sarah' によって開始されたとき、uid は 1000 だったので、これは効果がないはずです):

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

Debian 6 64 ビットを使用しています。
理解を助けてください。ありがとうございました

4

1 に答える 1

3

チェックman 2 setuid:

setuid() は、呼び出しプロセスの実効ユーザー ID を設定します。呼び出し元の有効な UID が root の場合、実際の UID と保存された set-user-ID も設定されます。

したがって、すでに観察したように、通常のユーザーとして実行している場合setuid()、有効なユーザー ID のみが変更されます。

于 2013-12-17T09:59:44.250 に答える