为了账号安全,请及时绑定邮箱和手机立即绑定

求指点下,为什么我在做练习的时候却发现这样的情况:

求指点下,为什么我在做练习的时候却发现这样的情况:

噜噜哒 2023-04-08 18:14:28
若文件所有者是超级用户,而且设置了该文件的设置用户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!
查看完整描述

2 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

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

查看完整回答
反对 回复 2023-04-11
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

你对设置用户ID的理解有偏差,它并不是简单的指文件所有者的id

查看完整回答
反对 回复 2023-04-11
  • 2 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信