Wenn Sie noch eine Root-Shell haben, haben Sie möglicherweise die Möglichkeit, Ihr System zu reparieren. Angenommen, Sie haben alle gemeinsamen Verzeichnisse verschoben (/bin
, /etc
, /lib
, /sbin
, /usr
— das sind diejenigen, die die Wiederherstellung erschweren könnten) unter /oops
.
Sie können den mv
nicht ausgeben Befehl direkt, auch wenn Sie den vollständigen Pfad /oops/bin/mv
angeben . Das liegt daran, dass mv
ist dynamisch verknüpft; weil Sie die /lib
verschoben haben Verzeichnis, mv
kann nicht ausgeführt werden, da es die Bibliotheken, die einen Teil seines Codes darstellen, nicht finden kann. Tatsächlich ist es sogar noch schlimmer:mv
kann den dynamischen Loader /lib/ld-linux.so.2
nicht finden (Der Name kann je nach Architektur und Unix-Variante variieren, und das Verzeichnis könnte einen anderen Namen haben, z. B. /lib32
oder /lib64
). Also, bis Sie die /lib
verschoben haben Verzeichnis zurück, müssen Sie den Linker explizit aufrufen und den Pfad zu den verschobenen Bibliotheken angeben. Hier ist der Befehl, der auf Debian Squeeze i386 getestet wurde.
export LD_LIBRARY_PATH=/oops/lib:/oops/lib/i386-linux-gnu
/oops/lib/ld-linux.so.2 /oops/bin/mv /oops/* /
Möglicherweise müssen Sie dies für andere Distributionen oder Architekturen ein wenig anpassen. Zum Beispiel für CentOS auf x86_64:
export LD_LIBRARY_PATH=/oops/lib:/oops/lib64
/oops/lib64/ld-linux-x86-64.so.2 /oops/bin/mv /oops/* /
Wenn Sie etwas vermasselt haben /lib
, hilft es, eine statisch verlinkte Toolbox herumliegen zu haben. Einige Distributionen (ich weiß nichts über CentOS) bieten eine statisch verknüpfte Kopie von Busybox. Es gibt auch Sash, eine eigenständige Shell mit vielen integrierten Befehlen. Wenn Sie eines davon haben, können Sie Ihre Wiederherstellung von dort aus durchführen. Wenn Sie sie nicht vorher installiert haben, ist es zu spät.
# mkdir /oops
# mv /lib /bin /oops
# sash
Stand-alone shell (version 3.7)
> -mv /oops/* /
> exit
Wenn Sie keine Root-Shell mehr haben, aber immer noch einen SSH-Dämon haben, der lauscht und Sie sich direkt als Root über ssh anmelden können, und Sie eine dieser statisch verknüpften Toolboxen haben, können Sie sich möglicherweise per ssh anmelden. Dies kann funktionieren, wenn Sie /lib
verschoben haben und /bin
, aber nicht /etc
.
ssh [email protected] /oops/bin/sash
[email protected]'s password:
Stand-alone shell (version 3.7)
> -mv /oops/* /
Einige Administratoren richten für diese Art von Problemen ein alternatives Konto mit einer statisch verknüpften Shell ein oder lassen das Root-Konto eine statisch verknüpfte Shell verwenden.
Wenn Sie keine Root-Shell haben und keine Vorkehrungen getroffen haben, müssen Sie von einer Linux-Live-CD/USB booten (jede ist ausreichend, solange sie neu genug ist, um auf Ihre Festplatten und Dateisysteme zugreifen zu können) und verschieben Sie die Dateien zurück.
Sie können wahrscheinlich ohne Neustart wiederherstellen, also starten Sie nicht neu, bis Sie einige andere Dinge ausprobiert haben, da es nicht hochfährt. Wenn Sie Ihre SSH-Sitzung noch geöffnet haben, versuchen Sie Folgendes:
-
Wo Programme ausgeführt werden, wird mit der $PATH-Variablen festgelegt. Sie können Ihren neuen Lagerplatz zum Pfad hinzufügen, indem Sie
export PATH="$PATH:/newpath/to/bin:/newpath/to/usr/bin"
ausführen . Möglicherweise müssen Sie die entsprechende sbin hinzufügen auch Verzeichnisse. Sie können Programme auch manuell über ihren vollständigen Pfad/path/to/mv [from] [to]
ausführen sollte zum Beispiel auch funktionieren, wenn sich mv an einem anderen Ort befindet. Der knifflige Teil ist, dass die meisten Befehle auf allgemeine Bibliotheken zugreifen wollen und Sie/lib
sagen wurde verschoben, also müssen Sie auch eine Variable dafür festlegen, wo das ist.export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/newpath/to/lib/:/newpath/to/usr/lib
-
Sobald Sie einige grundlegende Befehle ausführen können, verschieben Sie das Zeug zurück!
mv /path/to/subfolder/* /
wäre in ordnung! Sobald alles wieder an Ort und Stelle ist, sollte sich das System normal verhalten.
Wenn dies fehlschlägt, sollten Sie nach dem Booten JEDER LiveCD und dem Mounten des Laufwerks die Ordner wieder dorthin verschieben können, wo sie hingehören. Sie müssen Ihre Distributions-Live-CD nicht neu installieren oder sogar verwenden, Sie müssen nur das Laufwerk mounten und die Ordner zurück an die richtige Stelle auf der Festplatte verschieben. Viele Linux-basierte Rettungsdisketten sind darauf spezialisiert, Ihnen nur ein paar grundlegende Konsolen-Tools zur Verfügung zu stellen, um diese Art von Reparatur durchzuführen.
Sie sollten in der Lage sein, den Computer mit einer Installations-CD im Einzelbenutzermodus neu zu starten, das Root-Dateisystem einzuhängen und die Dateien unter Linux zurück zu verschieben. Ich weiß nicht viel Centos, aber es ist wie RHEL, also sollte das funktionieren.