La fonction de l'UID Linux est d'identifier un utilisateur, et chaque utilisateur a un UID ; il existe trois identifiants UID sous Linux : 1. RUID, Real UID, ID utilisateur réel 2. EUID, Effective UID, ID utilisateur effectif ; 3, SUID, ID utilisateur de l'ensemble enregistré, ID utilisateur de l'ensemble enregistré.
L'environnement d'exploitation de ce tutoriel : système linux5.9.8, ordinateur Dell G3.
À quoi sert l'UID Linux ?
UID sous Linux
Sous Linux, l'UID est utilisé pour identifier un utilisateur (comme Alice, Bob, Root)
Sous Android, l'UID est utilisé pour identifier une application ou un service système
Un UID par utilisateur.
Le noyau conserve 3 identifications UID pour chaque processus. Ces trois identifiants UID sont RUID (Real UID, ID utilisateur réel) , EUID (UID effectif, ID utilisateur effectif) , SUID (ID utilisateur enregistré, ID utilisateur enregistré) .
-rwsr-xr-x
Le propriétaire de passwd est root, mais d'autres utilisateurs ont également des autorisations d'exécution pour passwd, et passwd lui-même a des autorisations SUID (s de rws ).
Ensuite, lorsqu'un utilisateur non root exécute le fichier exécutable passwd, -rwsr-xr-x
passwd的所有者是root,但是其他用户对于passwd也有执行权限,并且passwd自身具有SUID权限(rws的s)。
那么,当非root用户执行passwd这个可执行文件的时候,产生的进程的EUID,就是root用户的UID。换言之,这种情况下,产生的进程,实际以root用户的ID来运行二进制文件。
需要说明的是,SUID权限具有时效性:仅在执行该文件的过程中有效。
函数原型: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
l'EUID
:2. setuid, fonction setresuidUniquement lors de l'exécution du fichier Efficace
.
2.1 fonction setuid
Prototype de fonction : int setuid(uid_t uid);
Sous Linux, setuid Le les étapes d'exécution de la fonction (uid) sont :
(1) Si elle est appelée par un processus privilégié Root (un processus avec l'EUID 0), définissez le RUID, l'EUID et le SUID du processus sur uid et renvoyez 0-rwsr-xr-x
. Par conséquent, sous Android, lorsqu'un processus normal lance un processus shell via Runtime.getRuntime().exec("su") pour exécuter su, il tombe également dans la situation (1). Prototype de fonction : int setresuid(uid_t ruid, uid_t euid, uid_t suid);
Satis faction Setresuid est exécuté lorsque l'une des conditions suivantes
① L'euid du processus actuel est root (AID_ROOT) ② Chacun des trois paramètres ruid, euid et suid est égal à une certaine valeur UID du processus actuel
Par exemple :Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!