Linux 内核:uid 和 gid 与 /etc/passwd

Axe*_*ine 3 linux users linux-kernel

Linux 内核如何处理 UID 和 GID?

当我想向系统添加用户时,内核是否需要该用户的某种类型的“注册”(系统调用?)?内核是否甚至关心 /etc/passwd 中哪些用户可用,或者它是否只知道并处理独立于该文件内容的数值?

jor*_*anm 6

内核不关心/etc/passwd. 并非所有身份验证都是使用/etc/passwd文件完成的。例如,用户信息可以来自 NIS 或 LDAP。


von*_*and 6

对于内核,用户或组只是附加到进程的一个数字(UID 和 GID),用于查看是否允许进程读取(真正打开(2))文件(文件带有 UID /GID 和权限位用于此目的),以及其他操作(例如,进程可以操作属于同一 UID 的进程)。有系统调用可以更改调用进程的 UID/GID(setuid(2)/setgid(2) 和朋友)。显然,谁可以使用它们有严格的限制。

系统可以使用这些数字从 /etc/passwd、/etc/group 或大量其他机制(LDAP、NIS 等)中查找名称,但这仅限于人类使用。

当您登录并提供您的用户名时,一个程序(以 root 身份运行,因此可以做很多普通用户不允许的事情)获取用户名并查找 UID(查看该用户是否存在于第一个地方),要求输入密码(或其他一些身份验证)并检查它。如果一切顺利,程序将更改为该 UID/GID 并 exec(2)s 用户的外壳程序(这又只是一个普通程序,确切地启动哪个程序是用户帐户描述的一部分) .

  • 你忘了提到补充组 ID 的列表,它们也是(如 uid 和 gid)进程的属性,由用户空间应用程序(`login`、`su`、`sudo`、用户和组数据库使用 `setgroups` 系统调用,也用于确定访问权限。 (2认同)