แม้ว่าroot
คุณจะไม่สามารถเรียกใช้ไฟล์ที่ไม่มีการx
ตั้งค่าบิตการอนุญาตได้ สิ่งที่คุณสามารถทำได้คือโทรหาld.so
(หากมีการเชื่อมโยงไฟล์ที่เรียกใช้งานได้แบบไดนามิก):
$ echo /lib/*/ld*.so
/lib/i386-linux-gnu/ld-2.27.so /lib/x86_64-linux-gnu/ld-2.27.so
ใช้อันที่ตรงกับสถาปัตยกรรมของchmod
ปฏิบัติการ ในกรณีของฉันx86_64
หนึ่ง:
sudo /lib/x86_64-linux-gnu/ld-2.27.so /bin/chmod 755 /bin /bin/chmod
หรือโทรหาบางอย่างใน/usr/bin
หรือที่อื่น ๆ เพื่อทำสิ่งที่chmod
ชอบperl
:
sudo perl -e 'chmod 0755, "/bin", "/bin/chmod"
ระวังเมื่อกู้คืนสิทธิ์ที่บางไฟล์/bin
เหมือนmount
หรือsu
มีความหมายว่ามีสิทธิ์อื่นนอกเหนือจาก 0755
อย่างไรก็ตามหากคุณรีบูตเครื่องคุณอาจไม่สามารถไปถึงจุดที่คุณสามารถวิ่งperl
หรือวิ่งld.so
ได้ คุณสามารถแก้ไขสิ่งต่าง ๆ ได้จากinitramfs
(ผ่านไดเรกทอรีรากที่ไม่ถูกต้องเพื่อรับเชลล์กู้คืนใน initramfs ดูพารามิเตอร์break=bottom
หรือbreak=init
เคอร์เนลบน Debian เพื่อให้ initramfs ให้เชลล์หลังจากติดตั้งระบบไฟล์รูท (อ่านอย่างเดียว) แม้ว่า)) หรือบูต VM ของคุณจากอิมเมจซีดีสดหรือแก้ไขโดยติดตั้งระบบไฟล์ VM บนโฮสต์ตามที่คนอื่นแนะนำ
แก้ไขวิธี initramfs:
ในgrub
แก้ไขรายการบูตและลบroot=
พารามิเตอร์ออกจากlinux
คำสั่ง:
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เพื่อบูต initramfs sh
อูบุนตูจะไม่หาระบบแฟ้มรากเพื่อเริ่มต้นการกู้คืน จากนั้นติดตั้งระบบไฟล์รูท (ในกรณีของฉัน/dev/vdb
ปรับให้เข้ากับเครื่องของคุณ) และแก้ไขสิ่งต่าง ๆ ที่นั่น:
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
เมื่อบู๊ตแล้วแก้ไขสิทธิ์ของไฟล์ที่ไม่ได้มีไว้เพื่ออนุญาต 755 ไฟล์โดยเปรียบเทียบกับระบบอื่น
แก้ไขโดยเรียกใช้python
เป็นinit
:
ในgrub
แก้ไขรายการบูตครั้งนี้ให้root=
พารามิเตอร์การเปลี่ยนแปลงro
ไปrw
และเพิ่ม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
จากนั้นที่พร้อมรับคำหลาม:
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
อีกครั้งเมื่อบูตเครื่องให้แก้ไขการอนุญาตของไฟล์ที่ไม่ได้ตั้งใจให้มีการอนุญาต 755 โดยเปรียบเทียบกับระบบอื่น
/bin
คุณ chmoded หรือไฟล์ใน/bin
หรือทั้งสอง?