Wurzelschale versehentlich geändert. Wie kann ich es wieder in eine gültige Shell ändern?

19

Ich bin fälschlicherweise eingetreten

chsh -s /usr/bin 

anstatt

chsh -s /bin/bash 

und jetzt kann ich mich nicht bei einer root-shell anmelden, wie starte ich eine bash-shell manuell als root?

ChiseledAbs
quelle
in welchem ​​kontext hast du das gemacht In einem aktuellen Terminal für die Benutzer Standard-Shell?
jgr208
Haben Sie keine Benutzer in der Sudo-Gruppe?
Rui F Ribeiro
3
tut sudo vipwArbeit?
Rui F Ribeiro
1
@RuiFRibeiro Ja, danke, ich wusste nicht, dass ich die Standard-Root-Shell in dieser Datei ändern konnte
ChiseledAbs
1
In diesem Fall nicht erforderlich. Wenn Sie jedoch versehentlich eine Root-Katastrophe verursacht haben, können Sie den Computer normalerweise in den Einzelbenutzermodus versetzen, das Problem beheben und dann in den Mehrbenutzermodus zurückkehren.
Boardrider

Antworten:

29

Obwohl root keinen Zugriff hat, kann ein Benutzer in der sudo-Gruppe weiterhin privilegierte Befehle ausführen - es scheint, dass der Fehler nicht in sudo, sondern an einer anderen Stelle in der sudo-Gruppe auftritt sudo chsh Befehl vorliegt (z. B. chsh error).

Als solches arbeitet Ihr Sudo anscheinend.

Die passwd-Datei kann bearbeitet werden mit:

sudo vipw

Und die Root-Shell wurde manuell geändert.

(erste Zeile von /etc/passwdnormalerweise)

root:x:0:0:root:/root:/bin/bash

Von Mann vipw

Mit den Befehlen vipw und vigr werden die Dateien / etc / passwd bzw. / etc / group bearbeitet. Mit dem Flag -s bearbeiten sie die Schattenversionen dieser Dateien / etc / shadow bzw. / etc / gshadow. Die Programme setzen die entsprechenden Sperren, um eine Beschädigung der Dateien zu verhindern.

Rui F Ribeiro
quelle
3
Ich wusste nie vipwund vigrdanke! Ich habe immer verwendetsudo vim /etc/passwd
Katze
3
Sie könnten auch an visudo sudo.ws/man/1.8.15/visudo.man.html interessiert sein , @tac
Rui F Ribeiro
3
Oder sudo -eführt diese Sperrbearbeitungsfunktion für jede Bearbeitung aus.
Kojiro
16

Eine andere Möglichkeit, vorausgesetzt Sie haben Zugriff auf ein anderes Konto, besteht darin, die Standard-Shell manuell zu überschreiben, indem Sie Folgendes verwenden su --shell=/bin/bash:

-s, --shell = SHELL führe SHELL
aus, wenn / etc / shells dies zulässt

Der Hauptvorteil besteht darin, dass nur Zugriff auf ein anderes Konto erforderlich ist, nicht auf ein anderes privilegiertes Konto .

Xiong Chiamiov
quelle
8

Aus Sicherheitsgründen werden Anmeldungen, ob in Textform oder grafisch, und Dienstprogramme wie suundsudo , mit denen Sie Befehle als ein anderer Benutzer laufen alle diejenigen Befehl durch das Ziel des Benutzers Shell auszuführen. Wenn die Shell des Zielbenutzers nicht funktionsfähig ist, haben Sie die Ergebnisse gesehen :-(

Sofern Sie nicht zufällig eine noch funktionsfähige Root-Shell haben, die irgendwo ausgeführt wird, oder so etwas wie eine setuid-root-Binärdatei oder etwas, mit dem Sie dies umgehen können, ist ein Neustart und eine Behebung des Problems mithilfe eines Rettungssystems oder eines Live-Images wahrscheinlich die beste Wahl.

Booten Sie das Rettungssystem, hängen Sie das Root-Dateisystem Ihres realen Systems an eine beliebige Stelle /mnt/foound bearbeiten Sie es /mnt/foo/etc/passwd, um die Shell zu reparieren. Speichern, aushängen und fertig.

Celada
quelle
Neugierig, was passiert, wenn Sie dies tun und die Datei / etc / passwd in einem Hash statt in einfachem Text vorliegt?
jgr208
1
/etc/passwdist nicht Klartext? Ich habe das seit mindestens einem Jahrzehnt nicht mehr gesehen. Ist das auf manchen Systemen noch so? Wie auch immer, chroot /mnt/foo chsh -s /bin/bashkönnte ich den Trick in diesem Fall tun?
Celada
Ich hatte nie das beschriebene Problem, aber ich arbeite mit gesperrten Systemen, die / etc / passwd nicht im Klartext benötigen, um Hacker und solche, die das System gefährden, noch mehr zu vermeiden, wenn sie Zugriff erhalten. Hmm, das könnte funktionieren, sagen wir einfach, ich hoffe, ich muss nie versuchen zu sehen, ob es tatsächlich funktioniert.
jgr208
Ich konnte / etc / passwd mit sudo von einem Benutzerkonto aus bearbeiten. Ich wusste nicht, dass die Shell in dieser Datei definiert ist, danke
ChiseledAbs
@ChiseledAbs oh, du warst? Schön für Sie, dass Sie Ihr Problem gelöst haben. Ich hätte nicht gedacht, dass es dich lassen würde.
Celada
6

Fügen Sie init=/bin/bashIhrer Kernel-Befehlszeile hinzu (wenn Sie mit grub booten, drücken Sie e, um den Boot-Eintrag zu bearbeiten), und Sie haben eine Bash-Shell, die als root ausgeführt wird, ohne auch nur ein Passwort eingeben zu müssen. Ihr Root-Dateisystem wird jedoch wahrscheinlich weiterhin schreibgeschützt bereitgestellt. Sie müssen es also zuerst erneut bereitstellen, bevor Sie die Shell wieder mit ändern können chsh.

Psusi
quelle
4

sudo usermod -s /bin/bash jdoe

ändert die Schale von jdoe zu bash. Sie können dann sudo egrep jdoe /etc/passwdüberprüfen.

user208145
quelle