L'enveloppe de la racine a changé par erreur. Comment puis-je le changer en un shell valide?

19

Je suis entré par erreur

chsh -s /usr/bin 

au lieu de

chsh -s /bin/bash 

et maintenant je ne peux pas me connecter à un shell racine, comment puis-je démarrer un shell bash en tant que root manuellement?

ChiseledAbs
la source
dans quel contexte avez-vous fait cela. Dans un terminal actuel, pour le shell par défaut des utilisateurs?
jgr208
vous n'avez pas d'utilisateurs dans le groupe sudo?
Rui F Ribeiro
3
ça sudo vipwmarche?
Rui F Ribeiro
1
@RuiFRibeiro oui, merci, je ne savais pas que je pouvais changer le shell racine par défaut dans ce fichier
ChiseledAbs
1
Pas nécessaire dans ce cas, mais lorsque vous avez créé par inadvertance une catastrophe impliquant root, vous pouvez généralement mettre la machine en mode mono-utilisateur, résoudre le problème, puis revenir en mode multi-utilisateur.
Boardrider

Réponses:

29

Bien que root n'ait pas accès, un utilisateur du groupe sudo peut toujours exécuter des commandes privilégiées - il semble que l'erreur ne se trouve pas dans sudo, mais ailleurs dans le sudo chsh commande (par exemple, erreur chsh).

En tant que tel, votre sudo fonctionne apparemment.

Le fichier passwd peut être édité avec:

sudo vipw

Et le shell racine a changé manuellement.

(première ligne de /etc/passwdgénéralement)

root:x:0:0:root:/root:/bin/bash

Fom man vipw

Les commandes vipw et vigr modifient respectivement les fichiers / etc / passwd et / etc / group. Avec le drapeau -s, ils éditeront les versions shadow de ces fichiers, / etc / shadow et / etc / gshadow, respectivement. Les programmes définiront les verrous appropriés pour éviter la corruption des fichiers.

Rui F Ribeiro
la source
3
Je ne l'ai jamais su vipwet vigrmerci! J'ai toujours utilisésudo vim /etc/passwd
chat
3
Vous pourriez également être intéressé par visudo sudo.ws/man/1.8.15/visudo.man.html , @tac
Rui F Ribeiro
3
Ou sudo -e, qui exécute cette fonction de verrouillage-modification pour toute modification.
kojiro
16

Une autre option, en supposant que vous avez accès à un autre compte, consiste à remplacer manuellement le shell par défaut en utilisant su --shell=/bin/bash:

-s, --shell = SHELL
exécuter SHELL si / etc / shells le permet

Le principal avantage de cela est qu'il ne nécessite qu'un accès à un autre compte, pas à un autre compte privilégié .

Xiong Chiamiov
la source
8

Pour des raisons de sécurité, les connexions textuelles ou graphiques et les utilitaires comme suet sudoqui vous permettent d'exécuter des commandes en tant qu'utilisateur différent exécutent toutes ces commandes via le shell de l'utilisateur cible. Si le shell de l'utilisateur cible n'est pas fonctionnel, eh bien, vous avez vu les résultats :-(

À moins que vous n'arriviez à avoir un shell racine encore fonctionnel qui s'exécute quelque part ou quelque chose comme un binaire setuid-root ou quelque chose qui vous permet de contourner cela, le redémarrage et la correction du problème en utilisant un système de sauvetage ou une image en direct est probablement votre meilleur pari.

Démarrez le système de secours, montez le système de fichiers racine de votre vrai système quelque part, par exemple /mnt/foo, et modifiez /mnt/foo/etc/passwdpour réparer le shell. Enregistrez, démontez et vous avez terminé.

Celada
la source
curieux, que se passe-t-il si vous faites cela et que le fichier / etc / passwd est dans un hachage au lieu de texte brut?
jgr208
1
/etc/passwdn'est pas du texte en clair? Je ne l'ai pas vu depuis au moins une décennie. Est-ce encore une chose sur certains systèmes? Quoi qu'il en soit, je suppose chroot /mnt/foo chsh -s /bin/bashque cela pourrait faire l'affaire dans ce cas?
Celada
Je n'ai jamais eu le problème décrit, mais je travaille avec des systèmes verrouillés qui doivent avoir / etc / passwd pas en texte brut afin d'éviter que les pirates informatiques ne compromettent encore plus le système s'ils y ont accès. Hmm qui pourrait fonctionner, disons simplement que j'espère que je n'aurai jamais à essayer de voir si cela fonctionne réellement.
jgr208
J'ai pu modifier / etc / passwd avec sudo à partir d'un compte utilisateur, je ne savais pas que le shell était défini dans ce fichier, merci
ChiseledAbs
@ChiseledAbs oh, tu l'étais? Bon pour vous, heureux d'avoir résolu votre problème. Je ne pensais pas que ça te laisserait.
Celada
6

Ajoutez init=/bin/bashà votre ligne de commande du noyau (si vous démarrez avec grub, appuyez sur epour modifier l'entrée de démarrage), et vous aurez un shell bash fonctionnant en tant que root sans même avoir à fournir un mot de passe. Cependant, votre système de fichiers racine sera toujours monté en lecture seule, vous devrez donc le remonter d'abord, puis vous pourrez modifier le shell avec chsh.

psusi
la source
4

sudo usermod -s /bin/bash jdoe

changera la coquille de jdoe en bash. Vous pouvez ensuite sudo egrep jdoe /etc/passwdvérifier.

user208145
la source