Selbst als root
, können Sie keine Dateien ausführen , die keine haben x
Erlaubnis Bit gesetzt. Sie können es jedoch aufrufen ld.so
(vorausgesetzt, es handelt sich um dynamisch verknüpfte ausführbare Dateien):
$ echo /lib/*/ld*.so
/lib/i386-linux-gnu/ld-2.27.so /lib/x86_64-linux-gnu/ld-2.27.so
Verwenden Sie diejenige, die der Architektur der chmod
ausführbaren Datei entspricht. In meinem Fall der x86_64
eine:
sudo /lib/x86_64-linux-gnu/ld-2.27.so /bin/chmod 755 /bin /bin/chmod
Oder rufen Sie etwas in /usr/bin
oder an anderer Stelle das zu tun , chmod
wie perl
:
sudo perl -e 'chmod 0755, "/bin", "/bin/chmod"
Hüten Sie sich vor , wenn Berechtigungen wieder herstellt , dass einige Dateien in /bin
wie mount
oder die su
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
oder ld.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 Parameter break=bottom
oder im break=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 die root=
Parameter aus dem linux
Befehl:
setparams 'Ubuntu, with Linux 3.2.0-27-generic'
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod ext2
set root='(hd1)'
search --no-floppy --fs-uuid --set=root dc02b07c-88ef-4804-afe0-4f02db2\
94561
linux /boot/vmlinuz-3.2.0-27-generic
initrd /boot/initrd.img-3.2.0-27-generic
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:
Target filesystem doesn't have requested /sbin/init.
No init found. Try passing init= bootarg.
BusyBox v1.18.5 (Ubuntu 1:1.18.5-1ubuntu4) built-in shell (ash)
Enter 'help' for a list of built-in commands.
(initramfs) mkdir /x
(initramfs) mount /dev/vdb /x
[ 48.430071] EXT3-fs (vdb): error: couldn't mount because of unsupported optio
nal features (240)
[ 48.477406] EXT4-fs (vdb): recovery complete
[ 48.477747] EXT4-fs (vdb): mounted filesystem with ordered data mode. Opts: (
null)
(initramfs) chmod -R 755 /x/bin
(initramfs) umount /x
(initramfs) reboot
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
als init
:
In grub
Bearbeiten Sie die Boot - Eintrag, halten Sie diese Zeit , um die root=
Parameter ändern ro
zu rw
und fügen Sie ein init=/usr/bin/python
:
setparams 'Ubuntu, with Linux 3.2.0-27-generic'
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod ext2
set root='(hd1)'
search --no-floppy --fs-uuid --set=root dc02b07c-88ef-4804-afe0-4f02db2\
94561
linux /boot/vmlinuz-3.2.0-27-generic root=UUID=dc02b07c-88ef-4804-afe0-\
4f02db294561 rw init=/usr/bin/python
initrd /boot/initrd.img-3.2.0-27-generic
Dann an der Python-Eingabeaufforderung:
Begin: Running /scripts/init-bottom ... done.
Python 2.7.3 (default, Apr 20 2012, 22:39:59)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.chmod('/bin/sh',0755)
>>> os.chmod('/bin/chmod',0755)
>>> os.execl('/bin/sh','sh')
sh: 0: can't access tty; job control turned off
# chmod -R 0755 /bin
# mount -o remount,ro /
[ 100.704720] EXT4-fs (vdb): re-mounted. Opts: errors=remount-ro
# exec /sbin/init
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.
/bin
Ihnen in CHMOD oder die Dateien/bin
oder beide?