Bahkan root
, Anda tidak dapat menjalankan file yang tidak memiliki x
bit izin yang ditetapkan. Apa yang dapat Anda lakukan adalah memanggilnya ld.so
(asalkan mereka executable yang terhubung secara dinamis):
$ echo /lib/*/ld*.so
/lib/i386-linux-gnu/ld-2.27.so /lib/x86_64-linux-gnu/ld-2.27.so
Gunakan salah satu yang cocok dengan arsitektur yang chmod
dapat dieksekusi. Dalam kasus saya yang x86_64
satu:
sudo /lib/x86_64-linux-gnu/ld-2.27.so /bin/chmod 755 /bin /bin/chmod
Atau hubungi sesuatu di /usr/bin
atau di tempat lain untuk melakukan hal yang chmod
sama perl
:
sudo perl -e 'chmod 0755, "/bin", "/bin/chmod"
Hati-hati saat mengembalikan izin yang /bin
disukai beberapa file mount
atau su
dimaksudkan untuk memiliki izin selain 0755.
Jika Anda sudah reboot, namun, Anda mungkin tidak bisa mendapatkan ke titik di mana Anda dapat menjalankan perl
atau ld.so
sekalipun. Anda dapat memperbaiki hal-hal dari initramfs
though (lewat direktori root yang salah untuk mendapatkan shell pemulihan di initramfs; lihat juga parameter break=bottom
atau break=init
kernel pada Debian, untuk initramfs memberi Anda shell setelah sistem file root dipasang (read-only) meskipun)). Atau boot VM Anda dari gambar live CD, atau perbaiki dengan memasang sistem file VM pada host seperti yang disarankan orang lain.
Memperbaiki cara initramfs:
Di grub
, edit entri boot dan hapus root=
parameter dari linux
perintah:
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-Xuntuk boot. Initramfs Ubuntu tidak akan menemukan sistem file root, jadi mulailah pemulihan sh
. Kemudian pasang sistem file root (dalam kasus saya /dev/vdb
, beradaptasi dengan mesin Anda) dan perbaiki hal-hal di sana:
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
Setelah di-boot, perbaiki izin file yang tidak dimaksudkan untuk memiliki 755 izin dengan membandingkannya dengan sistem lain.
Memperbaiki dengan menjalankan python
sebagai init
:
Dalam grub
, mengedit entri boot, kali ini menjaga root=
parameter, perubahan ro
ke rw
dan menambahkan 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
Kemudian, pada prompt python:
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
Sekali lagi, setelah boot, perbaiki izin file yang tidak dimaksudkan untuk memiliki 755 izin dengan membandingkan dengan sistem lain.
/bin
Anda chmoded atau file dalam/bin
atau keduanya?