第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文件口令加密器。
暂无评论