Unix环境高级编程-系统数据文件和信息

来源:互联网 发布:淘宝外卖红包免费领取 编辑:程序博客网 时间:2024/05/17 01:35

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 matchendpwent();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 //可以返回系统的版本信息和内核信息等




0 0