日期:2014-05-16 浏览次数:20685 次
?=========================
实验平台:Fedora 11
?=========================
?
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文件中每一行代码,也可以对字符串进行解析操作。