
Mein Ziel besteht darin, in /etc/passwd die Berechtigungen auf Root auszuweiten.
ich habe das Passwort „test1“ für den neuen Root-Benutzer generiert: openssl passwd test1
und verwende Echo, um einen neuen Eintrag in der Datei /etc/passwd anzuhängen:sudo echo "root2:rmeF3kdnoRw/U:0:0:root:/root:/bin/bash" >> /etc/passwd
Aber wenn ich diesen letzten Befehl ausführe, wird mir angezeigt, dass ich nicht die Berechtigung dazu habe:bash: /etc/passwd: Permission denied
aber wenn ich den Befehl verwende sudo nano /etc/passwd
und root2:rmeF3kdnoRw/U:0:0:root:/root:/bin/bash
das Ende der Datei kopiere, funktioniert es!
Was ist das Problem mit dem echo
Befehl?
Antwort1
Wurde bereits in den Kommentaren beantwortet, aber um es etwas zu erweitern:
sudo echo "root2:rmeF3kdnoRw/U:0:0:root:/root:/bin/bash" >> /etc/passwd
lässt sich wie folgt übersetzen:
- Weisen Sie Bash (ohne erhöhte Rechte) an, die Datei /etc/passwd zum Schreiben zu öffnen
- Weisen Sie bash (immer noch nicht erhöht) an, den Befehl mit einigen Argumenten auszuführen
sudo
, und verwenden Sie den Dateideskriptor aus Schritt 1 als stdoutecho
Weisen Sie sudo (das ist setuid root) an, den Befehl mit einigen Argumenten auszuführen- Weisen Sie echo an (als root ausgeführt, und beachten Sie, dass dies wahrscheinlich etwas wie /usr/bin/echo sein wird, während normalerweise
echo
ein Shell-Builtin aufgerufen wird) und erben Sie stdout von sudo), einen Text auf stdout auszugeben. - Die Aufgabe ist erledigt, Echo wird beendet
- Weisen Sie echo an (als root ausgeführt, und beachten Sie, dass dies wahrscheinlich etwas wie /usr/bin/echo sein wird, während normalerweise
- Die Aufgabe ist erledigt, sudo wird beendet; nichts läuft mehr als Root
- Bash (immer noch nicht erhöht) schließt den Dateideskriptor zu /etc/passwd (leert die Schreibwarteschlange)
- Bash wartet auf den nächsten Befehl
Außer natürlich, Schritt 1 schlägt fehl! Bash, das nicht über erhöhte Rechte verfügt, kann /etc/passwd nicht zum Schreiben öffnen. Daher bash: /etc/passwd: Permission denied
wird kein Teil der Schritte 2 oder 3 ausgeführt, einschließlich der Unterschritte von Schritt 2.
sudo nano /etc/passwd
funktioniert einwandfrei, da der erhöhte Prozess (Nano, der Root-Berechtigungen von Sudo erbt) derjenige ist, der die Datei zum Schreiben öffnet.
Wenn Sie hier echo verwenden möchten, müssen Sie bash selbst erhöhen. Dies kann durch den expliziten Aufruf von bash (oder einer anderen Shell) innerhalb von sudo und die anschließende Anweisung, was zu tun ist, erfolgen:
sudo bash -c 'echo "root2:rmeF3kdnoRw/U:0:0:root:/root:/bin/bash" >> /etc/passwd'
oder gleichwertig durch drei separate Befehle (von denen die letzten beiden an die erhöhte Instanz von bash übergeben werden):
sudo bash
echo "root2:rmeF3kdnoRw/U:0:0:root:/root:/bin/bash" >> /etc/passwd
exit