我寫了這個功能:setuid或setgid失敗
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的用戶已達到其執行進程的限制。
如果系統調用失敗,您應該檢查['errno'](http://man7.org/linux/man-pages/man3/errno.3.html)以查看*失敗*。你可以使用['perror'](http://man7.org/linux/man-pages/man3/perror.3.html)來打印錯誤,或['strerror'](http://man7.org /linux/man-pages/man3/strerror.3.html)來獲取一個字符串。還請閱讀['setuid'](http://man7.org/linux/man-pages/man2/setuid.2.html)和['setgid'](http://man7.org/linux/man- pages/man2/setgid.2.html)手冊頁。 – 2014-09-19 10:15:23