【Linux_Unix系统编程】Chapter8 用户和组
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 用户和组的更多相关文章
- 【Linux_Unix系统编程】Chapter9 进程凭证
chapter9 进程凭证 每个进程都有一套用数字表示的用户ID(UID)和组ID(GID).有时也将这些ID称子为进程凭证. 1:实际用户ID和实际组ID 2:有效用户ID和有效组ID 3:保存的s ...
- 【Linux_Unix系统编程】Chapter10 时间
chapter10 时间 1:真实时间:度量这一时间的起点有二:(1)某个标准点:(2)进程生命周期内的某个固定时点(通常为程序启动) 2:进程时间:一个进程所使用的CPU时间总量,适用于对程序,算法 ...
- 【Linux_Unix系统编程】chapter6 进程
chapter6 进程 重点关注进程虚拟内存的布局及内容.6.1 进程和程序 进程(process)是一个可执行程序(program)的实例. 程序是包含了一系列信息的文件,这些信息描述了如何在运行时 ...
- 【Linux_Unix系统编程】Chapter4 文件IO
Chapter4 文件IO 4.1 概述 文件描述符 == Windows的句柄 标准文件描述符: 0 标准输入 STDIN_FILENO stdin 1 标准输出 STDOUT_FILENO std ...
- 【Linux_Unix系统编程】chapter7 内存分配
Chapter7 内存分配本章将用于在堆或者栈上分配内存的函数.7.1 在堆上分配内存 通常将堆的当前的内存边界称为"program break" 7.1.1 调整program ...
- 【Linux_Unix系统编程】chapter5 深入探究文件IO
Chapter5 深入探究文件I/O 本章节将介绍另一个与文件操作相关的系统调用:多用途的fcntl(),并展示其应用之一读取和设置打开文件的状态标志. 5.1 原子操作和竞争条件 所有系统调用都是以 ...
- 一、Vim编辑器 二、用户和组管理 三、软件的安装(jdk,mysql) 四、Shell编程
一.Vim编辑器的使用 1. vim编辑器的运行模式 编辑模式:等待用户编辑命令的输入 插入模式:编辑文本内容 命令模式:执行命令 2. 使用 :vim 文件名 3. 查看当前vim编辑器介绍:vim ...
- Unix/Linux环境C编程入门教程(33) 命令和鼠标管理用户和组
Linux是一个多用户.多任务的实时操作系统,允许多人同时访问计算机, 并同时运行多个任务.UNIX系统具有稳定.高效.安全.方便.功能强大等诸多优点,自20世纪70年代开始便运行在许多大型和小型计算 ...
- Linux系统下用户与组的管理
Linux系统下用户与组的管理 一.用户及组基本概述 Linux 系统上,用户管理是基于用户名和密码的方式进行资源的分配. 1.uid(用户身份标识) (1)root用户 uid为0 (2)普通用户: ...
随机推荐
- require('nw.gui') 失效问题
// gui = global.window.nwDispatcher.requireNwGui() --original // gui = window.require('nw.gui') gui ...
- 大数开根号java模板
利用逼近的思路直接二分开方找出值 package lanqiao; import java.math.BigInteger; import java.util.Scanner; public clas ...
- webView的使用以及总结
一.webview是什么? Android WebView 做为承载网页的载体控件,他在网页显示的过程中会产生一些事件,并回调给我们的应用程序,以便我们在网页加载过程中做应用程序想处理的事情.比如说客 ...
- STM32串口配置步骤
串口设置的一般步骤可以总结为如下几个步骤: 1) 串口时钟使能, GPIO 时钟使能2) 串口复位3) GPIO 端口模式设置4) 串口参数初始化5) 开启中断并且初始化 NVIC(如果需要开启中断才 ...
- 2017 ECL-FINAL J.Straight Master
题目链接:http://codeforces.com/gym/101775/problem/J 思路:序列差分一下,然后用得到的查分序列乱搞就可以了 注意差分序列第一项等于a[i],之后n-1项为ch ...
- Arpa’s obvious problem and Mehrdad’s terrible solution 思维
There are some beautiful girls in Arpa’s land as mentioned before. Once Arpa came up with an obvious ...
- shell 命令学习
https://blog.csdn.net/mnmlist/article/details/55215158
- DMABUFF
1.DMABUF框架提供了在多设备间共享缓存的通用方法,支持DMABUF的设备驱动可以将一个DMA缓存以文件句柄的方式输出到用户空间(输出者规则),以文件句柄的方式从用户空间获取一个DMA缓存,这个文 ...
- hasura graphql-engine v1.0.0-alpha25 的几个方便功能
hasura graphql-engine 是一个很不错的graphql 引擎,但是我们的数据模型经常可能会有变动, 但是以前的版本对于这些的处理,官方的方式是删除元数据,重启server,都不是很好 ...
- dup and dup2的剖析
转:http://www.cnblogs.com/sdphome/archive/2011/04/30/2033381.html dup和dup2都可用来复制一个现存的文件描写叙述符,使两个文件描写叙 ...