日期:2014-05-16  浏览次数:20685 次

Linux中的口令文件

?=========================

实验平台:Fedora 11

Linux平台信息:
[canlynet@dc include]$ uname -a
Linux dc 2.6.29.4-167.fc11.i686.PAE #1 SMP Wed May 27 17:28:22 EDT 2009 i686 i686 i386 GNU/Linux

?=========================

?

Linux系统运行时需要大量数据文件提供配置等信息。由于历史原因,这些文件都是ASCII文本文件(也就是可以用vim查看)。

Linux系统的口令文件为/etc/passwd,此口令文件包含多行类似下面的信息:

?

[canlynet@dc include]$ vi pwd.h
[canlynet@dc include]$ vim /etc/passwd
[canlynet@dc include]$ head /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

?每行都包括了7个字段,比如第一行:

1、root -- 用户名

2、x???? -- 加密口令(占位字符)

3、0???? -- 数值用户ID

4、0???? -- 数值组ID

5、root -- 注释字段

6、root -- 初始工作目录

7、/bin/bash -- 初始shell(用户程序)

再看/usr/include/pwd.h中定义的passwd结构(与之对应):

/* The passwd structure.  */
struct passwd
{
  char *pw_name;		/* Username.  */
  char *pw_passwd;		/* Password.  */
  __uid_t pw_uid;		/* User ID.  */
  __gid_t pw_gid;		/* Group ID.  */
  char *pw_gecos;		/* Real name.  */
  char *pw_dir;		/* Home directory.  */
  char *pw_shell;		/* Shell program.  */
};

?

?? ?加密口令经过单向加密算法存放在另一个文件中,这个文件不是一般用户可以读取的。

??? shell字段指定一个可执行的程序名,如果不指定,使用默认值,通常是/bin/sh。/sbin/nologin的作用是导致登录失败。

??? 我们知道,shell程序其实也是c语言编写的应用程序,利用I/O函数,我们完全可以读取ASCII文件中每一行代码,也可以对字符串进行解析操作。