Woher weiß das Betriebssystem, dass ein Befehl sudo benötigt?

16
  1. Wenn Sie eine ausführbare Datei ausführen, verweigert das Betriebssystem manchmal Ihre Berechtigung. Zum Beispiel muss ausgeführt werden, make installwobei das Präfix ein Systempfad ist sudo, während für das Präfix kein Nicht-Systempfad angefordert wird sudo. Wie entscheidet das Betriebssystem, dass das Ausführen einer ausführbaren Datei mehr Berechtigungen erfordert als ein Benutzer, noch bevor das Programm etwas unternimmt?
  2. Manchmal wird das Ausführen eines Programms nicht verweigert, aber das Programm kann mehr, wenn es mit ausgeführt wird sudo. Wenn Sie zum Beispiel duein Systemverzeichnis ausführen, kann nur sudodieses auf ein bestimmtes Verzeichnis zugreifen. Warum verweigert das Betriebssystem nicht die Berechtigung zum Ausführen eines solchen Programms, oder es wird eine freundlichere Benachrichtigung mit mehr Berechtigungen bevorzugt, bevor das Programm ausgeführt werden kann?
  3. Stimmt es, dass wann immer es sudofunktioniert, suauch funktioniert und wann immer es sufunktioniert, sudoauch funktioniert? oder mit su, kann ein Benutzer mehr als mit sudo? Wie entscheidet das Betriebssystem, wann es sudofunktioniert und wann sues benötigt wird?
Tim
quelle
Wurde diese Frage für Sie beantwortet oder möchten Sie weitere Informationen?
Strg-Alt-Delor

Antworten:

14
  1. Manchmal ist die Meldung "Berechtigung verweigert" auf Dateisystemberechtigungen zurückzuführen, die Ihnen beispielsweise den Schreibzugriff verweigern. Die ausführbare Datei / das Tool überprüft einfach, ob das Dateisystem Ihnen genügend Berechtigungen für die auszuführenden Aktionen gewährt, und gibt einen Fehler aus, wenn dies vom Dateisystem verweigert wird. In anderen Fällen überprüft das Tool selbst Ihre Benutzer-ID, bevor Sie sie weiter verwenden können.
  2. Wenn Sie ein Programm mit ausführen sudo, wird es unter einem anderen Benutzernamen ausgeführt. Wenn dieser Benutzer "in der Lage ist, mehr Dinge zu tun" als Ihr Benutzer und die sudoKonfiguration es Ihnen ermöglicht, diese Dinge im Namen des anderen Benutzers zu tun, können Sie mit "Ja" sudomehr Dinge tun. Dies ist jedoch nicht erforderlich. Wenn Sie nur sudoam Anfang der Befehlszeile weitermachen, werden Sie tatsächlich sudoals root, so dass Sie in der Regel mehr als nur Sterbliche tun können.
  3. Ganz bestimmt nicht. Zur Verwendung müssen sudoSie Ihr eigenes Benutzerkennwort angeben, und dann dürfen Sie einige Dinge im Namen des Zielbenutzers tun. Für die Verwendung subenötigen Sie das Kennwort des Zielbenutzers. Wenn Sie über dieses Kennwort verfügen, werden Sie für das System zum Zielbenutzer und können alle Aktionen ausführen, die dieser Benutzer ausführen kann.

Siehe auch

Joseph R.
quelle
Vielen Dank. Ist "Dateisystemberechtigungen, die Ihnen den Schreibzugriff verweigern" = "Im Zugriffsmodus der Datei ist für den Benutzer kein Ausführungsbit gesetzt, das von chmod gesetzt werden kann"?
Tim
1
@Tim Eigentlich ist es = "Zugriffsmodus der Datei hat kein Schreibbit für den Benutzer gesetzt". Und ja, dies kann natürlich behoben werden, indem chmodSie entweder der Eigentümer der Datei sind oder root.
Joseph R.
Hängt es vollständig und ausschließlich davon ab, ob das Ausführungsbit für den Benutzer nicht gesetzt ist, ob sudo benötigt wird? Siehe unix.stackexchange.com/q/147052/674
Tim,
@Tim Natürlich benötigen Sie das Ausführungsbit, um die ausführbare Datei überhaupt ausführen zu können.
Joseph R.
1
@ JosephR. Nicht offensichtlich. chmod 400 hello && /lib64/ld-linux-x86-64.so.2 ./helloproduziert eine schöne "Hallo, Welt!" Ausgabe.
doneal24
24

Für die beschriebenen Zwecke entscheidet das Betriebssystem nicht, ob Sie sudo benötigen, um das Programm zum ersten Mal auszuführen . Stattdessen /usr/binverhindert das Betriebssystem den Dateizugriff , nachdem das Programm gestartet wurde und versucht hat, etwas zu tun, das der aktuelle Benutzer nicht zulässt (z. B. das Schreiben einer Datei , um einen neuen Befehl zu installieren). Die Maßnahme, um diese Bedingung zu erfüllen, liegt im Ermessen des Programms. makestoppt die Ausführung, fährt jedoch dunach dem Drucken einer Nachricht mit der nächsten Datei bzw. dem nächsten Verzeichnis fort.

Mit den Befehlen suund sudokönnen Sie ein Programm mit Root-Rechten auf zwei verschiedene Arten ausführen. Abhängig von den verwendeten Optionen können sie sich in geringfügigen Details wie dem Inhalt der Umgebung beim Starten des neuen Programms unterscheiden. Das Betriebssystem muss nicht entscheiden, wann das eine oder andere funktionieren könnte.

Greg Hewgill
quelle
6

suund sudosind privilegierte Programme. suÄndert (nach erfolgreicher Authentifizierung) die tatsächliche und effektive Benutzer- und Gruppen-ID in die des Benutzers, den Sie verwenden su. So suist ähnlich wie login. Beachten Sie, dass Sie sudamit zu jedem Benutzer wechseln können, nicht nur zu root. sudoÄndert auch die realen und effektiven Benutzer- und Gruppen-IDs. Bis zu diesem Punkt suund sudosind ähnlich (aber nicht verwandt), darüber hinaus sind sie sehr unterschiedlich.

Mit sumüssen Sie das Kennwort des Ziels kennen, und sobald Sie sich authentifiziert haben, können Sie als dieser Benutzer alles tun, was Sie wollen. Die Verwendung sukann durch Einstellung eingeschränkt sein SU_WHEEL_ONLYin /etc/login.defs. Wenn es festgelegt ist, dürfen nur Benutzer in der Gruppe wheeles verwenden su, andernfalls ist es nicht eingeschränkt. Ansonsten suist alles oder nichts.

sudoist diesbezüglich völlig anders. Mit können sudoSie recht komplexe Richtlinien definieren, die festlegen, /etc/sudoerswas der Sudoer (der anrufende Benutzer sudo) tun darf. Beispielsweise können Sie Richtlinien definieren, in denen bestimmte Benutzer möglicherweise nur bestimmte Programme mit bestimmten Berechtigungen ausführen, während andere Benutzer möglicherweise andere Programme mit anderen Berechtigungen ausführen.

Eines der auffälligsten Merkmale von sudoist, dass Sie es so konfigurieren können, dass sich ein Benutzer mit seinem eigenen Passwort (anstelle des des Ziels) authentifizieren muss . Daher sudoist es unter Administratoren sehr beliebt, da es Benutzern ermöglicht, nur definierte privilegierte Vorgänge auszuführen, ohne das Superuser-Kennwort zu verteilen, und Sie erhalten ein gewisses Maß an Verantwortlichkeit.

Gegenmodus
quelle
2

Der Zugriff wird vom Benutzer bestimmt, der die Anwendung ausführt, und sudoführt die Anwendungen als anderer Benutzer aus.

Vollversion:

Woher weiß das Betriebssystem, dass ein Befehl sudo benötigt?

Es weiß es nicht. UNIX verwaltet Berechtigungen nicht auf Anwendungsebene, sondern auf Dateisystemebene: Benutzern werden Berechtigungen für den Zugriff auf bestimmte Dateien erteilt. Die Anwendungen werden dann im Auftrag des Benutzers ausgeführt. Jedem ausgeführten Prozess ist ein Benutzer zugeordnet. Mit diesem Benutzer werden die Berechtigungen für diese Anwendung festgelegt. Sudo führt Anwendungen im Auftrag eines anderen Benutzers aus (mit Berechtigungen, die diesem anderen Benutzer zugeordnet sind), nämlich rootdes Superbenutzers.

Wie für Ihre Beispiele:

  1. Wenn der Benutzer Schreibzugriff auf ein bestimmtes Verzeichnis hat, kann er make installin dieses Verzeichnis zugreifen . Andernfalls müssen sie es roottun - mit sudo.

  2. Wenn Sie nicht auf Dateien in einem Verzeichnis zugreifen können, können Sie auch nicht darauf zugreifen, wenn Sie dufür ausgeführt werden. rootkann auf praktisch jede Datei zugreifen, kann also sudo du( duim Auftrag von root) auch auf sie zugreifen.

Stimmt es, dass wenn sudo funktioniert, auch su funktioniert und wenn su funktioniert, auch sudo funktioniert?

Ja und nein. Ja, wenn das Programm tatsächlich ausgeführt wird, sollte es sich unter beiden sudound gleich verhalten su. Jedoch sudoermöglicht eine feinkörnige Kontrolle über liefert , wer was in gespeicherten Satz von Regeln ausführen kann /etc/sudoersDatei. suist einfacher: Wenn Sie das Kennwort des Zielbenutzers kennen, können Sie Programme für diesen Benutzer ausführen.

Letzte Anmerkung: Wie die Anwendung die Verweigerung des Zugriffs behandelt (ob sie den Benutzer abbricht oder ignoriert oder warnt), hängt von der Anwendung ab.

el.pescado
quelle
1

Noch hat niemand ein ✓, also habe ich eine Antwort zusammengestellt, die alles enthält, was mir einfällt.

1 Wenn Sie eine ausführbare Datei ausführen, verweigert das Betriebssystem manchmal Ihre Berechtigung. Zum Beispiel benötigt das Ausführen von make install mit dem Präfix als Systempfad sudo, während mit dem Präfix als Nicht-Systempfad nicht nach sudo gefragt wird. Wie entscheidet das Betriebssystem, dass das Ausführen einer ausführbaren Datei mehr Berechtigungen erfordert als ein Benutzer, noch bevor das Programm etwas unternimmt?

Nein, es wird nicht ausgeführt, wenn eine ausführbare Datei gestartet wird. Dies geschieht, wenn die ausführbare Datei versucht, etwas zu tun.

Die Betriebssysteme prüfen die Dateisystemberechtigungen und -fähigkeiten (diese sind nicht durch Dateisystemberechtigungen abgedeckt und umfassen das Reduzieren von Nizza-Level, Mknode, einige Netzwerk-Low-Level-Sachen, das Beenden der Prozesse anderer, Neustarten, Einstellen der Zeit usw.). Wenn Sie nicht über die Berechtigungen verfügen, können Sie dies nicht tun. Root verfügt über alle Funktionen, einschließlich CAP_DAC_OVERRIDE (Dateiberechtigung ignorieren).

2 Manchmal wird dem Ausführen eines Programms die Berechtigung nicht verweigert, aber das Programm kann mehr, wenn es mit sudo ausgeführt wird. Wenn du beispielsweise in einem Systemverzeichnis ausgeführt wird, kann nur mit sudo auf ein bestimmtes Verzeichnis zugegriffen werden. Warum verweigert das Betriebssystem die Ausführung eines solchen Programms nicht, oder es wird eine freundlichere Benachrichtigung mit mehr Berechtigungen bevorzugt, bevor das Programm ausgeführt werden kann?

Das Betriebssystem kann nicht wissen, was das Programm tun wird. Es liegt also am Programm, die Berechtigungen vor dem Start zu überprüfen und zu entscheiden, was zu tun ist. Das muss es aber nicht.

Hinweis: Auf Android gibt es ein Manifest, in dem die Anwendung deklariert, welche Berechtigungen sie verwenden darf. Das Betriebssystem beendet jede Anwendung, die versucht, ein nicht deklariertes Privileg zu verwenden, und das Betriebssystem garantiert nicht immer, dass ein Privileg anerkannt werden kann. zB Netzwerkzugriff ist möglicherweise nicht verfügbar.

2 Stimmt es, dass wenn sudo funktioniert, auch su funktioniert und wenn su funktioniert, auch sudo funktioniert? oder mit su kann ein benutzer mehr als mit sudo? Wie entscheidet das Betriebssystem, wann sudo funktioniert und wann su benötigt wird?

sudound sumach ungefähr das gleiche. Einige Unterschiede bestehen in der Handhabung von Umgebungsvariablen und in der Vermeidung solcher Sicherheitsprobleme. Sie sind jedoch beide Tools, mit denen Sie ein anderer Benutzer werden können, und beide verfügen über einen Standardbenutzer von root.

su Wenn es sich um das ursprüngliche Tool handelt, müssen Sie das Kennwort des Benutzers / der Gruppe eingeben, zu dem / der Sie wechseln.

sudoist neuer und erfordert standardmäßig die Eingabe eines eigenen Passworts, kann jedoch so konfiguriert werden, dass das Passwort des Benutzers / der Gruppe, zu der / der Sie wechseln, akzeptiert wird, oder dass überhaupt kein Passwort eingegeben wird. Es ermöglicht auch eine Vielzahl von Konfigurationen, mit welchen Befehlen, für wen und wie es sich mit diesem Programm für diesen Benutzer auf diesem Computer authentifiziert. Es ist auch sudoeditdieser Teil ist sudound verwendet werden kann , die Bearbeitung als ein anderen Benutzer zu ermöglichen und die Frage der Sicherheit von Unter Beschuss aus einem Editor (Aufruf exec aus dem Editor einen beliebigen Prozess mit erweiterten Rechten ausführen) zu vermeiden.

Strg-Alt-Delor
quelle