Mesmo como root
, você não pode executar arquivos que não tenham nenhum bit de permissão x
definido. O que você pode fazer é chamar ld.so
(desde que sejam executáveis vinculados dinamicamente):
sudo /lib/*/ld*.so /bin/chmod 755 /bin /bin/chmod
Ou ligue para algo em /usr/bin
ou em outro lugar para fazer o chmod
like perl
:
sudo perl -e 'chmod 0755, "/bin", "/bin/chmod"
Tenha cuidado ao restaurar permissões em que alguns arquivos em /bin
, como mount
ou su
, devem ter permissões diferentes de 0755.
Se você reiniciou, no entanto, talvez não consiga chegar ao ponto em que pode executar perl
ou ld.so
. Você pode consertar coisas do initramfs
(passe um diretório raiz incorreto para obter um shell de recuperação no initramfs). Ou inicialize sua VM a partir de uma imagem de CD ao vivo ou corrija montando o sistema de arquivos da VM no host, como os outros sugeriram.
Corrigindo o caminho do initramfs:
Em grub
, edite a entrada de inicialização e remova o parâmetro root=
do comando 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 para inicializar. O initramfs do Ubuntu não encontrará o sistema de arquivos raiz, portanto, inicie uma recuperação sh
. Então monte o sistema de arquivos raiz (no meu caso /dev/vdb
, adapte-se à sua máquina) e corrija as coisas lá:
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
Uma vez inicializado, corrija as permissões dos arquivos que não devem ter 755 permissões comparando com outro sistema.
Corrigindo executando python
como init
:
Em grub
, edite a entrada de inicialização, desta vez mantenha o parâmetro root=
, altere ro
para rw
e adicione um 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
Então, no prompt do 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
Novamente, uma vez inicializado, corrija as permissões dos arquivos que não devem ter 755 permissões comparando com outro sistema.