Was bedeutet die Verwendung von EUID? Wenn RUID und EUID eines Prozesses 1000, 0 sind und wir einen beliebigen Befehl ausführen, wird der Befehl mit der Berechtigungsstufe 1000 ausgeführt, warum?

Was bedeutet die Verwendung von EUID? Wenn RUID und EUID eines Prozesses 1000, 0 sind und wir einen beliebigen Befehl ausführen, wird der Befehl mit der Berechtigungsstufe 1000 ausgeführt, warum?

Nach meinem Verständnis

  • RUID: Die UID des Aufrufers des Prozesses wird als echte UID bezeichnet.
  • EUID: Effektive UID bedeutet zulässige Berechtigungen für diesen Prozess.
// setuid_file.c
#include<stdio.h>
int main(void)
{
        int uid;
        uid=getuid();
        printf("RUID : getuid() : %d\n",uid);
        uid=geteuid();
        printf("EUID : geteuid() : %d\n",uid);

        system("whoami");
        system("cat /etc/sudoers"); //only root user can access. here we can write any command which only root user can execute.
}
 
gcc setuid_file.c -o euid_zero
chmod ug+s euid_zero

Also habe ich im Root-Terminal Suid und Guid für die ausführbare Datei euid_zero festgelegt. Wenn ich nun versuche, die ausführbare Datei als normaler Benutzer auszuführen, wird die folgende Ausgabe angezeigt.

ll euid_zero
-rwsr-sr-x 1 root root 16768 Dec 30 00:59 euid_zero

whoami
kali

id
uid=1000(kali) gid=1000(kali) groups=1000(kali)

./euid_zero

RUID : getuid() : 1000
EUID : geteuid() : 0
kali
cat: /etc/sudoers: Permission denied
                                      

Wenn die EUID hier also Null ist, können wir auch keine Root-Berechtigungen erhalten. Das bedeutet, dass wir gemäß RUID Zugriffsberechtigungen haben. Was bedeutet dann die EUID, wenn sie nicht verwendet wird?

Antwort1

Es ermöglicht dem Prozess,vorübergehendErhöhen und verringern Sie Berechtigungen nach Bedarf.

Beispielsweise startet ein Dateiserver-Daemon (smbd, ftpd) als Root, setzt dann aber per seteuid() die EUID des angemeldeten Benutzers. Jetzt kann er die meiste Zeit mit der EUID des angemeldeten Benutzers laufen, sodass der Kernel Dateizugriffsprüfungen durchführen kann, aber dennoch in der Lage ist, seine Privilegien für bestimmte Vorgänge wieder auf EUID 0 zu erhöhen.

Beachten Sie jedoch, dass bei Verwendung system()der Befehl über aufgerufen wird /bin/sh.und die Bash-Shell gibt absichtlich Privilegien aufwenn es eine UID/EUID-Nichtübereinstimmung erkennt. Ihr eigener Setuid-Prozesskönntelässt sich tatsächlich /etc/shadowproblemlos öffnen – nur Tools, die über system() gestartet werden, sind dazu nicht in der Lage.

Wenn Sie alle system()-Aufrufe durch fork+exec oder sogar ein einfaches ersetzen open("/etc/shadow", O_RDONLY), werden Sie sehen, dass Sie mit RUID=1000, aber EUID=0 auf die Datei zugreifen können. (Außerdem werden Ihnen idbeide UID/GID-Sätze gemeldet.)

Antwort2

Im Allgemeinen funktioniert EUID selbst wie erwartet. Das „Problem“ liegt hier bei system(3)und shes verwendet. Siehe das Handbuch (man 3 system):

system()funktioniert tatsächlich nicht richtig von Programmen mit Set-User-ID- oder Set-Group-ID-Berechtigungen auf Systemen mit /bin/shVersion bash2: Als Sicherheitsmaßnahme bashgibt 2 die Berechtigungen beim Start auf. (Debian verwendet eine andere Shell, dash(1), die dies nicht tut, wenn sie als aufgerufen wird sh.)

Es stellte sich heraus, dass das Handbuch nicht auf dem neuesten Stand ist. Heutzutagedashbenimmt sich wiebash. Ehrlich gesagt, ich weiß nicht, welche Shell Ihr Betriebssystem verwendet sh(Sie haben markiert, Ubuntu verwendet dash; aber kaliin Ihrer Frage wird möglicherweise Kali vorgeschlagen, ich bin mir nicht sicher, was Kali verwendet). Erkundigen Sie sich bei ls -l /bin/sh, es ist wahrscheinlich dash. Unabhängig davon, was es ist, werden höchstwahrscheinlich Berechtigungen gelöscht und dies ist der Grund für Permission deniedIhre Beobachtung.

Selbst wenn Sie shdie Berechtigungen nicht aufgeben würden, system()wäre das keine gute Idee. Das bereits verlinkte Handbuch rät ausdrücklich davon ab:

Verwenden Sie es nicht system()von einem privilegierten Programm aus (einem Programm zum Festlegen der Benutzer-ID oder Gruppen-ID oder einem Programm mit Befugnissen), da seltsame Werte für einige Umgebungsvariablen verwendet werden könnten, um die Systemintegrität zu untergraben.

verwandte Informationen