【发布时间】:2013-09-27 01:57:40
【问题描述】:
我目前正在阅读一本关于使用 C 编程的书,我需要编写一个程序来显示正在执行文件的真实 uid 和有效 uid。用gcc编译代码后,我输入命令查看当前的uOwner和gOwnerls- l id_demo输出是这样的:
-rwxrwxr-x 1 user user 8629 Sep 21 13:04 id_demo
然后我执行程序本身,这就是我得到的:
real uid: 1000 effective uid: 1000
...到目前为止一切顺利。然后我输入一个命令来更改文件的所有者:
sudo chown root:root ./id_demo
ls -l 确认所有者已更改为root:
-rwxrwxr-x 1 root root 8629 Sep 21 13:04 id_demo
再次,执行程序将real uid 和uid 显示为1000。uid 必须为0 的最后一步是:sudo chmod u+s ./uid_demo 但对我来说它们保持为1000,在书中输出清楚地显示为:
real uid: 1000
effective uid: 0
任何想法为什么会发生这种情况?
更新
id_demo源码:
#include <stdio.h>
int main ()
{
printf("real uid: %d\n", getuid());
printf("effective uid: %d\n", geteuid());
}
更新 2 屏幕截图
请帮忙。我要疯了,我花了 6 个多小时寻找解决方案,我需要继续前进。
【问题讨论】:
-
这可能是无关的,但对于
getuid()和geteuid()你需要unistd.h和sys/types.h你不包括在内。参考man 2 getuid。 -
我试试看,但代码来自书中。
-
同样的结果仍然该死的 1000
标签: command-line permissions privileges