Erlauterung Unterschied verschiedene su und sudo Befehle

shirocko

Cadet 3rd Year
Registriert
Juni 2012
Beiträge
35
Hallo zusammen,

ich habe mal eine Verstaendnisfrage zu su und so Befehlen, was die genauen Unterschiede sind.

Was genau unterscheidet folgende Befehle?
  1. su -
  2. su - root
  3. sudo su
  4. sudo su -
  5. sudo su - root
  6. sudo bash
  7. sudo -i
Mir geht es hier darum zu verstehen, welche Befehle inhaltlich identisch sind, welche Umgebungsvariablen laden oder nicht laden und aehnliches.

Danke im Voraus,
shirocko
 
Ich frag' mich ob das nicht auch Google beantworten könnte. Oder noch besser CoPilot/ChatGPT

Hier mal was ChatGPT herausschreibt.
Weil du offenbar nicht Googeln wolltest, war ich auch zu faul, es dir zusammenzufassen:

Gern erkläre ich die Unterschiede zwischen den genannten Befehlen und welche Umgebungsvariablen jeweils geladen werden.

### Die einzelnen Befehle:

1. su -
- Wechsel zu einem anderen Benutzer (standardmäßig root) und lädt die Login-Umgebung dieses Benutzers.
- Äquivalent zu su - root.

2. su - root
- Wechsel zu root und lädt die Login-Umgebung von root.

3. sudo su
- Führt den Befehl su als Root-Benutzer aus, ohne die Login-Umgebung zu laden.
- Der Unterschied liegt darin, dass sudo verwendet wird, um temporäre Root-Rechte zu erlangen.

4. sudo su -
- Führt den Befehl su - als Root-Benutzer aus und lädt die Login-Umgebung des Root-Benutzers.

5. sudo su - root
- Führt den Befehl su - root aus und lädt die Login-Umgebung des Root-Benutzers.

6. sudo bash
- Startet eine neue Bash-Shell mit Root-Rechten, ohne die Login-Umgebung zu laden.

7. sudo -i
- Wechselt zu einem Root-Shell mit der Login-Umgebung des Root-Benutzers.
- Ähnlich wie sudo su -, lädt aber auch die benutzerspezifische Login-Umgebung.

### Zusammenfassung:

  • Mit -: Befehle wie su - und sudo su - laden die Login-Umgebung des Zielbenutzers (typischerweise root), was bedeutet, dass sie die Umgebungsvariablen aus den entsprechenden Login-Skripten (z.B. .bash_profile oder .profile) laden.
  • Ohne -: Befehle wie sudo su oder sudo bash laden diese Login-Umgebungen nicht und behalten daher viele der ursprünglichen Umgebungsvariablen bei.

Beispiele:
  • su - und su - root: Laden die vollständige Login-Umgebung von Root.
  • sudo su: Behält die aktuelle Umgebung und wechselt zu Root.
  • sudo su - und sudo su - root: Laden die vollständige Login-Umgebung von Root, aber geben vorherige Umgebungsvariablen auf.
  • sudo bash: Startet eine Root-Bash-Shell ohne Änderung der Umgebung.
  • sudo -i: Ähnlich wie sudo su -, lädt aber die gesamte benutzerspezifische Login-Umgebung.

Ich hoffe, das klärt deine Frage! Lass mich wissen, wenn du noch weitere Details benötigst.
 
  • Gefällt mir
Reaktionen: Pummeluff, |Moppel|, bytejunky und 2 andere
ChatGPT: (ohne Gewähr) :-)


Alle diese Befehle haben mit dem Wechsel zu einem anderen Benutzer, insbesondere root, zu tun. Sie unterscheiden sich jedoch in ihrer Ausführung und den resultierenden Umgebungsvariablen. Hier eine detaillierte Erklärung:

1. su -

  • Wechsel zum Benutzer root und lädt dessen vollständige Umgebung.
  • Effektiv gleichbedeutend mit su - root.
  • Die --Option sorgt dafür, dass eine neue Login-Shell gestartet wird, wodurch das komplette Profil (/etc/profile, ~/.bash_profile, ~/.bashrc) geladen wird.

2. su - root

  • Identisch zu su -, da der Standardbenutzer für su root ist.

3. sudo su

  • Führt su mit Superuser-Rechten aus.
  • Kein vollständiger Login, sondern nur ein Wechsel zum root-Benutzer.
  • Die Umgebung des ursprünglichen Benutzers bleibt teilweise erhalten.

4. sudo su -

  • Führt su - mit Superuser-Rechten aus.
  • Äquivalent zu su -, jedoch mit sudo, falls man selbst kein root-Passwort kennt oder setzen will.
  • Stellt eine saubere root-Sitzung mit einer neuen Login-Shell her.

5. sudo su - root

  • Identisch zu sudo su -, da root der Standardbenutzer für su ist.

6. sudo bash

  • Startet eine neue bash-Shell mit Root-Rechten, aber ohne Login-Shell.
  • Die Umgebung des ursprünglichen Benutzers bleibt größtenteils erhalten.

7. sudo -i

  • Äquivalent zu sudo su -.
  • Die Option -i (--login) sorgt dafür, dass eine vollständige root-Login-Sitzung mit dessen Umgebung gestartet wird.

Zusammenfassung

BefehlBenutzerwechselVollständige root-Umgebung?Login-Shell?
su -Ja (root)JaJa
su - rootJa (root)JaJa
sudo suJa (root)NeinNein
sudo su -Ja (root)JaJa
sudo su - rootJa (root)JaJa
sudo bashNein (bleibt root)NeinNein
sudo -iJa (root)JaJa

Empfehlung

  • Für eine vollständige root-Sitzung: sudo -i oder sudo su -
  • Nur kurz root-Befehle ausführen: sudo command
  • Wenn das root-Passwort nicht gesetzt ist: sudo su statt su -
Benötigst du noch eine spezifischere Erklärung zu einem der Befehle? 😊
 
  • Gefällt mir
Reaktionen: bytejunky
BAR86 schrieb:
Ich frag' mich ob das nicht auch Google beantworten könnte. Oder noch besser CoPilot/ChatGPT
Ich hingegen frage mich, warum man als Linux-Nutzer nicht die entsprechenden Manual-Seiten im Terminal aufruft:

man su
man sudo
 
  • Gefällt mir
Reaktionen: andy_m4, konkretor, redjack1000 und 8 andere
Der entscheidende Unterschied ist dass sudo entsprechend der Richtlinien in /etc/sudoers authentifiziert (i.d.R. muss dein Nutzer Mitglied der sudo/wheel Gruppe sein (je nach Distri) und du musst dein eigenes Passwort eingeben), während su die "Normale" Anmeldung ist und du entsprechend das Passwort des Zielnutzers kennen musst, du willst dich ja als dieser Nutzer anmelden. Bei vielen Distributionen hat root ein deaktiviertes Passwort und man kommt nur über sudo oder PolicyKit an root-Rechte.

su, sudo su und sudo bash sind in der Regel unbrauchbar oder gar gefährlich weil du dann in einer Shell bist die einfach nur mit der Nutzer-ID 0 läuft, was dir zwar die ganzen Rechte gibt, aber der Login wurde nicht durchgeführt und dir fehlen bei vielen Distributionen z.B. die sbin Ordner im PATH so dass viele Befehle nicht gefunden werden bzw. umständlich ausgeschrieben werden müssten.

sudo su - ist auch dämlich weil du mit dem sudo schon root wirst und dann su als root bittest, root zu werden. su aktualisiert zwar noch den Umgebungskram, aber das hätte sudo mit der richtigen Option auch gekonnt.

Sinnvolle Varianten:
  • sudo <befehl>: Einen einzelnen Befehl mit root-Rechten ausführen. Dies sollte immer bevorzugt werden. Es ist selten praktisch und nahezu niemals nötig eine Shell selbst mit root-Rechten zu betreiben. Man nutzt sudo nur wenn man weiß dass der nächste Befehl root-Rechte braucht und verstanden hat warum.
  • sudo -i: Du hast den vorherigen Punkt nicht gelesen oder bist ein Linux-Enthusiast der tief in System-Interna rumgräbt und keine Lust hat sudo vor jedem ls zu tippen.
  • su - (äquivalent zu su -l): Du willst root-Rechte haben aber das System hat kein sudo oder sudo ist kaputt oder du bist nicht Mitglied in sudo.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: sariash, shirocko, sPeziFisH und 4 andere
gimmix schrieb:
Ich hingegen frage mich, warum man als Linux-Nutzer nicht die entsprechenden Manual-Seiten im Terminal aufruft:

man su
man sudo
Wenn man andere Menschen fragt, könnte man die Vorstellung haben Antworten von Menschen zu bekommen...

..., mit Antworten, die einem eine man page oder KI nicht geben kann. Es hat hier ganze 4 Antworten gebraucht, bis es ein Mensch geschafft hat eine gute und verständliche Zusammenfassung zu schreiben. Alle 3 zuvor sind überzeugt, dass die KI oder man page besser sei...

Vielleicht war aber auch einfach die 4. KI nur besser.^^
 
  • Gefällt mir
Reaktionen: sariash und KitKat::new()
Sehr interessant.

Ich hätte auch noch ein Linux-Frage.
Ich konnte da bis jetzt keine Antwort finden.

Man findet als ab und zu in Anleitungen "./" vor einem Dateinamen.
Das scheinen mir keine ausführbaren Dateien zu sein,
In einem Ordner findet man mit ls alle enthaltenen Dateien und Ordner.
Wenn da nun eine Datei "seachest...." gelistet ist, kann man die nicht ausführen.
Wenn man aber "./" davor setzt geht das.

Sind das Skripte oder ähnliches? Wofür steht "./"?
 
DHC schrieb:
Ich hätte auch noch ein Linux-Frage.
Das ./ steht für das aktuelle Verzeichnis (current directory). In Linux und anderen UNIX-ähnlichen Betriebssystemen gibt es eine Umgebungsvariable namens PATH, die eine Liste von Verzeichnissen enthält, in denen das System nach ausführbaren Dateien sucht. Wenn du einfach den Namen einer Datei eingibst, sucht das System nur in den Verzeichnissen, die im PATH aufgelistet sind, aber nicht im aktuellen Verzeichnis, es sei denn, das aktuelle Verzeichnis ist explizit im PATH enthalten (was oft aus Sicherheitsgründen vermieden wird).

Durch das Hinzufügen von ./ vor dem Dateinamen sagst du dem System, dass es die ausführbare Datei im aktuellen Verzeichnis finden soll.

Hier sind ein paar Beispiele:

  • Datei direkt ausführen: Wenn du eine Datei namens seachest im aktuellen Verzeichnis hast und diese ausführbar ist, kannst du sie mit ./seachest ausführen. Das ./ weist das System an, die Datei seachest im aktuellen Verzeichnis zu suchen.
  • Ohne ./: Wenn du versuchst, die Datei seachest ohne ./ auszuführen, wird das System nur in den Verzeichnissen suchen, die im PATH enthalten sind, und sie möglicherweise nicht finden.
Es muss sich nicht unbedingt um Skripte handeln, sondern es können auch kompilierten Programme oder andere ausführbare Dateien sein. Der Schlüssel ist, dass das ./ lediglich das aktuelle Verzeichnis spezifiziert, unabhängig vom Dateityp.
 
  • Gefällt mir
Reaktionen: Marco01_809
Ok. Danke für die Erklärung.

Ich bin nicht so Linux-bewandert.
Aber man kommt halt immer wieder in Kontakt damit. Z. B. NAS, etc.
Manche Hersteller meinen, sie müssten einige nützliche Funktionen aus der GUI entfernen.
Nun muss man halt alles über Terminal (SSH) machen.
Warum einfach, wenn es auch kompliziert geht.
Man hat ja sonst nichts zu tun.
 
@oicfar
Aktuell komme ich klar damit.
Ob ich das noch in einem Jahr weiß. ... wer weiß.
Es ist, wie es ist. Kann man nichts machen.
 
Vielen Dank an alle, aber besonders an Marco01_809
Das ist es genau was ich wissen wollte. Simple Auflistungen à la ChatGPT bringen einen ersten Überblick, aber besonders der genaue Hintergrund mit der /etc/studiere und der wheel Gruppe und den best practices macht die Information deutlich wertvoller.
Vielen Dank
 
  • Gefällt mir
Reaktionen: rarp
  • Gefällt mir
Reaktionen: BAR86
Zurück
Oben