原本默认 1.进程凭证每个进程都有一套数字表示的用户ID(uid)和组ID(gid)。有时,也将这些ID称之为进程凭证。具体如下:1.实际用户ID(read user ID)和实际组ID(real group ID)实际用户ID 和 实际用户组ID 确定了进程所属的用户和组。作为登录过程的步骤之一,登录 shell 从 /etc/passwd 文件中读取相应用户密码记录的第三个和第四个字段,置为其实际用户ID 和 实际组 ID.当创建新进程时,将从其父进程继承这一属性。2.有效用户ID(effective user ID)和有效组ID(effective group ID)当进程尝试各种操作(系统调用)时,将结合有效用户ID, 有效组ID,连同辅助ID 一起来确定授予进程的权限。例如,当进程访问诸如文件,System V 进程间通信(IPC) 对象之类的系统资源时,此类 ID 会决定系统授予进程的权限,而这些资源的属主则令由与之相关联的用户 ID 和 组ID 来决定。内核会使用有效用户ID 来决定一个进程是否能向另外一个进程发送信号。有效用户ID为0(root 用户ID)的进程拥有超级用户的所有权限。这样的进程又称之为特权级进程(privileged process)。而某些系统调用只能由特权级进程执行。通常,有效用户ID及组ID 与其相应的实际ID 相等,但有2种方法能够致使二者不相等,其一就是9.7讨论的系统调用,其二就是执行 set-user-ID 和 set-group-ID 程序.3.保存的 set-user-ID(saved set-user-ID)和保存的 set-group-ID(saved set-group-ID)set-user-ID 程序会将进程的有效用户ID置为可执行文件的用户ID(属主), 从而获得常规情况下不具有的权限。与其他文件一样,可执行文件的用户ID和组ID决定了该文件的所有权。另外,可执行文件还拥有两个特别的权限位set-user-ID 和 set-group-ID。可使用 chmod 命令来设置。chmod u+s 文件名chmod g+s 文件名当运行set-user-ID 程序时,内核会将进程的有效用户ID设置为可执行文件的用户ID。通过这种方法修改进程的有效用户ID或者组ID,能够使进程获得常规情况下所不具备的权限。也可以利用程序的 set-user-ID 和 set-group-ID 机制,将进程的有效ID改为 root 之外的其他用户。例如,为提供对一个受保护文件的访问,采用如下方案就绰绰有余:创建一个具有对该文件访问权限的专用用户ID,然后再创建一个 set-user-ID 程序,将进程有效用户ID变更为这个专用ID。这样,就无需拥有超级用户的所有权限,程序就能访问该文件了。若可执行文件的 set-user-ID 权限位已开启,则将进程的有效用户ID置为可执行文件的属主。若未设置set-user-ID 权限位,则进程的有效用户ID保持不变。保存set-user-ID 和保存 set-group-ID 的值由对应的有效ID 复制而来。无论正在执行的文件是否设置了 set-user-ID 或者set-group-ID权限位,这一复制都将进行。只要 set-user-ID 和 set-group-ID 程序没有执行与特权级ID相关的任何操作,就应将其置于非特权ID 的身份之下。4.文件系统用户ID(file-system user ID)和文件系统ID(file-system group ID)(Linux专用)在Linux 系统中,要进行诸如打开文件,改变文件属主,修改文件权限之类的文件系统操作时,决定其操作权限的是文件系统用户ID和组ID。通常,文件系统用户ID和组ID 等同于相应的有效用户ID和组ID。此外,只要有效用户或组ID发生了变化,无论是通过系统调用,还是 set-user-ID 程序,则相应的文件系统ID也将随之改变为同一值。只有用 setfsuid(),setfsgid() ,才可以刻意制造出文件系统ID与相应有效ID的不同。5.辅助组ID辅助组ID用于标识进程所属的若干附加的组。新进程从其父进程处继承这些ID,登录shell从系统组文件中获取其辅助的组ID。这些ID与有效ID以及文件系统ID相结合,就能决定对文件,System V IPC 对象和其他系统资源的访问权限。2.获取和设置进程凭证1.修改有效ID,也可能修改实际用户ID和保存用户ID进程使用 setuid()和 setgid() 系统调用能够对其凭证做哪些修改呢?其规则取决于进程是否拥有特权(即有效用户ID 为0)。适用于setuid()系统调用的规则如下:1.当非特权进程调用 setuid() 时,仅能修改进程的有效用户ID.而且,仅能将有效用户ID修改成相应的实际用户ID或保存 set-user-ID。这意味着,对非特权用户而言,仅当执行 set-user-ID 程序时,setuid() 系统调用才起作用,因为当执行普通程序时,进程的实际用户ID,有效用户ID,和保存 set-user-ID三者之间均相等。2.当特权进程以一个非0参数调用 setuid() 时,其实际用户ID,有效用户ID和保存 set-user-ID 均被置为 uid 参数所指定的值。这一操作是单向的,一旦特权进程以此方式修改了其ID,那么所有特权都将丢失,且之后也不能再使用 setuid() 调用将有效用户ID重置为0.如果不希望发生这种情况,请使用稍后的 seteuid()或者 setreuid()替换setuid()。使用 setgid() 系统调用修改组 ID 的规则与之类似,仅需要把 setuid() 替换为 setgid(),把用户替换为组。因之,规则1与之前完全一致。但在规则2中,由于对组ID的修改不会引起进程特权的丢失(拥有特权与否由有效用户ID 决定),特权级程序可以使用 setgid()对组ID进行任意修改。2.修改有效用户ID seteuid():1.非特权级进程仅能将其有效ID修改为相应的实际 ID或者保存设置ID.2.特权级进程能将其有效ID修改为任意值。若特权进程使用 seteuid()将其有效用户ID修改为非0,那么此进程将不再具有特权(但可以根据规则1恢复)。3.修改实际ID和有效IDsetreuid();setregid();1.非特权进程只能将其实际用户ID设置为当前实际用户ID值(即保持不变)或有效用户ID值,且只能将有效用户ID设置为当前实际用户ID,有效用户ID或保持set-user-ID2.特权级进程能够设置实际用户ID和有效ID为任意值。3.不管进程拥有特权与否,只要如下条件成立,就能将保存set-user-ID 设置为新的有效用户ID。a) ruid 不为 -1b) 对有效用户ID所设置的值不同于系统调用之前的实际用户ID4.获取实际,有效和保存设置IDgetresuid();getresgid();5.修改实际,有效和保存IDsetresuid();setresgid();1.非特权进程能够将实际ID,有效ID和保存set-user-ID 中的任意ID 设置为实际用户ID,有效用户ID,或保存ser-user-ID中的任意当前值.2.特权级进程能够对实际用户ID,有效用户ID,和保存set-user-ID 做任意设置3.不管系统调用是否对其他ID做了修改,总是将文件系统用户ID设置为与有效用户ID相同。setresuid 和 setresgid() 调用具有0/1效应,要么全部成功,要么全部失败.6.获取和修改文件系统IDsetfsuid();setfsgid();7.获取和修改辅助组 IDgetgroups();setgroups();initgroups();getuid();
getgid();
geteuid();
getegid();
setuid();
setgid();
seteuid();
setegid();
setreuid();
setregid();
getresuid();
getresgid();
setresuid();
setresgid();
setfsuid();
setfsgid();
getgroups();
setgroups();
initgroups();https://blog.csdn.net/enlyhua/article/details/81008604

Uid: 有效,实际,保存,文件系统ID

9.Linux/Unix 系统编程手册(上) -- 进程凭证相关推荐

  1. linux/unix系统编程手册11-15

    title: linux/unix编程手册-11_15 date: 2018-05-27 11:53:07 categories: programming tags: tips linux/unix编 ...

  2. Linux/Unix系统编程手册 第三章:系统编程概念

    本章介绍系统编程的基础概念和一些后续章节用到的函数及头文件,并说明了可移植性问题. 系统调用是受控的内核入口,通过系统调用,进程可以请求内核以自己的名义去执行某些动作,比如创建子进程,执行I/O操作, ...

  3. Linux/Unix系统编程 五:进程

    进程是一个可执行程序的实例. 一.linux系统进程管理 1.进程管理的作用 判断机器健康状态 查看系统中所有进程 杀手进程 2.查看系统进程 1.ps -aux BSD操作系统格式: TTY说明: ...

  4. Linux/UNIX系统编程手册gg

    Linux系统: "所见皆文件" 一个比较好的博客 一.Linux基础操作 Linux系统目录: bin:存放二进制可执行文件 boot:存放开机启动程序 dev:存放设备文件: ...

  5. UNIX系统编程小结(三)----进程相关

    进程即一个程序的动态执行.引用apue上的一句话:"A thorough understanding of the UNIX System's process control is esse ...

  6. 【Linux系统编程】特殊进程之守护进程

    00. 目录 文章目录 00. 目录 01. 守护进程概述 02. 守护进程查看方法 03. 编写守护进程的步骤 04. 守护进程代码 05. 附录 01. 守护进程概述 守护进程(Daemon Pr ...

  7. 【Linux系统编程】特殊进程之僵尸进程

    00. 目录 文章目录 00. 目录 01. 僵尸进程概述 02. 僵尸进程案例 03. 避免僵尸进程 04. 附录 01. 僵尸进程概述 进程已运行结束,但进程的占用的资源未被回收,这样的进程称为僵 ...

  8. Linux系统编程手册-源码的使用

    Linux系统编程手册-源码的使用 转自:http://www.cnblogs.com/pluse/p/6296992.html 第三章后续部分重点介绍了后面章节所要使用的头文件及其实现,主要如下: ...

  9. 【Linux系统编程】特殊进程之孤儿进程

    00. 目录 文章目录 00. 目录 01. 孤儿进程概述 02. 孤儿进程代码 03. 附录 01. 孤儿进程概述 父进程运行结束,但子进程还在运行的子进程就称为孤儿进程(Orphan Proces ...

  10. Linux系统编程 74 孤儿进程和僵尸进程

    Linux系统编程  74 孤儿进程和僵尸进程 学习笔记 孤儿进程:父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为 init进程,称为init进程领养了孤儿进程. init进程会去接替 ...

最新文章

  1. Python编写爬虫编写到Excel中
  2. Android应用如何开机自启动、自启动失败原因
  3. 后台获得客户端IP地址
  4. 单点登陆的ASP.NET应用程序设计[zt]
  5. oracle socket读取超时,设置套接字操作超时
  6. c语言程序做成可执行文件,windows环境下C程序生成可执行文件
  7. 动态规划之字符串最短编辑距离
  8. 反编译代码遇到的问题
  9. 把RDD简单的转换成DataFrames
  10. AcWing基础算法课Level-2 第三讲 搜索与图论
  11. c语言跑酷小游戏代码,跑酷游戏代码
  12. 苹果手机收不到推送信息_苹果手机微信收不到信息怎么回事(超详细解决方案分享)...
  13. 使用驱动器中的光盘之前需要将其格式化怎么弄
  14. 落枫推荐:firefox插件firebug的8个最优秀扩展
  15. matlab的颜色映射colormap
  16. Good Luck in CET-4 Everybody! HDU - 1847
  17. MacOS 开启latex人生(mactex+texmaker安装)
  18. ubuntu 16.04 和 18.04 替换apt源为阿里源
  19. 通过CMD启动MATLAB的同时运行M脚本
  20. python画名侦探柯南_机器学习机器学习三剑客之Matplotlab

热门文章

  1. 中文词向量论文综述(三)
  2. IIS SSL证书 指定的登录会话不存在,可能已被终止 HRESULT:0x80070520
  3. linux ssh远程无密码登陆无效
  4. XMLHTTPRequest如何访问需要安全验证的网站
  5. 编码:隐匿在计算机软硬件背后的语言(3)--二进制加法器
  6. 数据结构之队列java版
  7. R语言ETL工程系列:总论
  8. Lesson 07 for Plotting in R for Biologists
  9. 如何减少java里的分支_idea切换分支的时候,忽略一些无用的修改设置
  10. 数据之路 - Python爬虫 - PyQuery库