8.11 更改用户ID和组ID

在UNIX系统中,特权是基于用户和组ID的,当程序需要增加特权,或需要访问当前并不允许访问的资源时,我们就需要更换自己的用户ID或组ID。

一般而言,在设计应用程序的时候,我们总是试图使用最小特权(lease privilege)模型。

可以用setuid函数设置实际用户ID和有效用户ID。与此类似,可以用s e t g i d函数设置实际组ID和有效组ID。

#include <unistd.h>

int setuid(uid_t uid) ;

int setgid(gid_t g i d) ;

//两个函数返回:若成功则为0,若出错则为-1

关于谁能更改ID有若干规则。现在先考虑有关改变用户ID的规则(在这里关于用户ID所说明的一切都适用于组ID)。

l  若进程具有超级用户特权,则setuid函数将实际用户ID、有效用户ID,以及保存的设置-用户-ID设置为uid。

l  若进程没有超级用户特权,但是uid等于实际用户ID或保存的设置-用户- ID,则setuid只将有效用户ID设置为uid。不改变实际用户ID和保存的设置-用户- ID。

l  如果上面两个条件都不满足,则e r r n o设置为E P E R M,并返回出错。

关于内核所维护的三个用户ID,还要注意下列几点:

l  只有超级用户进程可以更改实际用户ID。通常,实际用户ID是在用户登录时,由login ( 1 )程序设置的,而且决不会改变它。因为login是一个超级用户进程,当它调用setuid时,设置所有三个用户ID。

l  仅当对程序文件设置了设置-用户- ID位时, exec函数设置有效用户ID。如果设置-用户- ID位没有设置,则exec函数不会改变有效用户ID,而将其维持为原先值。任何时候都可以调用setuid,将有效用户ID设置为实际用户ID或保存的设置-用户- ID。自然,不能将有效用户ID设置为任一随机值。

l  保存的设置-用户- ID是由exec从有效用户ID复制的。在exec按文件用户ID设置了有效用户ID后,即进行这种复制,并将此副本保存起来。

8.10.1 setreuid和setregid函数

4 . 3 + BSD支持setregid函数,其功能是交换实际用户ID和有效用户ID的值。

#include <unistd.h>

int setreuid(uid_t ruid, uid_t e uid) ;

int setregid(gid_t rg i d, gid_t e g i d) ;

//两个函数返回:若成功则为0,若出错则为-1

8.10.2 seteuid和setegid函数

在对P O I X . 1的建议更改中包含了两个函数seteuid和setegid。它们只更改有效用户ID和有效组ID。

#include <unistd.h>

int seteuid(uid_t uid) ;

int setegid(gid_t g i d) ;

//两个函数返回:若成功则为0,若出错则为-1

转载于:https://www.cnblogs.com/shaoguangleo/archive/2011/10/22/2806021.html

8.11 更改用户ID和组ID相关推荐

  1. UNIX再学习 -- 用户 ID 和组 ID

    用户 ID和组 ID 的内容已经在好几章中出现过了.之前都没有讲到,现在放到一起总结. 一.用户 ID 和 组 ID 回顾 1.我们在APUE 第 4.6.8 章,都有涉及到. 其中我们用到的地方: ...

  2. linux id 命令 显示用户id和组id信息

    Linux id命令用于显示用户的ID,以及所属群组的ID. id会显示用户以及所属群组的实际与有效ID.若两个ID相同,则仅显示实际ID.若仅指定用户名称,则显示目前用户的ID. 语法 id [-g ...

  3. 账号 linux_Linux入门之UID和GID(用户ID和组ID)

    登陆 Linux 系统时,虽然输入的是自己的用户名和密码,但其实 Linux 并不认识你的用户名称,它只认识用户名对应的 ID 号(也就是一串数字).Linux 系统将所有用户的名称与 ID 的对应关 ...

  4. Linux 命令之 id -- 显示用户ID和组ID

    文章目录 命令介绍 常用选项 参考示例 显示当前用户的用户id及所属用户组的信息 显示用户所属群组的ID 显示用户所属附加群组的ID 显示指定用户信息 命令介绍 id命令可以显示真实有效的用户ID(U ...

  5. Linux 查看当前用户id和组id

    whoami && id 转载于:https://www.cnblogs.com/Presley-lpc/p/9443187.html

  6. Linux应用程序动态更改用户ID

    有时候为了系统安全,会将程序进行降权,但是当需要访问当前不允许访问的资源时,如何处理呢?那就是更改自己的用户ID或组ID,使新的ID具有合适的特权或访问权限,当处理完之后,再降低其特权,下面来介绍一下 ...

  7. linux中如何设置组id,linux 下设置用户ID 和 设置组ID 学习笔记

    因为某种原因 感觉心里一直有想把Unix有关文件权限编程这部份弄懂的想法,  所以第三遍看Unix高级编程第四章, 以前都是一眼带过, 根本没看吃透, 再次看感觉懂了蛮多的, 写下了以后复习用! 一: ...

  8. Unix进程相关用户ID、用户组ID详解

    文章目录 Unix文件相关属性 文件属性操作相关命令 进程相关ID 设置用户ID和设置组ID 文件访问权限 进程操作文件权限 更改用户ID和组ID 我们在使用类UNIX系统时,经常会涉及到各种ID,比 ...

  9. linux 进程组id 错乱,【Linux】终端,进程组,作业,会话及作业控制

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

最新文章

  1. Win7封装无损廋身清单
  2. tensorflow 对csv数据进行批量获取
  3. 这个帖子要收藏,以后用得着--python 实时获取子进程输出
  4. Springfox-swagger使用详解
  5. 数据结构两个月学完_这是我作为数据科学家两年来所学到的
  6. python中二进制表示_Python中的二进制搜索:直观介绍
  7. 计算机网络考试成绩分析报告,成绩分析报告范文_成绩分析总结与反思
  8. 微软一站式示例代码库(中文版)2011-05-13版本, 新添加Windows Azure, WinForms等16个Sample...
  9. flac文件转换成mp3格式
  10. 如何自学成为设计师_不会自学,你永远只能是个三流设计师
  11. 计算机高配置表cpu,高配置电脑配置清单
  12. 2019年Unity学习资源指南[精心整理]
  13. guava LoadingCache 的用法
  14. 2008Noip解题报告
  15. HTML 利用 Web Audio API 进行音频可视化
  16. 博客内插入bilibili视频
  17. 二级域名需要备案吗?
  18. Android 硬件加速使用总结
  19. Blender设置相机围绕物体旋转
  20. CSharp调用c++的标定库DLL方式

热门文章

  1. JPA EnableJpaAuditing 审计功能
  2. linux安装IPython四种方法
  3. 温故知新MySQL--如何在MySQL表中删除重复行
  4. Samba+lamp完成指定任务
  5. gcc 常用命令-Wall
  6. ComponentOne Wijmo Editor 在光标处添加文本
  7. 在Lotus Domino中使用Java构建应用程序
  8. 蚂蚁金服核心技术:百亿特征实时推荐算法揭秘
  9. Android Studio查看Android源代码失败
  10. lua类库 middleclass学习笔记