内容:
morui:x:1000:1000:morui,,,:/home/morui:/bin/bash
x:加密口令
/home/morui:初始工作目录
/bin/bash:初始用户程序
struct passwd{ char * pw_name; //用户名 char * pw_passwd;//加密口令 uid_t pw_uid; //数值用户ID gid_t pw_gid; //数值组ID char* pw_gecos; //注释字段 char* pw_dir; //初始工作目录 char* pw_shell; //初始用户程序 }
存放加密口令(单向加密)的文件
struct spwd{ char* sp_namp; //用户登陆名 char* sp_pwdp; //加密口令 int sp_lstchg; //上次更改口令到现在的时间 int sp_min; //经多少天后允许修改 int sp_max; //要求更改剩余天数 int warn; //超期警告天数 int sp_inact; //用户不活动之前剩余天数 int sp_expire; //用户超期天数 unsigned int sp_flag; //保留 }
struct group{ char* gr_name; //组名 char* gr_passwd; //加密口令 int gr_gid; //组ID char** gr_mem; //指向组成员名 }
struct utmp{ char ut_line[8]; // tty_line char ut_name[8]; //login name long ut_time; //second since Epoch }
文件:
- /var/run/utmp
- /var/log/wtmp
struct utsname{ char sysname[]; char nodename[]; //网络节点上的主机名字 char release[]; char version[]; char machine[]; }
/dev/null
/bin/false
/bin/true
- 口令文件操作
#include <pwd.h>
struct passwd* getpwuid(uid_t uid)
struct passwd* getpwnam(const char * name)
void setpwent(void)
struct passwd * getpwent(void)
void endpwent(void)
struct passwd* p; setpwent(); while((p = getpwent()) != NULL) { *** } endpwent();
- 阴影口令文件操作
#include<shadow.h>
struct spwd* getspnam(const char* name)
struct spwd* getspent(void)
void setspent(void)
void endspent(void)
struct spwd* p; setspent(); while((p = getspent()) != NULL) { *** } endspent();
- 组文件操作
#include<grp.h>
struct group* getgrgid(gid_t gr_gid)
struct group* getgrnam(const char* name)
s
struct group* getgrent(void)
void setgrent(void)
void endgrent(void)
- 附属组ID操作
#include<unistd.h>
int getgroups(int gidsetsize, gid_t grouplist[])
说明:当gidsetsize为0时,返回附属组ID总数,而不修改grouplist[]
#include<grp.h>
int setgroups(int ngroups, gid_t grouplist[])
说明:需要root权限,给当前进程设置附属组
int initgroups(const char* username, gid_t basegid)
说明:basegid 是username在口令文件的组ID
- 主机文件操作
#include<netdb.h>
- 系统标识
#include<sys/utsname.h>
int uname(struct utsname*name)
原文:https://www.cnblogs.com/blog-morui/p/14778065.html