Тим не менш 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 з прямого CD-зображення, або виправляйте, встановивши файлову систему 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 Ubuntu не знайде кореневої файлової системи, тому починайте відновлення 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
Потім у запиті 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
Знову ж таки, після завантаження виправте дозволи файлів, які не мають 755 дозволів, порівнявши з іншою системою.
/bin
ти chmoded або файли в/bin
або обох?