• 技术文章 >运维 >linux运维

    linux uid有什么用

    藏色散人藏色散人2023-03-13 09:40:50原创66

    linux uid的作用是标识一个用户,每个用户有一个UID;linux中有三个UID标识分别是:1、RUID,Real UID,实际用户ID;2、EUID,Effective UID,有效用户ID;3、SUID,Saved Set-user-ID,保存的设置用户ID。

    本教程操作环境:linux5.9.8系统、Dell G3电脑。

    linux uid有什么用?

    Linux 中的UID

    Linux中,UID用于标识一个用户(例如alice,bob,root)
    Android中,UID用于标识一个应用程序或系统服务

    一、Linux 中的UID

    1.1 每个进程的三个UID值

    每个用户有一个UID。

    内核为每个进程维护3个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

    相关推荐:《Linux视频教程

    以上就是linux uid有什么用的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:linux uid
    上一篇:linux底层是什么语言 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • Linux规定了几种不同类型的用户• linux多线程同步的几种方式是什么• Linux tee命令详解• linux 命令mkdir执行什么• linux底层是什么语言
    1/1

    PHP中文网