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. Centos编译Unix网络编程(第三版)卷1的源代码

    测试环境:Centos 1)在shell中输入./configure然后按回车(注意先让configure有执行权限 chomd 777 configure) 2)依次进入lib.libfree.li ...

  2. 2.1 Linux中wait、system 分析

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

  3. css样式 float的理解

    float w3cSchool里解释说, 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止.由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样 ...

  4. LG1397 [NOI2013]矩阵游戏

    题意 婷婷是个喜欢矩阵的小朋友,有一天她想用电脑生成一个巨大的n行m列的矩阵(你不用担心她如何存储).她生成的这个矩阵满足一个神奇的性质:若用F[i][j]来表示矩阵中第i行第j列的元素,则F[i][ ...

  5. ory Oathkeeper Ecosystem

    ory Oathkeeper 生态包含的组件 ORY Hydra is an OAuth 2.0 and OpenID Connect provider. ORY Oathkeeper is an I ...

  6. benthos stream 处理工具说明

    benthos 是golang 编写的流处理工具,同时也可以作为一个类库使用,当前支持的source sink 还是比较全的 (kafka rabbitmq http service s3 redis ...

  7. baidu手机浏览器安卓4.5版公布:由于快,所以爱

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDUyMzk4OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  8. 记录 ThinkPHP 5.* 漏洞修复后的情况

    记录 ThinkPHP 5.* 漏洞修复后的情况 ThinkPHP 官方 2018-12-09 下午收到漏洞报告. 2018-12-09 晚上看到 Git 已经更新了,修复了漏洞. 2018-12-1 ...

  9. 基于 FastAdmin 开发后台流程 (持续更新)

    使用 git init 初始化 增加一个自己的git 原始仓库,用于存放自己的代码. 增加一个 fastadmin 的仓库,为了方便以后与官方同步. 自己修改的代码 git Push 到自己的仓库 将 ...

  10. socket、WebSocket

    WebSocket 协议本质上是一个基于TCP的协议,它由通信协议和编程API组成,WebSocket能够在浏览器和服务器之间建立双向连接,以基于事件的方式,赋予浏览器实时通信能力. socket本质 ...