Ubuntu: Der Root-Benutzer wurde versehentlich in eine nicht vorhandene Shell geändert

8

Ich habe versucht, die Shell meines Benutzers zu ändern, habe aber "sudo chsh" verwendet und die Root-Shell in "bash" anstelle von "/ bin / bash" geändert. Wenn ich jetzt versuche, es zu ändern, erhalte ich "chsh: PAM-Authentifizierung fehlgeschlagen" und es scheint, dass andere Dinge auch nicht funktionieren.

~$ sudo su
Cannot execute bash: No such file or directory

Dies geschieht auch im Wiederherstellungsmodus. Was mache ich, um es in etwas Verwendbares zu ändern?

Endolith
quelle

Antworten:

16

Wenn Sie sich mit Ihrem regulären Benutzer anmelden können, ändern Sie einfach die Shell des Root-Benutzers direkt:

sudo gedit /etc/passwd

Suchen Sie die Zeile für Ihren Root-Benutzer, normalerweise die erste, und ändern Sie den letzten Teil von

...:bash

zu

...:/bin/bash

Und du solltest gut gehen.

(NB: Ersetzen Sie gedit durch einen beliebigen Editor.)

Bjarke Freund-Hansen
quelle
6

Verwenden Sie die Ubuntu-Installationsdiskette, um die Live-Sitzung zu starten.

Hängen Sie die Root-Partition ('/') auf der Festplatte ein (stellen Sie sicher, dass sie beschreibbar ist).

Bearbeiten Sie '[HD-Einhängepunkt] / etc / passwd' (z. B. / media / sda1 / etc / passwd),

root sollte die erste Zeile sein, korrigieren Sie einfach die Login-Shell, die der letzte Eintrag in der Zeile sein wird.

Hängen Sie die Festplatte aus. CD entfernen. Starten Sie neu

JRT
quelle
3
Dies ist "wenn Sie sich nicht als Ihr normaler Benutzer anmelden können"
Broam
2

Ich habe vor Ewigkeiten damit gespielt:

cd /bin ; sudo su

Was passiert, ist, dass ohne ein / vor der Shell die Shell als relativer Pfad interpretiert wird. Oh gee, wenn wir in / bin sind, wird es korrekt aufgelöst.

Wenn Sie wirklich stecken bleiben; Die Rettungs-CD ist weit weg. Mit der Boot-Option init = / bin / sh erhalten Sie sofort eine Root-Shell. Der Cursor blinkt nur ohne Eingabeaufforderung, aber Sie haben eine Root-Shell. Tun

set -i
# mount / -o remmount,rw
# vi /etc/passwd
<fix it>
# mount / -o remount,ro
# reboot -f
Joshua
quelle
1

Beachten Sie, dass Sie als kurzfristige Problemumgehung den Schalter "-s" im Befehl su verwenden können, um eine Shell anzugeben. Zum Beispiel:

su -s /bin/bash

würde deine su-Sitzung mit der / bin / bash-Shell starten. Gleiches gilt für sudo su -s / bin / bash (oder für eine beliebige Shell). Die Antwort von @Bjarke Freund-Hansen ist die dauerhafte Lösung.

apokalysk
quelle
Ich habe erst gestern herausgefunden, dass dies nicht funktioniert. Wenn sich die aktuelle Shell für das Zielkonto nicht in / etc / shells befindet, ignoriert su -s, es sei denn, der Aufrufer ist bereits root.
Joshua
Haben Sie versucht, Sudo vor die Su zu stellen, wie es die ursprüngliche Frage tut?
Apokalyske