【问题标题】:setuid() C function changes euid value too?setuid() C 函数也改变 euid 值?
【发布时间】:2013-12-17 09:42:36
【问题描述】:

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

【问题讨论】:

  • 我认为 p.bin 只改变 euid,不改变 uid。

标签: c linux setuid


【解决方案1】:

查看man 2 setuid:

setuid() 设置调用进程的有效用户ID。如果调用者的有效UID 是root,也设置了真实的UID和保存的set-user-ID。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    相关资源
    最近更新 更多