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。
最新文章
- 【CSS】过渡、动画和变换
- could not insert new action connection could not find any information for the class named
- 九度oj 1528 最长回文子串
- 京东sdk商家上架接口调用问题总结(更新中...)
- 【贪心】【模拟】HDU 5491 The Next (2015 ACM/ICPC Asia Regional Hefei Online)
- [UWP]了解模板化控件(3):实现HeaderedContentControl
- dva框架使用mock.js模拟数据 + fetch请求数据
- virtualbox+ubuntu
- jmeter4.x centos7部署笔记
- _recruit
- vue2.0 父子组件通信 兄弟组件通信
- [转]阿里巴巴十年Java架构师分享,会了这个知识点的人都去BAT了
- OPTIMIZE TABLE linked list 表优化原理 链表数据结构 空间再利用
- NBUT 1219 Time 2010辽宁省赛
- opencv-python教程学习系列7-opencv图像基本操作
- Django路由系统---django重点之url命名分组
- C#MD5笔记
- java 面向对象编程(OOP)
- WKWebview的基本使用
- mvn库