chapter9 进程凭证
每个进程都有一套用数字表示的用户ID(UID)和组ID(GID).有时也将这些ID称子为进程凭证。
1:实际用户ID和实际组ID
2:有效用户ID和有效组ID
3:保存的set-user-ID 和保存的set-group-ID
4:文件系统用户ID和文件系统组ID
5:辅助组ID
9.1 实际用户ID和实际组ID
实际用户ID和实际组ID确定了进程所属的用户和组。作为登录过程的步骤之一,登录shell从/etc/passed文件中读取相应用户密码记录的第三字段和第四字段,置为其实际用户ID和实际组ID。创建新进程,将从其父进程中继承这些ID。

9.2 有效用户ID和有效组ID
有效用户ID为0(root的用户ID)的进程拥有超级用户的所有权限。这样的进程有称为特权级进程。二某些系统调用只能由特权级进程执行。

9.3 Set-User-ID 和Set-Group-ID 程序
set-user-ID程序会将进程的有效用户ID设置为可执行文件的用户ID,从而获得常规情况下并不具有的权限。set-group-ID程序对进程有效组ID实现类似任务。
与其他文件一样,可执行文件的用户ID和组ID决定了改文件的所有权。另外,可执行文件还拥有两个特别的权限位set-user-ID位和set-group-ID位。‘
eg:
$su
Password:
#ls -l prog
-rwxr-xr-x 1 root root 302585 Jun 26 15:05 prog
#chmod u+s prog
#chmod g+s prog

#ls -l prog
-rwsr-xr-x 1 root root 302585 Jun 26 15:05 prog

9.4 保存set-user-ID 和保存set-group-ID

9.5 文件系统用户ID和组ID
在Linux系统中,要进行诸如打开文件,改变文件属主,修改文件权限之类的文件系统操作时,决定其操作权限的是文件系统用户ID和组ID(结合辅助组ID),而非有效用户ID和组ID。

9.6 辅助组ID
辅助组ID用于标识进程所属的若干附加的组。

9.7 获取和修改进程凭证
可以利用Linux系统特有的proc/PID/status文件,通过对其中Uid, Gid和Groups各行信息的检查,来获取任何进程的凭证。
1:CAP_SETUID 能力允许进程任意修改其用户ID
2:CAP_SETGID 能力允许进程任意修改其组ID

9.7.1 获取和修改实际,有效和保存设置标识
获取实际和有效ID
系统调用getuid()和getgid()分别返回调用进程的实际用户ID和组ID。而系统调用geteuid()和getegid()则对进程的有效ID实现类似功能。
#include <unistd.h>
uid_t getuid(void);
uid_t geteuid(void);
gid_t getgid(void);
git_t getegid(void);
修改有效ID:
#include <unistd.h>
int setuid(uid_t uid);
int setgid(git_t gid);
注意:
1:当非特权进程调用setuid()时,仅能修改进程的有效用户ID。
2:当特权进程以一个非0参数嗲用setuid()时,其实际用户ID,有效用户ID和保存set-user-ID 均被置为uid参数所指的值。

进程能够使用seteuid()来修改其有效用户ID,还能使用setegid()来修改其有效组ID
#include <unistd.h>
int seteuid(uid_t euid);
int setegid(git_t egid);
修改实际ID和有效ID;
#include <unistd.h>
int setreuid(uid_t ruid, uid_t euid);
int setrguid(git_t rgid, git_t egid);
第一个参数:新的实际ID
第二个参数:新的有效ID

获取实际,有效和保存设置ID
在大多数UNIX实现中,进程不能直接获取(或修改)其保存set-user-ID和保存set-group-ID的值。然而Linux提供了两个(非标准)系统调用来实现此项功能:getresuid()和getresgid().
#define _GNU_SOURCE
#include <unistd.h>
int getresuid(uid_t *ruid, uid_t *euid, uit_t *suid);
int getresgid(git_t *rgid, gid_t *egid, git_t *sgid);

修改实际,有效和保存设置ID

9.7.2 获取和修改文件系统ID

【Linux_Unix系统编程】Chapter9 进程凭证的更多相关文章

  1. Linux系统编程——Daemon进程

    目录 Daemon进程介绍 前提知识 Daemon进程的编程规则 Daemon进程介绍 Daemon运行在后台也称作"后台服务进程". 它是没有控制终端与之相连的进程.它独立与控制 ...

  2. linux系统编程之进程(六):父进程查询子进程的退出,wait,waitpid

    本节目标: 僵进程 SIGCHLD wait waitpid 一,僵尸进程 当一个子进程先于父进程结束运行时,它与其父进程之间的关联还会保持到父进程也正常地结束运行,或者父进程调用了wait才告终止. ...

  3. linux系统编程之进程(五)

    今天继续学习系统编程,学习的主题还是进程,今天主要讨论的是守护进程相关的概念,开始进入正题: 什么是守护进程:       守护进程的创建步骤: 在描述它之前,首先得先了解两个概念:进程组.会话期: ...

  4. linux系统编程之进程(一)

    今天起,开始学习linux系统编程中的另一个新的知识点----进程,在学习进程之前,有很多关于进程的概念需要了解,但是,概念是很枯燥的,也是让人很容易迷糊的,所以,先抛开这些抽象的概念,以实际编码来熟 ...

  5. linux系统编程之进程(二):进程生命周期与PCB(进程控制块)

    本节目标: 进程状态变迁 进程控制块 进程创建 进程撤消 终止进程的五种方法 一,进程状态变迁 进程的三种基本状态 就绪(Ready)状态 当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便 ...

  6. linux系统编程--守护进程,会话,进程组,终端

    终端: 在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(Controlling Terminal), 进程中,控制终端是保存在PCB中的信息,而f ...

  7. Linux系统编程之进程概念

    注:本文部分图片来源于网络,如有侵权,请告知删除 1. 什么是进程? 在了解进程概念之前,我们需要先知道程序的概念. 程序,是指编译好的二进制文件,这些文件在磁盘上,并不占用系统资源. 进程,指的是一 ...

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

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

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

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

随机推荐

  1. Java Iterator的一般用法

    Iterator(迭代器) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为“轻量级”对象,因为创建它的代价小. Java中的I ...

  2. Java第八次作业--数据库编程

    Deadline: 2017-5-18 23:00 一.学习要点 认真看书并查阅相关资料,掌握以下内容: 掌握应用JDBC访问数据库的基本步骤 掌握DriverManager类.Connection接 ...

  3. what is bitcoin

  4. IPM

    #if 0 void xyp2ipmp(cv::Mat& xyp, cv::Mat& ipmp, cv::Mat& xylim, Size& sz){ //xylimi ...

  5. JAVA正则表达式-捕获组与非捕获组

    Java捕获组与非捕获组的问题 先看例子: import java.util.regex.Matcher; import java.util.regex.Pattern; public class P ...

  6. unicode汉字编码

    原来我使用的一直是 \u4e00-\u9fa5 ,今天在匹配中文标点的时候匹配不上,就查了一下相关资料,原来unicode跟中文有关的范围还有好几个. 字符范围表 1.标准CJK文字 范围:\u340 ...

  7. beautiful number 数位DP codeforces 55D

    题目链接: http://codeforces.com/problemset/problem/55/D 数位DP 题目描述: 一个数能被它每位上的数字整除(0除外),那么它就是beautiful nu ...

  8. 各大OJ题目分类

    http://www.pythontip.com/acm/problemCategory

  9. hdu2602 DP (01背包)

    题意:有一个容量 volume 的背包,有一个个给定体积和价值的骨头,问最多能装价值多少. 经典的 01 背包问题不谈,再不会我就要面壁了. 终于有一道题可以说水过了 ……心好累 #include&l ...

  10. Immutable集合

    转自:https://blog.csdn.net/michaellufhl/article/details/6314333 大家都知道JDK提供了Collections.UnmodifiableLis ...