我有以下简单的代码来检查我的getuid功能:为什么我的setuid功能无法正常工作?
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命令了以下内容:
USER1:197609:197609 [...]
用户2:197623:197121 [...]
其中,197609和197623必须是用户的id,因为事实上,我以用户1启动应用程序,并且我在开始和结束时正确显示其ID:“用户标识为197609” 。
我已经在创建的可执行文件上为每个人设置了所有权限,我甚至用cygwin - cygstart --action = runas ./a.exe运行可执行文件作为根目录,但它仍然无法运行。
有趣的是,即使没有特殊权限或运行,setgid(用于更改组)功能与setgid(197121)完美协同工作。所以我不知道为什么这个函数总是返回一个错误。
对我的代码有什么问题可能会导致问题的任何想法?
感谢您的关注。
那么错误是什么? -1的返回值告诉你有*错误;错误存储在'errno'中,你可以用'strerror(errno)'得到一个描述。 – immibis
不知道errno,它说操作不允许。 – user2638180