参考:https://www.cnblogs.com/bwangel23/p/4225818.html

一、Linux 中的UID

1.1 每个进程的三个UID值

内核为每个进程维护的三个UID值。这三个UID分别是RUID(Real UID,实际用户ID)EUID(Effective UID,有效用户ID)SUID(Saved Set-user-ID,保存的设置用户ID)

  • RUID:我们当前以哪个用户登录,我们运行程序产生进程的RUID就是这个用户的UID。
  • EUID:指当前进程实际以哪个UID来运行。一般情况下EUID等于RUID;但如果进程对应的可执行文件具有SUID权限(也就是rws的s),那么进程的EUID是可执行文件的所有者的UID
  • SUID:EUID的一个副本,与SUID权限有关。

1.2 二进制文件的SUID权限

以passwd这个可执行文件为例。
password文件的权限为:-rwsr-xr-x
passwd的所有者是root,但是其他用户对于passwd也有执行权限,并且passwd自身具有SUID权限(rws的s)。
那么,当非root用户执行passwd这个可执行文件的时候,产生的进程的EUID,就是root用户的UID。换言之,这种情况下,产生的进程,实际以root用户的ID来运行二进制文件。

需要说明的是,SUID权限具有时效性仅在执行该文件的过程中有效

二、setuid、setresuid函数

2.1 setuid函数

函数原型:int setuid(uid_t uid);

在Linux中, setuid(uid)函数的执行步骤为:
(1)如果由Root权限进程(EUID为0的进程)调用,则将进程的RUID,EUID和SUID都设置为uid,返回0
(2)如果由普通权限进程调用,且uid等于RUID或uid等于SUID,则将进程的EUID设置为uid,返回0
(3)如果由普通权限进程调用,且uid不等于RUID或SUID,则设置errno为EPERM,并返回-1(表示执行失败)

上文中,执行password的进程,EUID是password的所有者的UID,也就是root用户的UID,也就是0。所以,属于情况(1)。

su文件同样是-rwsr-xr-x权限。所以,安卓中,普通进程通过Runtime.getRuntime().exec(“su”),发起一个shell进程,去执行su的时候,同样属于情况(1)。

2.2 setresuid函数

参考https://blog.csdn.net/damotiansheng/article/details/39674115

函数原型:int setresuid(uid_t ruid, uid_t euid, uid_t suid);

满足以下条件之一时,setresuid被执行:
①当前进程的euid是root(AID_ROOT)
②三个参数ruid、euid、suid中的每一个,都和当前进程的某个UID值 相等

例如:

  • 如果当前进程的RUID=100,EUID=0,SUID=300
    则setresuid(200,300,100)可以执行,因为原来的euid=0
  • 如果当前进程的RUID=100,EUID=300,SUID=200
    则setresuid(200,300,100)可以执行,因为这三个参数都是当前UID中的某一个;
    但setresuid(100,200,400)不能执行,因为400不等于当前UID中的任意一个。

三、getuid、geteuid函数

getuid返回当前进程的RUID
geteuid返回当前进程的EUID

四、安卓中 app执行su获取root用户权限的过程

参见:https://blog.csdn.net/qq_39441603/article/details/124996277

【Linux】Linux 中的UID相关推荐

  1. Linux系统中UID和GID详解

    Linux系统中UID和GID详解 在Linux系统中,每个用户和组都有一个唯一的数字标识符,分别称为UID(用户ID)和GID(组ID).这些标识符用于在系统级别上对用户和组进行身份验证和授权,并且 ...

  2. discuz修改用户uid_你知道Linux中的UID和GID的含义吗

    你知道Linux中的UID和GID的含义吗 是不是大家看到UID(user id)和GID(group id),都会立马说不就是用户和用户组ID. 但是. 当我们登陆Linux系统时,输入自己的用户名 ...

  3. linux uid 不同用户,Linux系统中每个用户都有一个唯一的UID,超级用户的UID是 。

    Linux系统中每个用户都有一个唯一的UID,超级用户的UID是 . 0.5用分数表示是______,约成最简分数是______.线偏振光在n1和n2介质的界面上发生全反射,线偏振光电矢量的振动方向与 ...

  4. linux socket 中的backlog参数介绍

    问题 我们在linux上服务器起了一个serversocket,并且设置了backlog为2,并没有让serversock.accept() 在客户端上,我们一个一个的启动了连接socket, 当连接 ...

  5. linux 系统中 /etc/passwd 和 /etc/shadow文件详解

    在linux操作系统中, /etc/passwd文件中的每个用户都有一个对应的记录行,记录着这个用户的一下基本属性.该文件对所有用户可读.   而/etc/shadow文件正如他的名字一样,他是pas ...

  6. linux搜索关键字并定位,Linux系统中文件定位与查找(示例代码)

    Linux系统中文件查找 关键词 文件查找 | find | locate 本文主要介绍有关文件查找的两个命令--find和locate,以及压缩打包的命令--compress, gzip,bzip2 ...

  7. linux查看本机所有预设的系统变量,如何设置与查看Linux系统中的环境变量?

    大家都知道,在 Linux 系统中,有环境变量和 Shell 变量这两种变量. 环境变量是在程序及其子程序中全局可用的,常常用来储存像默认的文本编辑器或者浏览器,以及可执行文件的路径等等这样的信息.而 ...

  8. linux系统创建操作系统用户,linux系统中用户组创建管理linux操作系统 -电脑资料...

    用户组管理包括对用户组创建,删除,修改及查看组操作命令,下面我们一起来看看希望本文章对各位同学会有所帮助哦, 1,创建组 groupadd test 增加一个test组 2,修改组 groupmod ...

  9. 用户管理 之 Linux 系统中的超级权限的控制

    作者:北南南北 赞助: eTony,pandonny,懒猫, Arch 来自:LinuxSir.Org 摘要: 超级用户是系统最高权限的拥有者,是系统管理唯一的胜任者:由于权限的超级并且达到无所不能的 ...

最新文章

  1. 《iOS 9 开发指南》——第6章,第6.4节 Interface Builder中的故事板——Storyboarding...
  2. 大型网站架构的发展演变过程
  3. 网络和计算机管理制度,网络和计算机使用管理制度
  4. 知乎推荐页 Ranking 构建历程和经验分享
  5. html select显示树形菜单_HTML标签总结
  6. 自己动手写游戏:飞机大战
  7. 饿了么翻车,美团被质疑,马云也赔了40亿,这项技术为什么让人害怕?
  8. c语言哈密顿路径算法,用于检查给定图中是否存在哈密顿循环或路径的C ++程序...
  9. Win32ASM学习[12]:位测试指令位扫描指令
  10. 编程环境中Runtime(运行时)的三个含义
  11. php 调用日历控制,基于ThinkPHP实现的日历功能实例详解
  12. 背景图片固定(背景图片附着)(HTML、CSS)
  13. 剑指offer面试题30. 包含min函数的栈(辅助栈)
  14. 软件需求说明书模板1
  15. uva 10041 - Vito's Family
  16. 吴恩达DeepLearning第四部分作业week2 基于keras搭建CNNResnet50
  17. 系统架构师(十二)嵌入式系统设计
  18. 小程序页面传值的方式
  19. 问答网站Quora副总裁杨蕾博士:让知识改变世界
  20. 修马达的php源码,查看SKU:RB-02S087 振动马达模块的源代码

热门文章

  1. Blender-烘焙动画,解除约束父子级,导入UE4
  2. 基于MATLAB拟合的位移传感器补偿方案
  3. 绝对布局,setLayout(null)
  4. 关于Java String 不可变性的分析
  5. 快播王欣将出狱!还有机会吗?
  6. python commands_python-commands模块
  7. 使用MaixPy IDE开发K210
  8. 【汇编学习笔记】DAA指令
  9. 环签名、群签名、DAA协议原理
  10. Linux 使用交流