Disons que je suis allé faire une chose idiote, comme utiliser 'chsh' pour changer le shell de l'utilisateur root en un mauvais chemin de fichier. Les futures connexions au compte root échoueront brusquement, citant / bin / tout ce qui n'est pas trouvé, et vous redémarreront à l'écran de connexion. À moins d'un mode de récupération ou d'insertion d'un LiveCD pour éditer / etc / passwd, quelles sont mes options pour récupérer mon système? Supposons également (pour le plaisir?) Qu'il n'y ait pas d'autres utilisateurs dans la roue. Pensées?
23
Réponses:
Lors du démarrage, ajoutez
init=/bin/bash
(ou un chemin vers tout autre shell fonctionnel) à vos options de démarrage - vous serez déposé directement dans un shell utilisateur unique. Vous devrez peut-être le fairemount -o remount,rw /
avant de modifier l'/etc/passwd
entrée dans cet environnement. Après cela, redémarrez ou faitesexec /sbin/init 3
. Il suffit de ne pas taperexit
ou d'appuyer sur Ctrl + D, car cela entraînerait une panique du noyau *.Une variante supplémentaire de cette méthode peut être nécessaire sur certains systèmes chargés en mode en deux étapes (avec une image initrd). Si vous remarquez que les options de démarrage contiennent
init=
et, plus important encore,real_init=
alors la place à mettre/bin/bash
devrait être le dernier paramètre (iereal_init=/bin/bash
).* C'est parce que dans cet environnement, le shell est vu par le noyau comme le programme init - qui est le seul processus que le noyau connaisse - il représente un système en cours d'exécution sous les yeux du noyau. La fin soudaine de ce processus, sans demander au noyau d'arrêter le système, doit entraîner une panique du noyau. (Ne paniqueriez-vous pas si tout à coup tout autour de vous devenait noir et silencieux?)
la source
exec
, mais je suppose qu'il vaut mieux ne pas trop gâcher les points de montage au préalable./etc/passwd
)./
) avant d'exécuter init./bin/bash
est exécuté exactement au point, puis/sbin/init
serait exécuté au démarrage normal. Il ne peut donc y avoir aucune action possible du système à ce moment-là.Vous pouvez utiliser
su
et spécifier un shell à exécuter (je ne suis pas sûr si vous essayez d'impliquer que ce n'est pas possible avec votre note qu'aucun autre utilisateur ne s'y trouvewheel
):Sinon, vous pourriez faire quelque chose de similaire si votre démon ssh autorise la connexion à root:
Vous pouvez également définir un shell comme init dans votre chargeur de démarrage, par exemple,
init=/bin/ksh
ou similaire.la source
Si votre chargeur de démarrage est configuré pour permettre l'édition en direct des paramètres du noyau, une solution consiste à redémarrer et à utiliser un shell comme processus d'initialisation, par exemple
init=/bin/bash
. Ensuite, montez tout ce qui doit être monté à la main et éditez/etc/passwd
.sync
et redémarrez avec votre habitudeinit
.la source
Si l'essentiel de votre question est que vous avez verrouillé toutes les façons de devenir root, alors par définition, vous ne pouvez pas devenir root.
Il est courant d'autoriser trois méthodes pour devenir root sur un système Unix:
root
à l'invite de connexion et en tapant le mot de passe root. Cela exécute le shell de root.su
et en tapant le mot de passe root. Sur certains systèmes, cela nécessite d'être dans un groupe particulier (souvent appeléwheel
); sur d'autres systèmes, toute personne connaissant le mot de passe root peut devenir root. Les systèmes utilisant PAM pour l'authentificationpam_wheel
permettent de gérer le groupe de roues s'il en a un. Si vous spécifiez une commande avecsu -c
, elle est exécutée via le shell de root.sudo
et en tapant votre propre mot de passe. Le compte utilisateur doit avoir reçu les pouvoirs sudo par un administrateur. Sauf restriction dans lesudoers
fichier, vous pouvez exécuter n'importe quelle commande, quel que soit le shell de root.Une manière traditionnelle de se protéger contre le shell de root n'est pas disponible est de définir un autre compte avec UID 0 et un shell différent (
toor
est un nom traditionnel). Par exemple, si le shell de root est un exécutable lié dynamiquement (une bonne idée pour conserver la mémoire) et qu'une mise à niveau de la bibliothèque échoue, le shell de root peut être inutilisable. Le compte root alternatif aurait un exécutable lié statiquement, éventuellement avec des utilitaires communs intégrés tels que BusyBox .la source
Les réponses ci-dessus sont excellentes et j'ai appris en les lisant. Si vous ne vous souvenez pas des détails de ces approches et que cela ne vous dérange pas de redémarrer, vous pouvez toujours démarrer votre système en utilisant une distribution de CD live, monter la partition / puis éditer / etc / passwd et redémarrer. Pas aussi élégant que les solutions ci-dessus, mais plus facile à retenir.
la source
/etc/passwd
fichier. Autre que cela, bon point - je voulais juste ajouter la même suggestion à ma réponse.