第6章系统数据文件和信息

6.1 引言

有很多操作需要使用一些与系统有关的数据文件,口令文件 /etc/passwd 和组文件 /etc/group 就是经常由多种程序使用的两个文件。用户每次登录入 UNIX 系统,以及每次执行 ls -l 命令时都要使用口令文件。由于历史原因,这些数据文件都是 ASCII 文件,并且使用标准 I/O 库读这些文件。但是,对于较大的系统,顺序扫描口令文件变得很花费时间,我们想以非 ASCII 文本格式存放这些文件,但仍向应用程序提供一个可以处理任何一种文件格式的界面。对于这些数据文件的可移植界面是本章的主题。本章也包括了系统标识函数、时间和日期函数。

6.2 口令文件

UNIX 口令文件 (POSIX.1 则将其称为用户数据库) 包含了表 6-1 中所示的各字段,这些字段包含在 中定义的 passwd 结构中。注意,POSIX.1 只指定 passwd 结构中 7 个字段中的 5 个。另外 2 个元素由 SVR4 和 4.3+BSD 支持。

表6-1 /etc/passwd 文件中的字段说明

| 字段 | struct passwd 成员 | POSIX.1 |

| --- | --- | --- |

| 用户名 | char *pw_name | ✓ |

| 加密口令 | char *pw_passwd | |

| 数值用户 ID | uid_t pw_uid | ✓ |

| 数值组 ID | gid_t pw_gid | ✓ |

| 注释字段 | char *pw_gecos | |

| 初始工作目录 | char *pw_dir | ✓ |

| 初始 shell (用户程序) | char *pw_shell | ✓ |

由于历史原因,口令文件是 /etc/passwd,而且是一个文件。每一行包含表 6-1 中所示的 7 个字段,字段之间用冒号相分隔。该文件中可能有下列三行:


root:jheVopR58x9Fx:0:1:The superuser:/:/bin/sh

nobody:*:65534::/:

stevens:3hKVD8R58r9Fx:224:20:Richard Stevens:/home/stevens:/bin/ksh

关于这些登录项请注意下列各点:

  • 通常有一个登录项,其用户名为 root,其用户 ID 是 0 (超级用户)。

  • 加密口令字段包含了经单向密码算法处理过的用户口令副本。因为此算法是单向的,所以无法直接解密得到原始口令。但你知道吗?我们可以使用一些方法来破解这些加密口令,详情请参考 Unix系统口令破解实验

  • 还有其他有趣的应用,例如如何在 Oracle 系统中使用口令文件,详情请见 Oracle口令文件

如果你觉得这些信息有点复杂,别担心!你可以通过了解更多口令加密和破解工具来更好地理解它们,比如 saminside加密解密口令破解 或者 EXE文件口令加密器