unix环境高级编程第六章笔记

口令文件
阴影口令
组文件
附属组ID
登录账户记录
系统标识

口令文件<\h2>

/etc/passwd文件是UNIX安全的关键文件之一。该文件用于用户登录时校验用户的口令,文件中每行的一般格式为:

用户名: x :用户ID:用户组ID:说明信息:个人主目录:SHELL

对于第二项x来说是密码,但由于安全原因密码已经被移至其他文件,因此使用x来代替。

UNIX系统提供了两个用于获取passwd文件中条目的函数,在给出用户ID或者用户名之后,这两个函数即可查看相关信息。其头文件及函数原型如下:

  #include <pwd.h>

  struct passwd* getpwuid(uid_t __uid);
  struct passwd* getpwnam(const char *__name);

函数成功是返回相应指针,出错返回NULL。第一个函数使用用户UID,第二个函数使用用户名。返回的指针指向一个静态变量,因此只要再调用任一相关的函数就会改写指针所指向的变量内容。

上面两个函数一次只能查看一个,而且必须提供用户名或者用户UID,如果想要查看所有账户信息或者事先不了解用户名及用户UID,则可以通过下面几个函数来查看。其头文件及函数原型如下:

  #include <pwd.h>

  struct passwd *getpwent(void);
  void setpwent(void);
  void endpwent(void);

getpwent( )函数用于读取passwd文件(读取一项),setpwent( )用于设置从passwd文件头部开始读,endpwent( )用于关闭文件。

阴影口令<\h2>

阴影口令文件/etc/shadow用于存储加密后的密码,该密码加密方式是单向不可逆。shadow文件普通用户不允许读取,访问shadow文件的一组函数与访问passwd文件函数类似。其头文件及函数原型如下:

  #include <shadow.h>

  struct spwd *getspnam(const char *__name);

  struct spwd *getspent(void);
  void setspent(void);
  void endspent(void);

函数成功是返回相应指针,出错返回NULL。

组文件<\h2>

组文件/etc/group包含了系统用户组相关的信息,UNIX系统提供了两个函数来查看。其头文件及函数原型如下:

  #include <grp.h>

  struct group *getgrgid (gid_t __gid);
  struct group *getgrnam (const char *__name);

函数成功是返回相应指针,出错返回NULL。

如果需要搜索整个组文件,则类似passwd文件函数。其头文件及函数原型如下:

  #include <grp.h>

  struct group *getgrent(void);
  void setgrent(void);
  void endgrent(void);

附属组ID<\h2>

现有的UNIX都支持一个用户加入多个组,对于除了创建用户时产生的自带用户组之外,用户额外加入的其他组则为附属组。为了获取和设置附加组ID,UNIX提供了3个函数。其头文件及函数原型如下:

include <unistd.h>

include <grp.h>

int getgroups (int __size, gid_t __list[]);
int setgroups (size_t __n, const gid_t *__groups);
int initgroups (const char *__user, gid_t __group);

登录账户记录<\h2>

UNIX系统还提供了一些事件簿记功能,该功能可以查看当前登录到系统的各个用户,还能跟踪登录注销等事件。UNIX中利用一个二进制结构来填写记录。登录时,login程序将信息写入到utmp文件和wtmp文件中。注销时,init进程将utmp文件中的记录移除,并添加一个新记录到wtmp文件中。

系统标识<\h2>

UNIX系统提供了一个函数用于返回与主机和操作系统有关的信息。其头文件及函数原型如下:

  #include <sys/utsname.h>

  int uname(struct utsname *__name);

函数成功时返回非负值,失败返回-1。

posted @ 2021-01-24 12:01  陌天森  阅读(30)  评论(0)    收藏  举报