[英]setuid or setgid fails
我寫了這個功能:
void setugid(uid_t uid, gid_t gid) {
uid_t euid = geteuid();
gid_t egid = getegid();
if (setgid(gid) < 0 || setuid(uid) < 0)
assert(0);
}
斷言已執行。 在核心轉儲中,我發現了以下變量值:
uid = 8
gid = 12
euid = 0
egid = 0
8和12是正確的ID。 當setuid
后跟setgid
時,我已經看到了這樣的問題。 但就我而言不是。 可能是什么問題?
我發現了問題。 ID為8的用戶已達到其已執行進程的限制。
您應該真正修改程序以顯示系統調用返回的錯誤。
如果您的進程的EUID確實為0,則只有在該程序沒有更改UID或GID(CAP_SETUOD和CAP_SETGID功能)的權限時,或者如果您要更改的UID已達到其進程限制,因此該程序無法執行,該程序才會失敗還有一個過程。
我建議更改函數以在調用setuid()
或setgid()
之前打印進程的euid,如果其中任何一個調用失敗,則打印errno
。
我發現了問題。 ID為8的用戶已達到其已執行進程的限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.