Même ainsi root, vous ne pouvez pas exécuter de fichiers pour lesquels aucun xbit d’autorisation n’a été défini. Ce que vous pouvez faire est cependant d’appeler ld.sodessus (à 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' chmodexécutable. Dans mon cas, x86_64celui:
sudo /lib/x86_64-linux-gnu/ld-2.27.so /bin/chmod 755 /bin /bin/chmod
Ou appelez quelque chose à l' /usr/binintérieur ou ailleurs pour faire ce qui chmodsuit perl:
sudo perl -e 'chmod 0755, "/bin", "/bin/chmod"
Méfiez - vous des autorisations lors de la restauration que certains fichiers /bincomme mountou susont 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 perlou ld.sobien. 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=bottomou break=initsur 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 linuxcommande:
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 pythontant que init:
Dans grub, modifier l'entrée de démarrage, cette fois garder le root=paramètre, le changement roà rwet 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.
/binvous chmoded ou les fichiers/binou les deux?