亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求指點下,為什么我在做練習的時候卻發現這樣的情況:

求指點下,為什么我在做練習的時候卻發現這樣的情況:

嚕嚕噠 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 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號