Und jetzt bin ich nicht in der Lage, es zurück zu chmod .. oder eines meiner anderen Systemprogramme zu verwenden. Zum Glück ist dies auf einer VM, mit der ich schon gespielt habe, aber gibt es eine Möglichkeit, dies zu beheben? Das System ist Ubuntu Server 12.10.
Ich habe versucht, in den Wiederherstellungsmodus zurückzukehren. Leider kann ich jetzt überhaupt nicht mehr in das System booten, da die Berechtigungen einige Programme nach der Verfügbarkeit von init-bottom nicht mehr gewähren. Das System hängt nur noch. Das sehe ich:
Begin: Running /scripts/init-bottom ... done
[ 37.062059] init: Failed to spawn friendly-recovery pre-start process: unable to execute: Permission denied
[ 37.084744] init: Failed to spawn friendly-recovery post-stop process: unable to execute: Permission denied
[ 37.101333] init: plymouth main process (220) killed by ABRT signal
Danach hängt der Computer.
/bin
Ihnen in CHMOD oder die Dateien/bin
oder beide?Antworten:
Starten Sie ein anderes sauberes Betriebssystem, hängen Sie das Dateisystem ein und korrigieren Sie die Berechtigungen.
Da sich Ihr kaputtes Dateisystem in einer VM befindet, sollte Ihr Hostsystem verfügbar und funktionsfähig sein. Hängen Sie Ihr defektes Dateisystem dort ein und beheben Sie es.
Im Falle von QEMU / KVM können Sie das Dateisystem zum Beispiel mit nbd mounten .
quelle
/boot
Partition dieser VM gemountet . Versuchen Sie, das Root-Dateisystem zu finden. Wenn auf LVM, führen Sievgchange -ay
nach dem Anschließen das ausnbd
, um es zu aktivieren.Selbst als
root
, können Sie keine Dateien ausführen , die keine habenx
Erlaubnis Bit gesetzt. Sie können es jedoch aufrufenld.so
(vorausgesetzt, es handelt sich um dynamisch verknüpfte ausführbare Dateien):Verwenden Sie diejenige, die der Architektur der
chmod
ausführbaren Datei entspricht. In meinem Fall derx86_64
eine:Oder rufen Sie etwas in
/usr/bin
oder an anderer Stelle das zu tun ,chmod
wieperl
:Hüten Sie sich vor , wenn Berechtigungen wieder herstellt , dass einige Dateien in
/bin
wiemount
oder diesu
entsprechenden Berechtigungen haben sollen andere als 0755.Wenn Sie neu gestartet haben, jedoch können Sie nicht in der Lage sein , bis zu dem Punkt zu gelangen , wo Sie ausführen können ,
perl
oderld.so
aber. Sie können das Problem beheben,initramfs
indem Sie ein falsches Stammverzeichnis übergeben, um eine Wiederherstellungsshell im initramfs abzurufen. Weitere Informationen finden Sie unter Debian im Parameterbreak=bottom
oder imbreak=init
Kernel, damit das initramfs Ihnen eine Shell gibt, nachdem das Root-Dateisystem bereitgestellt wurde (schreibgeschützt) obwohl)). Sie können Ihre VM auch von einem Live-CD-Image starten oder das VM-Dateisystem wie von anderen vorgeschlagen auf dem Host mounten.Initramfs reparieren:
In
grub
Bearbeiten Sie den Boot - Eintrag und entfernen Sie dieroot=
Parameter aus demlinux
Befehl:Ctrl-Xzu booten. Ubuntus initramfs findet das Root-Dateisystem nicht, also starte eine Wiederherstellung
sh
. Hängen Sie dann das Root-Dateisystem ein (/dev/vdb
passen Sie es in meinem Fall an Ihren Computer an) und beheben Sie die folgenden Probleme:Korrigieren Sie nach dem Start die Berechtigungen der Dateien, für die keine 755-Berechtigungen vorgesehen sind, indem Sie sie mit einem anderen System vergleichen.
Fixierung durch Laufen
python
alsinit
:In
grub
Bearbeiten Sie die Boot - Eintrag, halten Sie diese Zeit , um dieroot=
Parameter ändernro
zurw
und fügen Sie eininit=/usr/bin/python
:Dann an der Python-Eingabeaufforderung:
Korrigieren Sie nach dem Booten erneut die Berechtigungen der Dateien, für die keine 755-Berechtigungen vorgesehen sind, indem Sie sie mit einem anderen System vergleichen.
quelle
already try to reboot
Fall: Booten Sie von einer Live-CD, hängen Sie die Partition mit / bin undchmod 755 /bin
(und die darin enthaltenen Dateien, falls diese ebenfalls geändert wurden) ein. Aber überprüfen Sie anschließend, ob alle Dateien die richtige Berechtigung haben (abhängig von Ihrem Linux-Distributor können Sie wahrscheinlich / bin gegen das Originalpaket prüfen)ld.so
, vielleicht in einem Verzeichnis wie/lib/x86_64-linux-gnu
.os.execl
undexec
sind für die Ausführung, sie keinen Prozess Gabel, ersetzt einfach die ausführbare im gleichen Prozess , so dass alle 1 zunächst in pid 1. Verfahren erfolgt läuftpython
, dannsh
, danninit
.Benutze Python :)
Das sollte nichts brauchen
/bin
, um seine Arbeit zu erledigen. Offensichtlich habe ich das nicht ausprobiert ...quelle
chmod
handelt sich um einen Systemaufruf, der vomchmod
Programm und auch von derchmod
Funktion in Python / Perl / Ruby usw. aufgerufen wird. Shells rufen daschmod
Dienstprogramm jedoch auf.chmod
eingebaut sind. Das ist die Art von Situation, in der Muschelnsash
nützlich sind. Es ist statisch verknüpft und verfügt über die meisten Wiederherstellungsbefehle , wiechmod
z. B. Built-In. Es wird normalerweise verwendet,/sbin
obwohl es nicht schaden würde, zusätzliche Kopien auf allen Dateisystemen zu haben, und kann in Kombination mit memlockd verwendet werden.zsh
undksh93
habe ein chmod eingebaut (obwohl nicht standardmäßig aktiviert).Sie können es
sudo chmod -R 744 /path-to-your-system/bin
in einer Live-Distribution versuchen .quelle