针对系统的每个用户账号,系统密码文件/etc/passwd 会专列一行进行描述。每行都包含 7
个字段,之间用冒号分隔,如下所示:
mtk:x
oceanstar:x:1000:1000:oceanstar:/home/oceanstar:/bin/bash
接下来,将按顺序介绍这 7 个字段。
- 登录名:登录系统时,用户所必须输入的唯一名称。通常,也将其称为用户名。
- 此外,也可将登录名视为人类可读的(符号)标识符,与数字用户标识符相对应。
- 当使用诸如 ls(1)这样的程序去显示文件的所有权时(比如,执行 ls –l 时),会显示出登录名,而非与文件关联的数值型用户 ID。
- 经过加密的密码:该字段包含的是经过加密处理的密码,长度为 13 个字符
- 如果密码字段中包含了任何其他字符串,特别是,当字符串长度超过 13 个字符时,将禁止此账户登录,原因是此类字符串不能代表一个经过加密的有效密码。
- 不过,请注意,要是启用了 shadow 密码(这是常规做法),系统将会不解析该字段。这时,/etc/passwd 中的密码字段通常会包含字母“x”(当然,也可以是任何非空字串),而经过加密处理的密码实际上却存储到 shadow 密码文件中。
- 若/etc/passwd 中密码字段为空,则该账户登录时无需密码(即便启用了 shadow 密码,也是如此)
- 用户 ID(UID):
- 用户的数值型 ID。如果该字段的值为 0,那么相应账户即具有特权级权限。这种账号一般只有一个,其登录名为 root。
- 在 Linux 2.2 或更早的版本中,用户 ID 为 16 位值,其范围为 0~65535。而 Linux 2.4 及其以后的版本则以 32 位值来存储用户 ID,因此能够支持更多的用户数
在密码文件中,允许(但不常见)同一用户 ID 拥有多条记录,从而使得同一用户 ID拥有多个登录名。如此一来,多个用户便能以不同密码(登录)去访问相同资源(比如,文件等)。此外,不同的登录名还可以关联一系列不同的组 ID
- 组 ID(GID):用户属组中首选属组的数值型 ID。关于用户与属组之间从属关系的进
一步信息,会在系统组文件中加以定义。 - 注释:该字段存放关于用户的描述性文字。诸如 finger(1)之类的各种程序会显示此
信息 - 主目录:用户登录后所处的初始路径。会以该字段内容来设置 HOME 环境变量
- 登录 shell:一旦用户登录,便交由该程序控制。
- 通常,该程序为 shell 的一种(比如,bash),但也可以是其他任何程序。
- 如果该字段为空,那么登录 shell 默认为/bin/sh(Bourne shell)。
- 会以该字段值来设置 SHELL 环境变量。
在单机系统中,所有密码信息都存储在/etc/passwd 文件中。然而,如果使用了 NIS(网络信息系统)或 LDAP(轻型目录访问协议)在网络环境中分发密码,那么部分密码信息可能会由远端系统保存。只要访问密码信息的程序采用的是getpwnam()、getpwuid()等,那么无论是使用 NIS 还是 LDAP,对应用程序来说都是透明的。