簡體   English   中英

setuid或setgid失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM