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?

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.)


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


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

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.