您好,匿名用户
随意问技术百科期待您的加入

关于设置用户ID的疑问

0 投票
若文件所有者是超级用户,而且设置了该文件的设置用户ID位,然后当该程序由一个进程执行时,则该进程具有超级用户特权。不管执行此文件的进程的实际用户ID是什么,都进行这种处理。------《unix环境高级编程》

我在做练习的时候却发现这样的情况:
1、test程序的权限是776(-rwxrwxrw-),属于root所有。------>test程序只是一个输出hello world的程序。
2、下面的程序叫exe(-rwxrwxr-x)程序,它是属于普通用户所有。

#include<apue.h>
#include<sys/wait.h>

int main(int argc , char* argv[])
{
	pid_t pid;
	if((pid = fork()) < 0)
		err_sys("fork error!");
	else if(pid == 0)
	{
		if(execlp("./test","test",(char*)0) < 0)
			err_sys("execlp error!");
	}

	if(waitpid(pid,NULL,0) < 0)
		err_sys("wait error!");

	return 0;
}

在我没有设置用户ID位的情况下,在exe程序中fork一个进程来调用test程序,出现的是permission denied!
在我设置用户ID的情况下,同样出现的是permission denied!
当我把test程序的权限改为(-rwxrwxrwx)的时候,就可以正常运行!如果是这样的话,那么直接设置其他用户的权限不就可以了吗?为什么还需要设置用户ID呢?
抑或是我理解错误,exe程序中的那个进程只是具有超级用户特权,也就是可以做超级用户可以做的事情,但是进程的实际用户ID,有效用户ID都没有改变?

我也对passwd做过同样的试验,把passwd的其他用户执行权限给拿掉以后,如果要修改密码,就会出现permission denied!

用户头像 提问 2012年 12月1日 @ Gragas 上等兵 (254 威望)
分享到:

1个回答

0 投票
 
最佳答案

如果test要被执行就需要一个other的x权限,不一定777,771也可以。
你执行exe的时候用的哪个用户,那么fork的进程调用test的就是那个权限,test属于root,如果exe不是root执行的,调用test必然会deny,就像你直接用某个用户去执行test一样。

用户头像 回复 2012年 12月1日 @ Miss Fortune 上等兵 (418 威望)
选中 2012年 12月1日 @Gragas
提一个问题:

相关问题

0 投票
1 回复 40 阅读
用户头像 提问 2012年 12月1日 @ Irelia 上等兵 (292 威望)
0 投票
1 回复 33 阅读
0 投票
1 回复 22 阅读
用户头像 提问 2012年 12月1日 @ Nautilus 上等兵 (223 威望)
0 投票
1 回复 28 阅读
用户头像 提问 2013年 11月13日 @ 末日姐 上等兵 (172 威望)
0 投票
1 回复 34 阅读
用户头像 提问 2012年 12月1日 @ Ashe 上等兵 (336 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...