gpt4 book ai didi

c - setuid() C 函数也更改 euid 值?

转载 作者:太空狗 更新时间:2023-10-29 12:04:21 26 4
gpt4 key购买 nike

这个示例 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 位。
请帮助我理解。谢谢

最佳答案

检查man 2 setuid:

setuid() sets the effective user ID of the calling process. If the effective UID of the caller is root, the real UID and saved set-user-ID are also set.

因此,正如您已经观察到的那样,当您以普通用户身份执行 setuid() 时,它只会更改有效用户 ID。

关于c - setuid() C 函数也更改 euid 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20630691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com