Et maintenant, je suis incapable de le vérifier .. ou d’utiliser l’un de mes autres programmes système. Heureusement, c'est sur une machine virtuelle avec laquelle je m'amuse, mais y a-t-il un moyen de résoudre ce problème? Le système est Ubuntu Server 12.10.
J'ai essayé de redémarrer en mode de récupération, mais malheureusement, je ne parviens plus du tout à démarrer sur le système car des autorisations ne sont pas accordées à certains programmes après la disponibilité d'initial-bottom, le système se bloque. Voici ce que je vois:
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
Après cela, l'ordinateur se bloque.
/bin
vous chmoded ou les fichiers/bin
ou les deux?Réponses:
Démarrez un autre système d'exploitation vierge, montez le système de fichiers et corrigez les autorisations.
Étant donné que votre système de fichiers endommagé réside dans une machine virtuelle, votre système hôte doit être disponible et fonctionnel. Montez votre système de fichiers endommagé et corrigez-le.
Dans le cas de QEMU / KVM, vous pouvez par exemple monter le système de fichiers à l’aide de nbd .
la source
/boot
partition de cette machine virtuelle. Essayez de localiser le système de fichiers racine. Si sur LVM, exécutezvgchange -ay
après avoir connecté lenbd
pour l'activer.Même ainsi
root
, vous ne pouvez pas exécuter de fichiers pour lesquels aucunx
bit d’autorisation n’a été défini. Ce que vous pouvez faire est cependant d’appelerld.so
dessus (à condition que ce soit des exécutables liés dynamiquement):Utilisez celui qui correspond à l'architecture de l'
chmod
exécutable. Dans mon cas,x86_64
celui:Ou appelez quelque chose à l'
/usr/bin
intérieur ou ailleurs pour faire ce quichmod
suitperl
:Méfiez - vous des autorisations lors de la restauration que certains fichiers
/bin
commemount
ousu
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
ould.so
bien. Vous pouvez corriger le problème depuisinitramfs
(passer un répertoire racine incorrect pour obtenir un shell de récupération dans initramfs; voir aussi le paramètre kernel du noyaubreak=bottom
oubreak=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 leroot=
paramètre de lalinux
commande: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: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 queinit
:Dans
grub
, modifier l'entrée de démarrage, cette fois garder leroot=
paramètre, le changementro
àrw
et ajouter uninit=/usr/bin/python
:Ensuite, à l’invite python:
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.
la source
already try to reboot
cas: démarrez sur un CD live, montez rw la partition contenant / bin, etchmod 755 /bin
(et les fichiers qu'ils contiennent s'ils ont également été modifiés). Mais ensuite, vérifiez que tous les fichiers sont la bonne permission (en fonction de votre distribution linux, vous pouvez probablement vérifier / bin par rapport au paquet original)ld.so
, par exemple dans un répertoire/lib/x86_64-linux-gnu
.os.execl
etexec
sont destinés à l'exécution, ils ne créent pas de processus, mais remplacent simplement l'exécutable dans le même processus , de sorte que tout se passe dans le pid 1. Le processus 1 s'exécute initialementpython
, puissh
, ensuiteinit
.Utilisez python :)
Cela ne devrait avoir besoin de rien
/bin
pour faire son travail. Évidemment, je n'ai pas essayé ça ...la source
chmod
est un appel système, appelé par lechmod
programme et également par lachmod
fonction dans les shells python / perl / ruby, etc., appellechmod
néanmoins l' utilitaire.chmod
construit. C'est le genre de situation où les coquillessash
sont utiles. Il est lié statiquement et a la plupart des commandes de récupération similaires à celleschmod
intégrées (donc ne repose sur rien d’autre). Il resterait normalement en place/sbin
même s'il ne serait pas dommageable d'avoir des copies supplémentaires sur tous les systèmes de fichiers, et peut être utilisé en combinaison avec memlockd.zsh
etksh93
avoir un chmod intégré (bien que non activé par défaut).Vous pouvez essayer
sudo chmod -R 744 /path-to-your-system/bin
d'une distribution en direct.la source