8.11 更改用户ID和组ID
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相关推荐
- UNIX再学习 -- 用户 ID 和组 ID
用户 ID和组 ID 的内容已经在好几章中出现过了.之前都没有讲到,现在放到一起总结. 一.用户 ID 和 组 ID 回顾 1.我们在APUE 第 4.6.8 章,都有涉及到. 其中我们用到的地方: ...
- linux id 命令 显示用户id和组id信息
Linux id命令用于显示用户的ID,以及所属群组的ID. id会显示用户以及所属群组的实际与有效ID.若两个ID相同,则仅显示实际ID.若仅指定用户名称,则显示目前用户的ID. 语法 id [-g ...
- 账号 linux_Linux入门之UID和GID(用户ID和组ID)
登陆 Linux 系统时,虽然输入的是自己的用户名和密码,但其实 Linux 并不认识你的用户名称,它只认识用户名对应的 ID 号(也就是一串数字).Linux 系统将所有用户的名称与 ID 的对应关 ...
- Linux 命令之 id -- 显示用户ID和组ID
文章目录 命令介绍 常用选项 参考示例 显示当前用户的用户id及所属用户组的信息 显示用户所属群组的ID 显示用户所属附加群组的ID 显示指定用户信息 命令介绍 id命令可以显示真实有效的用户ID(U ...
- Linux 查看当前用户id和组id
whoami && id 转载于:https://www.cnblogs.com/Presley-lpc/p/9443187.html
- Linux应用程序动态更改用户ID
有时候为了系统安全,会将程序进行降权,但是当需要访问当前不允许访问的资源时,如何处理呢?那就是更改自己的用户ID或组ID,使新的ID具有合适的特权或访问权限,当处理完之后,再降低其特权,下面来介绍一下 ...
- linux中如何设置组id,linux 下设置用户ID 和 设置组ID 学习笔记
因为某种原因 感觉心里一直有想把Unix有关文件权限编程这部份弄懂的想法, 所以第三遍看Unix高级编程第四章, 以前都是一眼带过, 根本没看吃透, 再次看感觉懂了蛮多的, 写下了以后复习用! 一: ...
- Unix进程相关用户ID、用户组ID详解
文章目录 Unix文件相关属性 文件属性操作相关命令 进程相关ID 设置用户ID和设置组ID 文件访问权限 进程操作文件权限 更改用户ID和组ID 我们在使用类UNIX系统时,经常会涉及到各种ID,比 ...
- linux 进程组id 错乱,【Linux】终端,进程组,作业,会话及作业控制
终端 概念 在UNIX系统中,用用户通过终端登录系统后得到一一个Shell进程,这个终端成为Shell进程的控制终端 (Controlling Terminal),控制终端是保存在PCB中的信息,而我 ...
最新文章
- Win7封装无损廋身清单
- tensorflow 对csv数据进行批量获取
- 这个帖子要收藏,以后用得着--python 实时获取子进程输出
- Springfox-swagger使用详解
- 数据结构两个月学完_这是我作为数据科学家两年来所学到的
- python中二进制表示_Python中的二进制搜索:直观介绍
- 计算机网络考试成绩分析报告,成绩分析报告范文_成绩分析总结与反思
- 微软一站式示例代码库(中文版)2011-05-13版本, 新添加Windows Azure, WinForms等16个Sample...
- flac文件转换成mp3格式
- 如何自学成为设计师_不会自学,你永远只能是个三流设计师
- 计算机高配置表cpu,高配置电脑配置清单
- 2019年Unity学习资源指南[精心整理]
- guava LoadingCache 的用法
- 2008Noip解题报告
- HTML 利用 Web Audio API 进行音频可视化
- 博客内插入bilibili视频
- 二级域名需要备案吗?
- Android 硬件加速使用总结
- Blender设置相机围绕物体旋转
- CSharp调用c++的标定库DLL方式