Wie funktionieren echte und effektive Benutzer-IDs?

13

Wenn ein normaler Benutzer Änderungen an der passwd-Datei vornehmen möchte, erhält der Benutzer von setuid den effektiven Benutzerzugriff. Benutzer wird vorübergehend root und kann passwd bearbeiten.

Allerdings können Sie nur Ihr Passwort richtig bearbeiten, und nicht alle anderen? Ihr effektiver Benutzerzugriff ist jedoch root. Wie kommt es, dass Sie andere Passwörter als Ihre nicht ändern dürfen?

Wenn Sie ein Programm mit setuid ausführen, was bedeutet es dann eigentlich, wenn der effektive Benutzer root ist, aber die tatsächliche Benutzer-ID immer noch Ihr Name ist?

Starcorn
quelle

Antworten:

12

Sie können keine anderen Passwörter ändern, da das Programm dies nicht zulässt. Das Programm verfügt über Systemberechtigungen zum Ändern von Kennwörtern, da es als ausgeführt rootwird. Das Programm wurde jedoch speziell dafür entwickelt, dem Benutzer keine Möglichkeit zu geben, diese Berechtigungen zu verwenden.

Es ist nicht ganz so, dass der Benutzer vorübergehend root wird, sondern dass das vertrauenswürdige Programm mit root-Berechtigungen ausgeführt wird. Es ist klar, dass nur Programme, die speziell darauf ausgelegt sind, Benutzer darauf zu beschränken, nur das zu tun, was sie tun dürfen, sicher als setuid festgelegt werden können.

David Schwartz
quelle
Wenn ich also eine Shell öffne, die die UID auf 0 setzt (mit setreuid), ist die effektive UID root, aber die echte UID bin immer noch ich. Wenn ich nicht glaube, dass in der Shell speziell etwas eingebaut ist, das mich daran hindert, kann ich dann auf das gesamte System zugreifen?
Starcorn
Ich frage mich im Zusammenhang mit der Stack-Smashing-Attack-Technik. Wo böswillige Hacker eine Shell mit Superuser-Level eröffnen.
Sternenmais
@starcron: Ja. Tatsächlich werden mögliche Angriffe demonstriert, indem gezeigt wird, wie mit diesem Angriff eine Setuid-Root-Shell erstellt wird.
David Schwartz
2

Sie dürfen nur Ihr Passwort ändern, obwohl Sie eine gültige Benutzer-ID von root haben, da zum Zeitpunkt der Passwortänderung die tatsächliche Benutzer-ID und nicht die gültige Benutzer-ID überprüft wird. Sie können nur die effektive Benutzer-ID und nicht die tatsächliche Benutzer-ID ändern.
Nur der Root-Benutzer kann die tatsächliche Benutzer-ID ändern, um das Programm als nicht privilegierter Benutzer auszuführen. Die tatsächliche Benutzer-ID kann nicht geändert werden, da sie zum Zeitpunkt des Sitzungsstarts festgelegt wurde.
Aus diesem Grund kann nur Ihr Passwort geändert werden, da die tatsächliche Benutzer-ID nicht geändert wird (da es immer noch Ihre ist, nicht Ihre Root-ID).

Mayank
quelle
0

Ein früher Hack in Unix bestand darin, eine symbolische Verknüpfung zu einem setuid-Shell-Skript herzustellen und die Verknüpfung aufzurufen -i . Dies hat zur Folge, dass das Skript so aufgerufen wird, sh -idass anstelle des -ibeabsichtigten Ausführens des aufgerufenen Skripts eine interaktive Shell gestartet wird, die dann die vollen Berechtigungen bietet. Eine effektive Benutzer-ID kann verwendet werden, um die passwdDatei für einen beliebigen Benutzer oder Root selbst zu ändern . Die beste Möglichkeit, sich dagegen zu schützen, besteht darin, SELinux zu verwenden, um zu verhindern, dass vertrauenswürdige Skripts oder Programme außerhalb des Bereichs geändert werden, in dem SELinux die Ausführung zulässt.

Eine andere Technik besteht darin, ein unveränderliches Bit für wichtige Dateien zu haben, die nicht einmal vom Root-Benutzer geändert werden können (außer im Einzelbenutzermodus).

Als Root können Sie Benutzer einladen, sich ohne Kennwort an Ihrem System anzumelden und als Benutzer zu erscheinen, aber normale privilegierte Prozesse versuchen sehr, dies zu verhindern.

Wenn Sie Netzwerk-Dateisysteme verwenden, wird der Root-Benutzer anstelle von root als niemand in diesem Dateibereich behandelt, sodass nicht vertrauenswürdige Computer einem vertrauenswürdigen Netzwerk wie einem Universitätscampus beitreten können.

jrrk
quelle
0

Sie dürfen nur Ihr Passwort ändern, da das Set-Password-Programm so programmiert ist, dass es nur Passwörter ändert, obwohl es die Macht hat, irgendetwas zu tun. Es wird die tatsächliche Benutzer-ID überprüft, um zu entscheiden, welches Kennwort geändert werden soll.

Da Sie Ihre tatsächliche Benutzer-ID nicht ändern können, selbst wenn Sie ein Set-UID-Programm aufrufen, kann das Programm damit die Sicherheit implementieren. Das Betriebssystem übergibt die Sicherheit an das eingestellte UID-Root-Programm.

Hinweis: Das Set-UID-Root-Programm kann auch die tatsächliche Benutzer-ID ändern (dies ist jedoch in diesem Anwendungsfall nicht von Nutzen).

Warnung: Set UID Root gilt als schädlich (auch viel weniger als ideal). Wir sollten heutzutage Funktionen nutzen (siehe Was sind die verschiedenen Möglichkeiten, Dateiberechtigungen usw. unter gnu / linux und http://man7.org/linux/man-pages/man7/capabilities.7.html festzulegen ).

Strg-Alt-Delor
quelle