Die Funktion der Linux-UID besteht darin, einen Benutzer zu identifizieren, und jeder Benutzer hat eine UID. Unter Linux gibt es drei UID-Kennungen: 1. RUID, echte UID, tatsächliche Benutzer-ID; 3, SUID, gespeicherte Set-Benutzer-ID, gespeicherte Set-Benutzer-ID.
Die Betriebsumgebung dieses Tutorials: Linux5.9.8-System, Dell G3-Computer.
Was nützt die Linux-UID?
UID unter Linux
Unter Linux wird die UID verwendet, um einen Benutzer zu identifizieren (z. B. Alice, Bob, Root)
Unter Android wird die UID verwendet, um eine Anwendung oder einen Systemdienst zu identifizieren
Eine UID pro Benutzer.
Der Kernel verwaltet 3 UID-Identifikationen für jeden Prozess. Diese drei UID-Kennungen sind RUID (echte UID, tatsächliche Benutzer-ID) , EUID (effektive UID, effektive Benutzer-ID) , SUID (gespeicherter Satz-Benutzer-ID, gespeicherter Satz-Benutzer-ID) .
-rwsr-xr-x
Der Besitzer von passwd ist root, aber andere Benutzer haben auch Ausführungsberechtigungen für passwd, und passwd selbst hat SUID-Berechtigungen (s von rws ). die EUID
des generierten Prozesses die -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
Root-Benutzer-UID
Nur während der Ausführung der Datei Effektiv.
2. setuid, setresuid-Funktion
2.1 setuid-Funktion
Funktionsprototyp: int setuid(uid_t uid);
(1) Bei Aufruf durch einen Root-privilegierten Prozess (ein Prozess mit EUID 0), setzen Sie die RUID, EUID und SUID des Prozesses auf uid und geben Sie 0 zurück
(2) Bei Aufruf von einem gewöhnlichen Prozess. Wenn von einem privilegierten Prozess aufgerufen und uid gleich RUID oder uid gleich SUID ist, setzen Sie die EUID des Prozesses auf uid und geben Sie 0 zurück. (3) Wenn von einem normalen privilegierten Prozess aufgerufen und uid nicht gleich RUID oder SUID, setzen Sie errno auf EPERM und geben Sie -1 zurück (was einen Ausführungsfehler anzeigt)-rwsr-xr-x
-Berechtigungen. Wenn in Android ein normaler Prozess über Runtime.getRuntime().exec("su") einen Shell-Prozess initiiert, um su auszuführen, fällt er daher auch in die Situation (1). 2.2 Setresuid-Funktion Zufriedenheit Setresuid wird ausgeführt, wenn eine der folgenden Bedingungen erfüllt ist , dann kann setresuid(200,300,100) ausgeführt werden, da die ursprüngliche EUID = 0 ist.Wenn die RUID des aktuellen Prozesses = 100 ist , EUID=300,SUID =200
Dann kann setresuid(200,300,100) ausgeführt werden, da diese drei Parameter alle eine der aktuellen UID sind; Aber setresuid(100,200,400) kann nicht ausgeführt werden, da 400 keiner der aktuellen entspricht UID.
Das obige ist der detaillierte Inhalt vonWas nützt die Linux-UID?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!