И теперь я не могу выполнить chmod обратно или использовать другие системные программы. К счастью, это виртуальная машина, с которой я играю, но есть ли способ решить эту проблему? Система Ubuntu Server 12.10.
Я попытался перезагрузиться в режиме восстановления, но, к сожалению, теперь я не могу загрузиться в систему вообще из-за разрешений, не предоставляющих некоторые программы после запуска init-bottom для запуска - система просто зависает. Вот что я вижу:
Begin: Running /scripts/init-bottom ... done
[ 37.062059] init: Failed to spawn friendly-recovery pre-start process: unable to execute: Permission denied
[ 37.084744] init: Failed to spawn friendly-recovery post-stop process: unable to execute: Permission denied
[ 37.101333] init: plymouth main process (220) killed by ABRT signal
После этого компьютер зависает.
/bin
вы chmoded или файлы/bin
или оба?Ответы:
Загрузите другую чистую ОС, смонтируйте файловую систему и исправьте права доступа.
Поскольку ваша испорченная файловая система находится в виртуальной машине, ваша хост-система должна быть доступна и работать. Смонтируйте свою сломанную файловую систему и исправьте ее.
В случае QEMU / KVM вы можете, например, смонтировать файловую систему, используя nbd .
источник
/boot
раздел этой виртуальной машины. Попробуйте найти корневую файловую систему. Если на LVM, запуститьvgchange -ay
после подключения,nbd
чтобы активировать его.Несмотря на это
root
, вы не можете выполнять файлы, у которых неx
установлен бит разрешения. Что вы можете сделать, так это вызватьld.so
его (при условии, что это динамически связанные исполняемые файлы):Используйте тот, который соответствует архитектуре
chmod
исполняемого файла. В моем случаеx86_64
один:Или позвоните что-нибудь в
/usr/bin
или в другом месте, чтобы сделатьchmod
подобноеperl
:Остерегайтесь при восстановлении разрешений, которым некоторые файлы
/bin
нравятсяmount
илиsu
должны обладать разрешениями, отличными от 0755.Однако, если вы перезагрузили компьютер, вы, возможно, не сможете добраться до точки, где вы можете запустить,
perl
илиld.so
хотя. Вы можете исправить это,initramfs
хотя (передайте неверный корневой каталог, чтобы получить оболочку восстановления в initramfs; см. Также параметр ядраbreak=bottom
илиbreak=init
в Debian, чтобы initramfs мог дать вам оболочку после монтирования корневой файловой системы (только для чтения). хотя)). Или загрузите вашу виртуальную машину из образа живого компакт-диска, или исправьте, смонтировав файловую систему виртуальной машины на хосте, как предлагали другие.Исправление пути initramfs:
В
grub
, отредактируйте загрузочную запись и удалитеroot=
параметр изlinux
команды:Ctrl-XЗагружать. Initramfs в Ubuntu не найдет корневую файловую систему, поэтому начните восстановление
sh
. Затем смонтируйте корневую файловую систему (в моем случае/dev/vdb
, адаптируйтесь к вашей машине) и исправьте ее там:После загрузки исправьте разрешения для файлов, для которых не предусмотрено 755 разрешений, по сравнению с другой системой.
Исправление, запустив
python
какinit
:В
grub
, отредактируйте загрузочную запись, на этот раз сохранитеroot=
параметр, изменитеro
наrw
и добавьтеinit=/usr/bin/python
:Затем в приглашении Python:
Опять же, после загрузки исправьте разрешения для файлов, которые не должны иметь разрешения 755, по сравнению с другой системой.
источник
already try to reboot
случае: загрузиться на live CD, смонтировать rw раздел, содержащий / bin, иchmod 755 /bin
(и файлы внутри, если они тоже были изменены). Но после этого убедитесь, что все файлы имеют правильное разрешение (в зависимости от вашего дистрибутива linux, вы, вероятно, можете проверить / bin на соответствие оригинальному пакету)ld.so
, может быть, в каком-то каталоге, как/lib/x86_64-linux-gnu
.os.execl
иexec
для выполнения, они не разветвляют процесс, просто заменяют исполняемый файл в том же процессе , так что все делается в pid 1. Процесс 1 сначала запускаетсяpython
, затемsh
, затемinit
.Используйте питона :)
Это не должно ничего
/bin
делать, чтобы делать свою работу. Очевидно, я не пробовал это ...источник
chmod
это системный вызов, вызываемыйchmod
программой, а такжеchmod
функцией из python / perl / ruby и т. Д. Оболочки действительно вызываютchmod
утилиту.chmod
встроены. В такой ситуацииsash
полезны такие снаряды . Он статически связан и имеет большинство команд восстановления, таких какchmod
встроенный (поэтому не полагается ни на что другое). Обычно/sbin
он работает, хотя это не повредит иметь дополнительные копии во всех файловых системах, и может использоваться в сочетании с memlockd.zsh
иksh93
иметь встроенный Chmod (хотя по умолчанию не включен).Вы можете попробовать
sudo chmod -R 744 /path-to-your-system/bin
из живого дистрибутива.источник