Antworten:
Es startet eine Bash-Shell als root
Level-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.
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.
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.
sudo
Ermöglicht Benutzern das Ausführen von Programmen mit den Sicherheitsberechtigungen eines anderen Benutzers (normalerweise Superuser oder Root).
bash
startet eine neue Bash-Shell.
So sudo bash
beginnt einen neu Bash - Shell mit der Sicherheitsberechtigung von Root - Benutzer.
sudo <shell>
Verrät, wenn es funktioniert, eine schlechte Installation von sudo und eine potenzielle Sicherheitslücke.
sudo
sollte nicht so konfiguriert werden, dass beliebige Befehle wie Shell möglich sind; Der Zweck von sudo
ist, authentifizierten Benutzern ohne Rootberechtigung zu ermöglichen, bestimmte Befehle als Root auszuführen, ohne das Rootkennwort zu kennen.
Wenn dies sudo bash
einem 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.
sudo bash
(oder sudo su
was auch immer), den Sie nicht anstellen könnten sudo evil-command
?
sudo
Ermöglicht nur das Ausführen von Dingen, die in der sudoers
Datei 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 sudo
und sudoers
und macht den Benutzer im Grunde root.
sudo benign-command
. bash
ist eine Instanz der Klasse evil-command
. Sie können Ihre sudoers
Datei 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.
Ich wette, sudo bash
anstatt sudo
angegeben zu werden
./gitpull.sh
von bash aufrufen und nicht von einer anderen Shell wie tcsh
, pdksh
oder 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.bash
ohne andere Argumente beginnen, verhält es sich nicht wie eine "Login-Shell", und vielleicht hängt das Skript davon ab.Auch @nisdis ist richtig. "Normal" sudo
druckt nur Nutzungsinformationen aus. Aber warum nicht su
...
cd
in einer Subshell (z. B. übersudo
) ist keine produktive Operation. Das Verzeichnis für die aufrufende Shell wird nicht geändert.