gpt4 book ai didi

c - 为什么我的 setuid 功能不起作用?

转载 作者:行者123 更新时间:2023-11-30 17:04:16 24 4
gpt4 key购买 nike

我有以下简单代码来检查我的 getuid 函数:

            uidActual=getuid(); 

printf ("User id is [%d]\n", uidActual);

error=setuid(197623);
printf("[%d]",error);

uidActual=getuid();
printf ("\n User id is [%d]\n", uidActual);

但它总是返回 -1 作为错误,因此 uid 不会改变。

setuid 中的 197623 似乎是正确的,除了其他之外,我的 mkpasswd 命令中的以下内容:

用户1:197609:197609[...]

用户2:197623:197121[...]

其中 197609 和 197623 必须是用户的 id,因为事实上我使用用户 1 启动应用程序,并且我获得了在开头和结尾正确显示的 id:“用户 id 是 197609”。

我已经为每个人设置了创建的可执行文件的所有权限,我什至在 cygwin 中使用 cygstart --action=runas ./a.exe 以 root 身份运行可执行文件,但它仍然不起作用。

有趣的是,setgid(用于更改组)函数可以与 setgid(197121) 完美配合,即使没有特殊权限或运行。所以我不知道为什么这个函数总是返回错误。

知道我的代码中有什么问题可能导致该问题吗?

感谢您的关注。

最佳答案

发布的代码必须由具有适当权限的用户运行。也许是通过:

sudo ./a.exe

这里是 setuid() 的 (linux) 手册页的摘录

“EPERM 用户没有特权(Linux:没有 CAP_SETUID 功能)并且 uid 与调用进程的真实 UID 或保存的 set-user-ID 不匹配。”

关于c - 为什么我的 setuid 功能不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35880447/

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