Ngay cả khi root, bạn không thể thực thi các tệp không có xbit quyền. Những gì bạn có thể làm mặc dù là gọi ld.sonó (miễn là chúng thực thi được liên kết động):
$ echo /lib/*/ld*.so
/lib/i386-linux-gnu/ld-2.27.so /lib/x86_64-linux-gnu/ld-2.27.so
Sử dụng một trong những phù hợp với kiến trúc của chmodthực thi. Trong trường hợp của tôi, x86_64một:
sudo /lib/x86_64-linux-gnu/ld-2.27.so /bin/chmod 755 /bin /bin/chmod
Hoặc gọi một cái gì đó trong /usr/binhoặc ở nơi khác để làm chmodnhư thế perl:
sudo perl -e 'chmod 0755, "/bin", "/bin/chmod"
Cẩn thận khi khôi phục các quyền mà một số tệp /binthích mounthoặc sucó nghĩa là có các quyền khác ngoài 0755.
Tuy nhiên, nếu bạn đã khởi động lại, bạn có thể không đến được điểm mà bạn có thể chạy perlhoặc ld.somặc dù. Bạn có thể sửa mọi thứ từ initramfsmặc dù (vượt qua thư mục gốc không chính xác để lấy shell khôi phục trong initramfs; xem thêm tham số break=bottomhoặc break=initkernel trên Debian, để initramfs cung cấp cho bạn trình bao sau khi hệ thống tệp gốc được gắn kết (chỉ đọc Tuy nhiên)). Hoặc khởi động VM của bạn từ hình ảnh CD trực tiếp hoặc khắc phục bằng cách gắn hệ thống tệp VM trên máy chủ như những người khác đề xuất.
Sửa cách khởi tạo initramfs:
Trong grub, chỉnh sửa mục khởi động và xóa root=tham số khỏi linuxlệnh:
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-Xđể khởi động. Các initramfs của Ubuntu sẽ không tìm thấy hệ thống tập tin gốc để bắt đầu phục hồi sh. Sau đó gắn hệ thống tập tin gốc (trong trường hợp của tôi /dev/vdb, thích ứng với máy của bạn) và sửa những thứ ở đó:
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
Sau khi khởi động, sửa các quyền của các tệp không có 755 quyền bằng cách so sánh với hệ thống khác.
Sửa bằng cách chạy pythonnhư init:
Trong grub, chỉnh sửa các mục khởi động, lần này giữ root=tham số, thay đổi rođến rwvà thêm một 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
Sau đó, tại dấu nhắc 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
Một lần nữa, một khi đã khởi động, hãy sửa các quyền của các tệp không có 755 quyền bằng cách so sánh với hệ thống khác.
/binbạn đã mã hóa hoặc các tệp trong/binhoặc cả hai?