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.