Was nützt die Linux-UID?

藏色散人
藏色散人Original
2023-03-13 09:40:503032Durchsuche

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.

Was nützt die Linux-UID?

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

1. Linux UID in

1.1 Drei UID-Werte pro Prozess

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

  • RUID: Als welcher Benutzer wir gerade angemeldet sind, die RUID des Prozesses, den wir mit dem zu generierenden Programm ausführen, ist die UID dieses Benutzers.
  • EUID: bezieht sich darauf, unter welcher UID der aktuelle Prozess tatsächlich läuft. Unter normalen Umständen entspricht die EUID der RUID. Wenn die ausführbare Datei, die dem Prozess entspricht, jedoch über SUID-Berechtigungen verfügt (d. h. die s von rws), ist die EUID des Prozesses die UID des Eigentümers der ausführbaren Datei Datei. SUID: Eine Kopie der EUID, bezogen auf SUID-Berechtigungen.
  • 1.2 SUID-Berechtigungen für Binärdateien

Nehmen Sie die ausführbare Datei passwd als Beispiel. Die Berechtigungen der Passwortdatei sind: -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 ).

Wenn dann ein Nicht-Root-Benutzer die ausführbare passwd-Datei ausführt, ist

die EUID
des generierten Prozesses die -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-xRoot-Benutzer-UID

. Mit anderen Worten: In diesem Fall führt der generierte Prozess tatsächlich die Binärdatei mit der ID des Root-Benutzers aus.

Es ist zu beachten, dass SUID-Berechtigungen zeitkritisch sind

:
Nur während der Ausführung der Datei Effektiv

.

2. setuid, setresuid-Funktion

2.1 setuid-Funktion
Funktionsprototyp: int setuid(uid_t uid);

Unter Linux, setuid The Die Ausführungsschritte der (uid)-Funktion sind:

(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)
  • Im Obigen ist die EUID des Prozesses, der das Passwort ausführt, die UID des Passwortbesitzers, also die UID des Roots Benutzer, der 0 ist. Daher gehört es zum Fall (1).
  • su-Dateien haben auch -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

  • :
    ① Die Euid des aktuellen Prozesses ist root (AID_ROOT)
  • ② Jeder der drei Parameter ruid, euid und suid entspricht einem bestimmten UID-Wert des aktuellen Prozesses

Zum Beispiel:

Wenn die RUID des aktuellen Prozesses = 100, EUID = 0, SUID = 300

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

3. Getuid- und GetEUID -Funktionen

Getuid gibt den 🎜ruiden des aktuellen Prozesses zurück

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn