我有以下簡單的代碼來檢查我的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