【UNIX/Linux】系统数据文件和信息
目录
口令文件
UNIX系统口令是/etc/passwd,文件包含了各种字段,如用户名、加密口令、数值用户ID、数值组ID
本文是笔者拜读《UNIX环境高级编程》第6章(系统数据文件和信息)的学习笔记。 目录 口令文件 UNIX系统口令是/etc/passwd,文件包含了各种字段,如用户名、加密口令、数值用户ID、数值组ID、注释字段、初始工作目录、初始shell(用户程序)等。这些字段包含在 中定义的passwd结构中。 为了安全性考虑,加密口令字段只包含了一个占位符,真正的加密口令存放在另一个文件中。 空白的注释字段不产生任何影响。 POSIX定义了两个获取口令文件项的函数。在给出用户登录名或数值用户ID后,这两个函数就能查看相关项。 这两个函数都返回一个指向passwd结构的指针,该结构已由这两个函数在执行时填入信息,passwd结构通常是函数内部的静态变量,只要调用任一相关函数,其内容就会被重写。 getpwuid函数由ls程序使用,它将i节点中的数字用户ID映射为用户登录名。在键入登录名时,getpwnam函数由login程序使用。 getpwent函数可以查看整个口令文件。该函数返回口令文件中下一个记录项的指针,如果出错或达到文件末尾,返回NULL。 在使用getpwent查看完口令文件前,一定要调用setpwent定位到文件的开始处。在使用getpwent查看完口令文件后,一定要调用endpwent关闭这些文件。 阴影口令 某些系统将加密口令存放在称为阴影口令的文件中,该文件至少要包含用户名和加密口令。阴影口令文件不应是一般用户可以读取的。与访问口令文件类似,也有一组函数用于访问阴影口令文件。 组文件 UNIX组文件包含组名、加密口令、数值组ID、指针数组等,这些字段包含在中所定义的group结构中。 其中的指针数组中,每个元素指向一个属于该组的用户名,该数组以NULL指针结尾。 下面两个函数用来查看组名或数值组ID。 和对口令文件进行操作的函数一样,这两个函数通常也返回指向一个静态变量的指针,每次调用时都重写该静态变量。 如果要搜索整个组文件,需要用到以下几个函数。它们类似于针对口令文件的函数。 附属组ID 一个用户不仅属于一个组,也属于多至16个另外的组。文件的访问权限检查被修改为:不仅将进程的有效组ID与文件的组ID相比较,也将所有附属组ID与文件组ID进行比较。 为了获取和设置附属组ID,提供了下面的函数。 实现区别 FreeBSD 8.0、Linux 3.2.0、Mac OS X 10.6.8和Solaris 10以不同的方式存储用户和组信息。 信息FreeBSD 8.0Linux 3.2.0Mac OS X 10.6.8Solaris 10 账户信息 /etc/passwd /etc/passwd 目录服务 /etc/passwd 加密口令 /etc/master.passwd /etc/shadow 目录服务 /etc/shadow 是否是散列口令文件 是 否 否 否 组信息 /etc/group /etc/group 目录服务 /etc/group 其它数据文件 除了口令文件和组文件,UNIX系统还使用很多其它文件。例如,记录各网络服务器所提供服务的数据文件,记录协议信息的数据文件,记录网络信息的数据文件。这些数据文件的接口都与口令文件和组文件相似。 (1) get函数。读下一个记录,如果需要,还会打开文件。大多数get函数返回指向一个静态存储类结构的指针。 (2) set函数。打开相应数据文件(如果未打开),将当前位置移动到文件开头。 (3) end函数。关闭数据文件。 还可以指定用户名或用户数值ID寻找相应的记录。 登录账号记录 大多数UNIX系统都提供了下列两个数据文件: (1) utmp文件记录当前登录到系统的各个用户。who程序读取该文件并打印。 (2) wtmp文件跟踪各个登录和注销事件。last程序读取该文件并打印。 每次写入这两个文件中的是包含下列结构的一个二进制记录: 系统标识 uname函数,返回与主机和操作系统有关的信息。 utsname结构信息: gethostname函数返回主机名,改名字通常就是TCP/IP网络上主机的名字。 时间和日期例程 由UNIX内核提供的基本时间服务是计算自公元1970年1月1日00:00:00以来经过的秒数,这种秒数是以数据类型time_t表示的。 time函数返回当前时间和日期。 时间值作为参数返回,如果参数非空,时间值也可通过参数返回。 clock_gettime函数可用于获取指定时钟的时间。timespec结构把时间表示为秒和纳秒。 当clk_id设置为CLOCK_REALTIME时unix系统文件,clock_gettime与time类似,而且时间的精度更高。 clock_getres函数把参数res指向的timespec结构初始化为与clk_id参数对应的时钟精度。 要对特定的时钟设置时间,可以调用clock_settime函数。 gettimeofday提供了可达微妙的精度。 函数localtime和gmtime将日历时间转换成分解的时间,并将这些存放在tm结构中。 mktime以本地时间的年、月、日等作为参数,将其变换成time_t值。 各个时间函数之间的关系。 (编辑:海南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |