Несмотря на это 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 мог дать вам оболочку после монтирования корневой файловой системы (только для чтения). хотя)). Или загрузите вашу виртуальную машину из образа живого компакт-диска, или исправьте, смонтировав файловую систему виртуальной машины на хосте, как предлагали другие.
Исправление пути 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
или оба?