博客專欄

        EEPW首頁(yè) > 博客 > Linux用戶ID和組ID

        Linux用戶ID和組ID

        發(fā)布人:美男子玩編程 時(shí)間:2024-08-21 來(lái)源:工程師 發(fā)布文章

        在 Linux 系統(tǒng)中,用戶和組 ID 用于識(shí)別進(jìn)程和文件的訪問(wèn)權(quán)限。每個(gè)進(jìn)程都有與之關(guān)聯(lián)的實(shí)際用戶 ID、實(shí)際組 ID、有效用戶 ID、有效組 ID 以及附屬組 ID。


        圖片


        實(shí)際用戶 ID (Real User ID, UID)

        • 定義:實(shí)際用戶 ID 是啟動(dòng)進(jìn)程的用戶的 ID。

        • 作用:標(biāo)識(shí)執(zhí)行該進(jìn)程的用戶。

        • 獲取:使用 getuid() 函數(shù)可以獲取實(shí)際用戶 ID。


        實(shí)際組 ID (Real Group ID, GID)

        • 定義:實(shí)際組 ID 是啟動(dòng)進(jìn)程的用戶組的 ID。

        • 作用:標(biāo)識(shí)執(zhí)行該進(jìn)程的用戶組。

        • 獲取:使用 getgid() 函數(shù)可以獲取實(shí)際組 ID。


        有效用戶 ID (Effective User ID, EUID)

        • 定義:有效用戶 ID 用于控制進(jìn)程對(duì)文件系統(tǒng)資源的訪問(wèn)權(quán)限。

        • 作用:決定進(jìn)程的訪問(wèn)權(quán)限。例如,具有 root 權(quán)限的進(jìn)程可以通過(guò)將 EUID 設(shè)置為 0 來(lái)獲得特權(quán)操作的權(quán)限。

        • 獲取:使用 geteuid() 函數(shù)可以獲取有效用戶 ID。


        有效組 ID (Effective Group ID, EGID)

        • 定義:有效組 ID 用于控制進(jìn)程對(duì)文件系統(tǒng)資源的訪問(wèn)權(quán)限。

        • 作用:與有效用戶 ID 類似,決定進(jìn)程在組級(jí)別上的訪問(wèn)權(quán)限。

        • 獲取:使用 getegid() 函數(shù)可以獲取有效組 ID。


        附屬組 ID (Supplementary Group IDs)

        • 定義:附屬組 ID 是用戶所屬的其他組的 ID 列表,除了實(shí)際組 ID 和有效組 ID 之外。

        • 作用:允許進(jìn)程獲得多個(gè)組的權(quán)限,從而可以訪問(wèn)更多的資源。

        • 獲取:使用 getgroups() 函數(shù)可以獲取附屬組 ID 列表。


        以下代碼演示如何獲取并打印這些 ID:


        #include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <grp.h>
        int main() {    uid_t uid = getuid();    gid_t gid = getgid();    uid_t euid = geteuid();    gid_t egid = getegid();     printf("Real User ID: %dn", uid);    printf("Real Group ID: %dn", gid);    printf("Effective User ID: %dn", euid);    printf("Effective Group ID: %dn", egid);
            int ngroups = 10;    gid_t groups[10];    if (getgroups(ngroups, groups) == -1) {        perror("getgroups");    } else {        printf("Supplementary Group IDs: ");        for (int i = 0; i < ngroups; i++) {            printf("%d ", groups[i]);        }        printf("n");    }
            return 0;}


        了解和正確使用這些 ID 是管理 Linux 系統(tǒng)權(quán)限的重要基礎(chǔ)。實(shí)際用戶 ID 和實(shí)際組 ID 標(biāo)識(shí)了執(zhí)行進(jìn)程的用戶和組,而有效用戶 ID 和有效組 ID 決定了進(jìn)程的權(quán)限。附屬組 ID 則允許進(jìn)程在多個(gè)組中進(jìn)行操作,靈活性更高。


        總結(jié)一下這些ID的特點(diǎn):

        • 實(shí)際用戶 ID (UID) 和 實(shí)際組 ID (GID) 標(biāo)識(shí)了進(jìn)程的擁有者,即誰(shuí)啟動(dòng)了這個(gè)進(jìn)程。它們通常不會(huì)改變。

        • 有效用戶 ID (EUID) 和 有效組 ID (EGID) 用于訪問(wèn)權(quán)限控制,決定了進(jìn)程對(duì)系統(tǒng)資源的訪問(wèn)權(quán)限。這些 ID 可以在程序運(yùn)行過(guò)程中改變(例如,通過(guò) setuid 系統(tǒng)調(diào)用)。

        • 附屬組 ID 列出了用戶所屬的所有其他組,這些組可以給予用戶額外的權(quán)限。


        *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



        關(guān)鍵詞: Linux

        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 江阴市| 福鼎市| 东辽县| 通辽市| 柞水县| 宝应县| 准格尔旗| 马公市| 岳西县| 洛阳市| 平顺县| 大宁县| 龙南县| 黑河市| 呼和浩特市| 弥勒县| 邢台县| 平乡县| 鄯善县| 丽水市| 乐亭县| 会泽县| 平原县| 巨鹿县| 邵东县| 沂源县| 奎屯市| 丰城市| 台江县| 高州市| 唐山市| 长乐市| 海原县| 铁岭市| 杂多县| 肃北| 宁武县| 华安县| 平阴县| 谢通门县| 蓝田县|