Warum wird Sudo Bash benötigt?

3

Ich habe den folgenden Code gelesen:

$ sudo bash
# cd /home/
# ./gitpull.sh

Warum brauche ich die erste Zeile, was genau macht sie? Was wäre, wenn ich es einfach tun $ sudowürde $ sudo bash?

David542
quelle

Antworten:

7

Es startet eine Bash-Shell als rootLevel-Benutzer. Sie benötigen es, weil normale Benutzer normalerweise nicht darauf zugreifen können/home/

Die Gefahr besteht darin, dass Sie sich in einer Root-Shell befinden - Sie können Ihre Maschine ziemlich leicht durcheinander bringen.

hvgotcodes
quelle
Das Ausführen cdin einer Subshell (z. B. über sudo) ist keine produktive Operation. Das Verzeichnis für die aufrufende Shell wird nicht geändert.
FatalError
3

Du würdest viel besser dran sein:

$ sudo sh -c 'cd /home; ./gitpull.sh'

Weil die als root aufgerufenen Befehle protokolliert werden. Das Aufrufen einer Shell direkt über sudo vermeidet alle Sicherheitsvorteile von sudo und sollte vermieden werden.

William Pursell
quelle
2

Das berüchtigte Sudo ist eine Art Akronym für Superuser Do.

Es macht einen normalen Benutzer für kurze Zeit zum Superuser.

In Ihrem Befehl sudo bash sagen Sie effektiv Superuser do -> eine Bourne-Shell (bash), die einen angemeldeten Root-Benutzer in der Shell öffnet.

Wenn Sie nur sudo ausführen, würde das Betriebssystem nicht wissen, was zu tun ist. Auf sudo folgt also im Allgemeinen ein Unix-Befehl.

nisdis
quelle
0

sudoErmöglicht Benutzern das Ausführen von Programmen mit den Sicherheitsberechtigungen eines anderen Benutzers (normalerweise Superuser oder Root).
bashstartet eine neue Bash-Shell.
So sudo bashbeginnt einen neu Bash - Shell mit der Sicherheitsberechtigung von Root - Benutzer.

suzanshakya
quelle
0

sudo <shell>Verrät, wenn es funktioniert, eine schlechte Installation von sudo und eine potenzielle Sicherheitslücke.

sudosollte nicht so konfiguriert werden, dass beliebige Befehle wie Shell möglich sind; Der Zweck von sudoist, authentifizierten Benutzern ohne Rootberechtigung zu ermöglichen, bestimmte Befehle als Root auszuführen, ohne das Rootkennwort zu kennen.

Wenn dies sudo basheinem Benutzer gestattet ist, ist dieser Benutzer lediglich aufgrund der Kenntnis seines eigenen Passworts root.

Wenn ein Angreifer das Passwort eines der Konten erhält, die dazu in der Lage sind sudo bash, hat der Angreifer root.

Der richtige Weg, um das Äquivalent von sudo bash(eine Root-Shell zu erhalten), ist su, gefolgt von der Angabe des Root-Passworts, nicht Ihres eigenen.

Kaz
quelle
Ich verstehe es nicht. Welchen Schaden könnten Sie möglicherweise damit anrichten sudo bash(oder sudo suwas auch immer), den Sie nicht anstellen könnten sudo evil-command?
Dennis
sudoErmöglicht nur das Ausführen von Dingen, die in der sudoersDatei angegeben sind. Es bietet eine sehr fein abgestimmte Steuerung, da Sie nur den Programmen Zugriff gewähren können, auf die sie Zugriff haben sollen. Wenn Sie dies zulassen sudo bash, erteilen Sie eine Shell auf Stammebene. Sie können alles tun, was root an einer Shell tun kann. Es umgeht die Vorteile von sudound sudoersund macht den Benutzer im Grunde root.
Bacon Bits
Genau diese Schäden, mit denen Sie nichts anfangen können sudo benign-command. bashist eine Instanz der Klasse evil-command. Sie können Ihre sudoersDatei sorgfältig erstellen, sodass nur Befehle zulässig sind, die keinen Schaden anrichten können (oder deren potenzieller Schaden irgendwie enthalten ist) und die keine Ausweitung von Berechtigungen über den Bereich willkürlicher Aktionen zulassen.
Kaz
1
Das Zulassen von 'sudo bash' für Benutzer X ermöglicht nicht unbedingt, dass alle Benutzer in der sudoers-Datei bash ausführen.
William Pursell
An sudo bash ist nichts auszusetzen, Kumpel. Es ist eine großartige Möglichkeit, an einen Ort zu gelangen, an dem Sie Ihre Arbeit schnell erledigen und sicherstellen können, dass alle Anmeldeskripts ausgeführt werden.
David Betz
0

Ich wette, sudo bashanstatt sudoangegeben zu werden

  • Stellen Sie unbedingt sicher, dass Sie ./gitpull.shvon bash aufrufen und nicht von einer anderen Shell wie tcsh, pdkshoder einer einfachen alten sh. Ich bin mir ziemlich sicher, dass die Hashbang-Zeile des Skripts es dem Skript ermöglichen sollte, anzugeben, unter welcher Shell es ausgeführt werden soll, aber möglicherweise wurde sie aus irgendeinem Grund weggelassen, oder der Anweisungsschreiber möchte nicht, dass Sie sich darauf verlassen.
  • Ich glaube, wenn Sie bashohne andere Argumente beginnen, verhält es sich nicht wie eine "Login-Shell", und vielleicht hängt das Skript davon ab.
  • eine Gewohnheit der Person, die die Anweisungen geschrieben hat (möglicherweise arbeitet sie in einer Umgebung mit mehreren Schalen).
  • Vielleicht ist der Anleitungsschreiber nicht sehr geschickt oder hat schlechte Gewohnheiten aus anderen Umgebungen.

Auch @nisdis ist richtig. "Normal" sudodruckt nur Nutzungsinformationen aus. Aber warum nicht su...

LawrenceC
quelle