首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Linux用户ID和组ID

Linux用户ID和组ID

作者头像
不脱发的程序猿
发布于 2026-10-05 13:01:52
发布于 2026-10-05 13:01:52
700
举报

在 Linux 系统中,用户和组 ID 用于识别进程和文件的访问权限。每个进程都有与之关联的实际用户 ID、实际组 ID、有效用户 ID、有效组 ID 以及附属组 ID。

原文技术插图
原文技术插图

实际用户 ID (Real User ID, UID)

  • 定义:实际用户 ID 是启动进程的用户的 ID。
  • 作用:标识执行该进程的用户。
  • 获取:使用 getuid() 函数可以获取实际用户 ID。

实际组 ID (Real Group ID, GID)

  • 定义:实际组 ID 是启动进程的用户组的 ID。
  • 作用:标识执行该进程的用户组。
  • 获取:使用 getgid() 函数可以获取实际组 ID。

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

  • 定义:有效用户 ID 用于控制进程对文件系统资源的访问权限。
  • 作用:决定进程的访问权限。例如,具有 root 权限的进程可以通过将 EUID 设置为 0 来获得特权操作的权限。
  • 获取:使用 geteuid() 函数可以获取有效用户 ID。

有效组 ID (Effective Group ID, EGID)

  • 定义:有效组 ID 用于控制进程对文件系统资源的访问权限。
  • 作用:与有效用户 ID 类似,决定进程在组级别上的访问权限。
  • 获取:使用 getegid() 函数可以获取有效组 ID。

附属组 ID (Supplementary Group IDs)

  • 定义:附属组 ID 是用户所属的其他组的 ID 列表,除了实际组 ID 和有效组 ID 之外。
  • 作用:允许进程获得多个组的权限,从而可以访问更多的资源。
  • 获取:使用 getgroups() 函数可以获取附属组 ID 列表。

以下代码演示如何获取并打印这些 ID:

代码语言:cpp
复制
#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: %d\n", uid);
    printf("Real Group ID: %d\n", gid);
    printf("Effective User ID: %d\n", euid);
    printf("Effective Group ID: %d\n", 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 系统权限的重要基础。实际用户 ID 和实际组 ID 标识了执行进程的用户和组,而有效用户 ID 和有效组 ID 决定了进程的权限。附属组 ID 则允许进程在多个组中进行操作,灵活性更高。总结一下这些ID的特点:

  • 实际用户 ID (UID) 和 实际组 ID (GID) 标识了进程的拥有者,即谁启动了这个进程。它们通常不会改变。
  • 有效用户 ID (EUID) 和 有效组 ID (EGID) 用于访问权限控制,决定了进程对系统资源的访问权限。这些 ID 可以在程序运行过程中改变(例如,通过 setuid 系统调用)。
  • 附属组 ID 列出了用户所属的所有其他组,这些组可以给予用户额外的权限。

作者:不脱发的程序猿。原文:https://handsome-man.blog.csdn.net/article/details/140279797 。原文日期:2024-08-13。转载遵循 CC BY-SA 4.0,保留署名与来源。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档