chapter8 用户和组

8.1 密码文件 /etc/passwd
每行都包含7个字段,之间用冒号分割,如下所示:
mtk:x:1000:100:Michael:/home/mtk:/bin/base
按顺序介绍着7个字段:
登录名:
经过加密的密码:长度为13个字符
用户ID:
组ID:
注释:该字段存放关于用户的描述性文字。
主目录:用户登录后所处的初始路径
登录shell:一旦用于登录,便交由该程序控制

8.2 shadow密码文件: /etc/shadow

8.3 组文件:/etc/group
对用户所属组信息的定义有两部分组成:
1:密码文件中相应用户记录的组ID字段。
2:组文件列出的用户所属各组。
系统中的/etc/group中的每一条记录都对应一个组,包含4个字段
users:x:100:
jambit:x:106:clsus,felli

分别是:
1:组名
2:经过加密处理过的密码
3:组ID
4:用户列表

8.4 获取用户和组的信息
本解所要介绍的库函数,其功能包括从密码文件,shadow密码文件和组文件总获取单条记录。
从密码文件获取记录:
函数getpwname()和getpwuid()的作用是从密码文件中获取记录
#include <pwd.h>
struct passwd *getpwnam(const char *name);
struct passed *getpwuid(uid_t uid);

从组文件中获取记录:
函数getgrname()和getgrgid()的作用是从组文件中获取记录:
#include <grp.h>
struct group *getgrname(cosnt char *name);
struct group *getgrgip(gid_t gid);

扫描密码文件和组文件中的所有记录:
函数setpwent(),getpwent()和endpwent()的作用是按顺序扫描密码文件中的记录。
#include <pwd.h>
struct passed *getepwent(void);
void setpwent(void);
voud endpwent(void)
eg:
struct passwd *pwd;
while( (pwd = getpwent()) != NULL)
printf("%-8s %5ld\n", pwd->pw_name, (long)pwd->pw_uid);
endpwent();

函数gergrent(),setgrent,endgrent()针对组文件执行类似的任务。

从shadow密码文件中个获取记录
#include <shadow.h>
struct spwd *getspnam(const char *name);
struct spwd *getspent(void);
void setspent(void);
void endspent(void);

8.5 密码加密和用于认证
某些应用程序会要求用户对自身进行认证,通常采用用户名(登录名)/密码的认证方式。
由于安全方面的原因,UNIX系统采用单向加密算法对密码进行加密,这意味着由密码的加密形式将无法还原出原始密码。因此,验证候选密码的唯一方式是使用同一算法对其进行加密,并将解密结果与存储于/etc/shadow中的密码进行匹配。
加密算法封装于crypt()函数中。
#define _XOPEN_SOURCE
#include <unistd.h>
char *crypt(const char *key, const char *salt);

【Linux_Unix系统编程】Chapter8 用户和组的更多相关文章

  1. 【Linux_Unix系统编程】Chapter9 进程凭证

    chapter9 进程凭证 每个进程都有一套用数字表示的用户ID(UID)和组ID(GID).有时也将这些ID称子为进程凭证. 1:实际用户ID和实际组ID 2:有效用户ID和有效组ID 3:保存的s ...

  2. 【Linux_Unix系统编程】Chapter10 时间

    chapter10 时间 1:真实时间:度量这一时间的起点有二:(1)某个标准点:(2)进程生命周期内的某个固定时点(通常为程序启动) 2:进程时间:一个进程所使用的CPU时间总量,适用于对程序,算法 ...

  3. 【Linux_Unix系统编程】chapter6 进程

    chapter6 进程 重点关注进程虚拟内存的布局及内容.6.1 进程和程序 进程(process)是一个可执行程序(program)的实例. 程序是包含了一系列信息的文件,这些信息描述了如何在运行时 ...

  4. 【Linux_Unix系统编程】Chapter4 文件IO

    Chapter4 文件IO 4.1 概述 文件描述符 == Windows的句柄 标准文件描述符: 0 标准输入 STDIN_FILENO stdin 1 标准输出 STDOUT_FILENO std ...

  5. 【Linux_Unix系统编程】chapter7 内存分配

    Chapter7 内存分配本章将用于在堆或者栈上分配内存的函数.7.1 在堆上分配内存 通常将堆的当前的内存边界称为"program break" 7.1.1 调整program ...

  6. 【Linux_Unix系统编程】chapter5 深入探究文件IO

    Chapter5 深入探究文件I/O 本章节将介绍另一个与文件操作相关的系统调用:多用途的fcntl(),并展示其应用之一读取和设置打开文件的状态标志. 5.1 原子操作和竞争条件 所有系统调用都是以 ...

  7. 一、Vim编辑器 二、用户和组管理 三、软件的安装(jdk,mysql) 四、Shell编程

    一.Vim编辑器的使用 1. vim编辑器的运行模式 编辑模式:等待用户编辑命令的输入 插入模式:编辑文本内容 命令模式:执行命令 2. 使用 :vim 文件名 3. 查看当前vim编辑器介绍:vim ...

  8. Unix/Linux环境C编程入门教程(33) 命令和鼠标管理用户和组

    Linux是一个多用户.多任务的实时操作系统,允许多人同时访问计算机, 并同时运行多个任务.UNIX系统具有稳定.高效.安全.方便.功能强大等诸多优点,自20世纪70年代开始便运行在许多大型和小型计算 ...

  9. Linux系统下用户与组的管理

    Linux系统下用户与组的管理 一.用户及组基本概述 Linux 系统上,用户管理是基于用户名和密码的方式进行资源的分配. 1.uid(用户身份标识) (1)root用户 uid为0 (2)普通用户: ...

随机推荐

  1. nw 调用系统命令

    ---------------------------------------------------------------------------------------------------- ...

  2. HDU 3998

    http://acm.hdu.edu.cn/showproblem.php?pid=3998 求LIS的长度,并且求有多少组互不相交的LIS 求组数用最大流 建图如下: if(dp[i]==1)add ...

  3. 2.1 Linux中wait、system 分析

    wait与waitpid: 当子进程退出的时候,内核会向父进程发送SIGCHID信号,子进程的退出是一个异步事件(子进程可以在父进程运行的任何时刻终止). 子进程退出时,内核将子进程置为僵尸状态,这个 ...

  4. C#反射 字符串转为实体类,并做为参数传入泛型方法中使用

    工作中有这样一个需求,有N张不同的报表,每张报表对应一个数据源,统计数据采用内存方式,首先在内在里定义了数据源对应实体.统计条件用lamdba表达式式实现,通过工具对单元格进行定义.在实现过程中针对每 ...

  5. BZOJ4916: 神犇和蒟蒻【杜教筛】

    Description 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; Input 请你读入一个整数N;1<=N<=1E9,A.B模1E9+7; Output 请你 ...

  6. css3动画与js动画的区别

    css与 js动画 优缺点比较   我们经常面临一个抉择:到底使用JavaScript还是CSS动画,下面做一下对比 JS动画 缺点:(1)JavaScript在浏览器的主线程中运行,而主线程中还有其 ...

  7. each遍历 的原理

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  8. CTF之MD5

    MD5是一种常见的加密方式,但准确来说,它只是一种编码方式,它将任意有限长度的字符串通过哈希函数转换为特定长度的字符串. MD5编码具有单向性,即由明文变密文简单,由密文变明文困难. 破解时只能通过暴 ...

  9. Properties类与配置文件

    //加载文件public static void testLoadProperties() throws Exception { Properties properties = new Propert ...

  10. linux下 mysql主从备份

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/czh0423/article/details/26720539 一.准备 用两台server做測试: ...