Ich kann mit "echo" nicht in /etc/shadow schreiben, aber mit "nano" schon

Ich kann mit "echo" nicht in /etc/shadow schreiben, aber mit "nano" schon

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/passwdund root2:rmeF3kdnoRw/U:0:0:root:/root:/bin/bashdas Ende der Datei kopiere, funktioniert es!

Was ist das Problem mit dem echoBefehl?

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:

  1. Weisen Sie Bash (ohne erhöhte Rechte) an, die Datei /etc/passwd zum Schreiben zu öffnen
  2. 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 stdout
    1. echoWeisen Sie sudo (das ist setuid root) an, den Befehl mit einigen Argumenten auszuführen
      1. Weisen Sie echo an (als root ausgeführt, und beachten Sie, dass dies wahrscheinlich etwas wie /usr/bin/echo sein wird, während normalerweise echoein Shell-Builtin aufgerufen wird) und erben Sie stdout von sudo), einen Text auf stdout auszugeben.
      2. Die Aufgabe ist erledigt, Echo wird beendet
    2. Die Aufgabe ist erledigt, sudo wird beendet; nichts läuft mehr als Root
  3. Bash (immer noch nicht erhöht) schließt den Dateideskriptor zu /etc/passwd (leert die Schreibwarteschlange)
  4. 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 deniedwird kein Teil der Schritte 2 oder 3 ausgeführt, einschließlich der Unterschritte von Schritt 2.

sudo nano /etc/passwdfunktioniert 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

verwandte Informationen