Unix环境高级编程-系统数据文件和信息
unix口令文件/etc/passwd 包含了下表所示的字段:
系统定义了两个获取口令文件项的函数,在给出用户登录名或数值用户ID后,这两个函数能够查看相关项。
struct passwd *getpwuid(uid_t uid);
struct passwd *getpwnam (const char *name);
getpwuid函数由ls程序使用,将i节点中的数字用户ID映射为用户登陆名,在键入登录名时,getpwnam函数由login程序使用。
如果要查看的只是登录名或用户ID,这两个函数就能满足要求,但是有些程序要查看整个口令文件,下面三个函数可满足此要求:
调用getpwent,它返回口令文件的下一个记录项,也就是返回一个由他填好的passwd结构的指针。
函数setpwent反绕它所使用的文件,endpwent关闭这些文件,在使用getpwent查看完口令文件后,一定要调用endpwent关闭这些文件。
下列程序给出了getpwnam函数的一个实现
#include <pwd.h>
#include <stddef.h>
#include <string.h>
struct passwd *getpwnam(const char *name)
{
struct passwd *ptr;
setpwent();
while((ptr = getpwent())!= NULL)
if(strcmp(name, ptr->pw_name)==0)
break; //found a match
endpwent();
return(ptr); //ptr is NULL if no match founc
}
在函数开始出调用setpwent是自我保护措施,以确保如果调用者在此之前已经调用getpwent打开了有关文件情况下,反绕有关文件使它们定位到文件开始处。阴影口令:
加密口口令是经过单向加密算法处理过的用户口令副本,因为此算法是单向的,所以不能从加密口令猜测到原来的口令。但可以对口令进行猜测,将猜测的口令经算法变成加密形式,然后将其与原加密口令对比。
为防止这样,系统将加密口令放在另一个称为阴影口令的文件中(shadow password),该文件至少包含用户名和加密口令。
其他数据文件:
上面讨论了两个系统数据文件-口令文件和组文件,在日常中,Unix还使用其他文件,一般情况下,对于每个数据文件至少有3个函数:
1.get函数:读下一个记录,该函数一般返回指向一个结构的指针,当达到文件尾端时返回空指针
2.set函数,打开相应数据文件,然后反绕该文件,如果希望在文件起始开始处理,则调用此函数
3.end函数:关闭相应数据文件
下表示访问系统数据文件的一些例程
登陆账户记录:
大多数unix系统都提供两个数据文件,utmp文件记录当前登陆到系统的各个用户,wtmp文件跟踪各个登陆和注销事件,每次写入这两个文件中的是包含下列结构的一个二进制记录:
登陆时,login填写此类结构,然后将其写入到utmp文件中,同时页将其填写到wtmp文件中,注销时init进程将utmp文件相应记录删除。将一个新纪录填写到wtmp文件中。
系统标识:
命令 uname -a //可以返回系统的版本信息和内核信息等
posted on 2016-07-27 22:47 sichenzhao 阅读(157) 评论(0) 编辑 收藏 举报