Ngay cả khi root
, bạn không thể thực thi các tệp không có x
bit quyền. Những gì bạn có thể làm mặc dù là gọi ld.so
nó (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 chmod
thực thi. Trong trường hợp của tôi, x86_64
mộ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/bin
hoặc ở nơi khác để làm chmod
như 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 /bin
thích mount
hoặc su
có 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 perl
hoặc ld.so
mặc dù. Bạn có thể sửa mọi thứ từ initramfs
mặ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=bottom
hoặc break=init
kernel 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 linux
lệ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 python
như 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 rw
và 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.
/bin
bạn đã mã hóa hoặc các tệp trong/bin
hoặc cả hai?