A quoi sert l'UID Linux

藏色散人
Libérer: 2023-03-13 09:40:50
original
3039 Les gens l'ont consulté

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é.

A quoi sert l'UID Linux

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

1. UID Linux dans

1.1 Trois valeurs UID par processus

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é) .

  • RUID : Sous quel utilisateur nous sommes actuellement connectés, le RUID du processus que nous exécutons le programme pour générer est l'UID de cet utilisateur.
  • EUID : fait référence à sous quel UID le processus actuel s'exécute réellement. Dans des circonstances normales, EUID est égal à RUID ; mais si le fichier exécutable correspondant au processus a l'autorisation SUID (c'est-à-dire le s de rws), alors l'EUID du processus est l'UID du propriétaire de l'exécutable. déposer.
  • SUID
  •  : Une copie de l'EUID, liée aux autorisations SUID.

1.2 Autorisations SUID pour les fichiers binairesPrenons le fichier exécutable passwd comme exemple.

Les autorisations du fichier de mots de passe sont : -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权限具有时效性仅在执行该文件的过程中有效

二、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-xl'EUID

du processus généré est l'UID

de l'utilisateur root. En d’autres termes, dans ce cas, le processus généré exécute effectivement le fichier binaire avec l’ID de l’utilisateur root. Il est à noter que

Les autorisations SUID sont sensibles au temps
 :

Uniquement lors de l'exécution du fichier Efficace

.

2. setuid, fonction setresuid

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
    (2) Si elle est appelée par un processus ordinaire Si appelé par un processus privilégié et que uid est égal à RUID ou que uid est égal à SUID, définissez l'EUID du processus sur uid et renvoyez 0
  • (3) S'il est appelé par un processus privilégié normal et que uid ne l'est pas égal à RUID ou SUID, définissez errno sur EPERM et renvoie -1 (indiquant un échec d'exécution)
  • Dans ce qui précède, l'EUID du processus qui exécute le mot de passe est l'UID du propriétaire du mot de passe, qui est l'UID de la racine utilisateur, qui est 0. Il appartient donc au cas (1). Les fichiers

  • su ont également les autorisations -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).

2.2 fonction setresuid

Référence https://blog.csdn.net/damotiansheng/article/details/39674115

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 :
🎜🎜Si le RUID du processus actuel=100, EUID=0, SUID=300🎜 alors setresuid(200,300,100) peut être exécuté car l'euid d'origine=0🎜🎜Si le RUID du processus actuel=100 , EUID=300,SUID =200🎜 Ensuite, setresuid(200,300,100) peut être exécuté, car ces trois paramètres sont tous un de l'UID actuel 🎜 Mais setresuid(100,200,400) ne peut pas être exécuté, car 400 n'est égal à aucun des UID actuels ; UID. 🎜🎜🎜🎜🎜 3. Fonctions getUid et getEUID 🎜🎜GetUid renvoie le 🎜Ruid du processus actuel🎜🎜 GetEUID renvoie le 🎜EUID du processus actuel 🎜🎜🎜 Recommandations réalisées: "🎜Linux Video Tutorial🎜" 🎜🎜 🎜🎜

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal