📜  Linux 中真实、有效和保存的用户 ID

📅  最后修改于: 2022-05-13 01:57:05.480000             🧑  作者: Mango

Linux 中真实、有效和保存的用户 ID

类 Unix 操作系统中的每个用户都由一个不同的整数标识,这个唯一的数字称为 UserID。

一个进程定义了三种UID,可以根据任务的权限动态改变。

定义的三种不同类型的 UID 是:
1.真实用户ID
2.有效用户ID
3.保存的用户ID

1. Real UserID :对于一个进程,Real UserId 就是启动它的用户的UserID。它定义了该进程可以访问哪些文件。

2. Effective UserID :通常与 Real UserID 相同,但有时会更改为使非特权用户能够访问只有 root 等特权用户才能访问的文件。

如果您看到 /usr/bin/passwd 文件的权限:

-rwsr-xr-x 1 root root 59640 Mar 23  2019 /usr/bin/passwd 

因此,如果非root 用户运行此文件,则该进程的EUID 将为“0”,即root 和UID 保持与原始用户相同。

3. Saved UserID :当一个以提升权限运行的进程(一般是root)需要做一些低权限工作时使用,这可以通过临时切换到非特权帐户来实现。

在执行低权限工作时,将有效的 UID 更改为某个较低的权限值,并将 euid 保存到保存的 userID(suid) 中,以便在任务完成时切换回特权帐户。

您只需在终端上键入id即可打印 UID:

# id

输出:

uid=1000(mandeep) gid=1000(mandeep) 
groups=1000(mandeep), 4(adm), 24(cdrom), 
27(sudo), 30(dip), 46(plugdev), 113(lpadmin), 
128(sambashare)

id命令可用于打印真实有效的用户和组 ID

id的不同选项:

-g, --group : print only effective group id
-G, --groups : print all group IDs
-r, --real : print only real user id
-u, --user : print only effective user id

例如 :

id -g

输出 :

1000

注意:当你使用带有 -r 选项的 id 命令时,你会得到类似的错误

id: cannot print only names or real IDs in default format

要解决此问题,请将 -r 选项与其他选项结合使用,例如id -rg
现在,为了设置真实用户 ID、有效用户 ID 和调用进程保存的 set-user-ID,我们使用setresuid()setresgid()
句法 :

int setresuid(uid_t ruid, uid_t euid, uid_t suid); # for specific user
int setresgid(gid_t rgid, gid_t egid, gid_t sgid); # for specific group

返回值:
成功时,返回 0。
出错时,返回 -1。

更多详细信息:使用 Linux 手册页(man 用户 ID)。