Angenommen, ich habe etwas Dummes getan, beispielsweise 'chsh', um die Shell des Root-Benutzers in einen ungültigen Dateipfad zu ändern. Zukünftige Anmeldungen beim Root-Konto schlagen abrupt fehl, wenn / bin / was auch immer nicht gefunden wird, und Sie kehren zum Anmeldebildschirm zurück. Welche Möglichkeiten habe ich, um mein System zurückzugewinnen, wenn ich einen Wiederherstellungsmodus verweigere oder eine Live-CD zum Bearbeiten von / etc / passwd einlege? Nehmen wir auch (zum Spaß?) An, dass sich keine anderen Benutzer im Rad befinden. Gedanken?
23
Antworten:
Hängen Sie beim Booten
init=/bin/bash
(oder einen Pfad zu einer anderen funktionalen Shell) an Ihre Boot-Optionen an - Sie werden direkt zu einer einzelnen Benutzer-Shell weitergeleitet. Möglicherweise müssen Sie dies tun,mount -o remount,rw /
bevor Sie den/etc/passwd
Eintrag in dieser Umgebung ändern können. Danach einfach neu starten oder ausführenexec /sbin/init 3
. Nur nicht nicht gebenexit
oder drücken Sie Strg + D, da diese in der Kernel - Panik * führen würde.Bei einigen Systemen, die im zweistufigen Modus geladen sind (mit einem initrd-Image), ist möglicherweise eine zusätzliche Variante dieser Methode erforderlich. Wenn Sie , dass die Boot - Optionen bemerken enthalten
init=
und, was am wichtigsten ist ,real_init=
und dann die Stelle zu setzen/bin/bash
sollte dieser Parameter (dhreal_init=/bin/bash
).* Dies liegt daran, dass in dieser Umgebung die Shell vom Kernel als das Init-Programm angesehen wird - das ist der einzige Prozess, den der Kernel kennt - und ein laufendes System darstellt, das sich unter dem Auge des Kernels befindet. Das plötzliche Beenden dieses Prozesses, ohne dass der Kernel angewiesen wird, das System herunterzufahren, muss zu einer Kernel-Panik führen. (Würdest du nicht in Panik geraten, wenn plötzlich alles um dich herum schwarz und still würde?)
quelle
exec
, aber ich denke, es ist besser, vorher nicht zu viel mit Mount-Punkten zu verwechseln./etc/passwd
) ändern ./
) gemountet wird, bevor init ausgeführt wird./bin/bash
es genau zu dem Zeitpunkt/sbin/init
ausgeführt wird, an dem es beim normalen Start ausgeführt wird. Daher kann das System zu diesem Zeitpunkt keine möglichen Aktionen ausführen.Sie können
su
eine Shell verwenden und angeben, die ausgeführt werden soll (ich bin mir nicht sicher, ob dies mit Ihrer Notiz, dass sich keine anderen Benutzer in der Shell befinden, nicht möglich istwheel
):Andernfalls könnten Sie etwas Ähnliches tun, wenn Ihr ssh-Daemon die Anmeldung als root zulässt:
Sie können beispielsweise auch eine Shell als Init in Ihrem Bootloader
init=/bin/ksh
oder Ähnliches festlegen .quelle
Wenn Ihr Bootloader so konfiguriert ist, dass die Kernelparameter live bearbeitet werden können, können Sie einen Neustart durchführen und eine Shell als Initialisierungsprozess verwenden, z
init=/bin/bash
. Montieren Sie dann alles, was von Hand montiert werden muss, und bearbeiten Sie es/etc/passwd
.sync
und wieder mit dem üblichen booteninit
.quelle
Wenn der Kern Ihrer Frage darin besteht, dass Sie alle Wege ausgesperrt haben, um root zu werden, können Sie per Definition nicht root werden.
Es ist üblich, drei Möglichkeiten zuzulassen, um auf einem Unix-System root zu werden:
root
an einer Anmeldeaufforderung das root-Kennwort eingeben. Dadurch wird die root-Shell ausgeführt.su
indem Sie das root-Passwort ausführen und eingeben. Auf einigen Systemen muss man sich in einer bestimmten Gruppe befinden (oft genanntwheel
). Auf anderen Systemen kann jeder, der das root-Passwort kennt, root werden. Systeme, die PAM zur Authentifizierung verwendenpam_wheel
, verwalten die Radgruppe, falls vorhanden. Wenn Sie einen Befehl mit angebensu -c
, wird dieser über die root-Shell ausgeführt.sudo
und melden Sie sich als root an, indem Sie Ihr eigenes Passwort eingeben. Dem Benutzerkonto müssen von einem Administrator Sudo-Berechtigungen erteilt worden sein. Sofern in dersudoers
Datei keine Einschränkungen bestehen , können Sie jeden Befehl ausführen, unabhängig von der Shell von root.Ein traditioneller Weg, um zu verhindern, dass die Root-Shell nicht verfügbar ist, besteht darin, ein anderes Konto mit der UID 0 und einer anderen Shell (
toor
ein traditioneller Name) zu definieren. Wenn beispielsweise die Shell von root eine dynamisch verknüpfte ausführbare Datei ist (eine gute Idee, um Speicherplatz zu sparen) und ein Bibliotheks-Upgrade fehlschlägt, ist die Shell von root möglicherweise unbrauchbar. Das alternative Root-Konto verfügt über eine statisch verknüpfte ausführbare Datei, möglicherweise mit integrierten Dienstprogrammen wie BusyBox .quelle
Die obigen Antworten sind großartig und ich habe durch das Lesen gelernt. Wenn Sie sich nicht an die Details dieser Ansätze erinnern und einen Neustart nicht stören, können Sie Ihr System immer mit einer Live-CD-Distribution starten, die / -Partition mounten und dann / etc / passwd bearbeiten und neu starten. Nicht so elegant wie die obigen Lösungen, aber leichter zu merken.
quelle
/etc/passwd
Datei verbunden sind. Abgesehen davon, guter Punkt - ich wollte meiner Antwort nur den gleichen Vorschlag hinzufügen.