Même ainsi root
, vous ne pouvez pas exécuter de fichiers pour lesquels aucun x
bit d’autorisation n’a été défini. Ce que vous pouvez faire est cependant d’appeler ld.so
dessus (à condition que ce soit des exécutables liés dynamiquement):
$ echo /lib/*/ld*.so
/lib/i386-linux-gnu/ld-2.27.so /lib/x86_64-linux-gnu/ld-2.27.so
Utilisez celui qui correspond à l'architecture de l' chmod
exécutable. Dans mon cas, x86_64
celui:
sudo /lib/x86_64-linux-gnu/ld-2.27.so /bin/chmod 755 /bin /bin/chmod
Ou appelez quelque chose à l' /usr/bin
intérieur ou ailleurs pour faire ce qui chmod
suit perl
:
sudo perl -e 'chmod 0755, "/bin", "/bin/chmod"
Méfiez - vous des autorisations lors de la restauration que certains fichiers /bin
comme mount
ou su
sont censés avoir des autorisations autres que 0755.
Cependant, si vous avez redémarré, vous ne pourrez peut-être pas atteindre le point où vous pouvez exécuter perl
ou ld.so
bien. Vous pouvez corriger le problème depuis initramfs
(passer un répertoire racine incorrect pour obtenir un shell de récupération dans initramfs; voir aussi le paramètre kernel du noyau break=bottom
ou break=init
sur Debian pour que initramfs vous fournisse un shell après le montage du système de fichiers racine (en lecture seule)). bien que)). Ou démarrez votre machine virtuelle à partir d'une image de CD live, ou corrigez-la en montant le système de fichiers de la machine virtuelle sur l'hôte, comme suggéré par d'autres.
Correction de la manière initramfs:
Dans grub
, éditez l'entrée de démarrage et supprimez le root=
paramètre de la linux
commande:
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-Xpour démarrer. Les initramfs d'Ubuntu ne trouveront pas le système de fichiers racine, lancez donc une récupération sh
. Ensuite, montez le système de fichiers racine (dans mon cas /dev/vdb
, adaptez-le à votre machine) et corrigez les problèmes:
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
Une fois démarré, corrigez les autorisations des fichiers qui ne sont pas censés avoir des autorisations 755 en les comparant à un autre système.
Fixation en cours d'exécution en python
tant que init
:
Dans grub
, modifier l'entrée de démarrage, cette fois garder le root=
paramètre, le changement ro
à rw
et ajouter un 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
Ensuite, à l’invite 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
Encore une fois, une fois démarré, corrigez les autorisations des fichiers qui ne sont pas censés avoir des autorisations 755 en les comparant à un autre système.
/bin
vous chmoded ou les fichiers/bin
ou les deux?