Puis-je lancer un processus en tant que root sans lancer le shell de connexion de root?

8

J'ai essayé de changer le shell de connexion.

Voici à quoi ressemble la première ligne /etc/passwd(sur une installation Debian Wheezy):

rootx:0:0:root:/root:/:zsh

Lorsque j'essaye de me connecter en tant que root:

Cannot execute zsh: No such file or directory

Je sais zshest disponible:

$ which zsh
/usr/bin/zsh

D'accord, il semble logique de remplacer zshpar son chemin complet. Mais comment faire?

J'ai un autre utilisateur sur le système ( user), mais il n'a pas de privilèges root et sudon'est pas installé sur le système.

Supposons que pour une raison quelconque (cryptage, accès physique, ...) je ne peux pas démarrer sur un CD live pour modifier le fichier.

Je connais cependant les informations d'identification du rootcompte.

Ma question est: existe-t-il un moyen, même par programme, de lancer un processus avec le rootcompte sans lancer son shell de connexion au préalable?

rahmu
la source
qu'en est-il su? ou gksu? quelque chose commesu -c 'sed -i s,root:/:zsh,root:/:/usr/bin/zsh, /etc/passwd'
qdii
La ligne du fichier passwd ne devrait-elle pas être / usr / bin / zsh? Pourquoi avez-vous mis juste la chaîne zsh?
slm
@slm C'est le changement que le PO veut faire ...
un CVn
1
si la suggestion @qdii fonctionne (c'est-à-dire que su -c "<commands>") fonctionne ... ne pourrions-nous pas alors simplement utiliser su -c "/bin/bash"pour accéder à un bash de travail avec la racine utilisateur ?
humanANDpeace
1
@humanityANDpeace: ce n'est pas censé fonctionner. La commande passée à -cest exécutée via le shell de connexion de l'utilisateur. -speut être utilisé pour utiliser un autre shell ... uniquement si le shell de connexion existant est valide ou si l'invocateur est root.
Mat

Réponses:

4

Avoir des autorisations su

Vous pouvez utiliser la commande suivante pour modifier le shell de n'importe quel utilisateur.

su -c "/usr/bin/chsh -s /bin/bash root"

Si vous avez un accès physique

Pendant votre démarrage Grub, vous pouvez accéder à n'importe quel système tant que vous avez accès à la console et qu'aucun mot de passe ne vous empêche d'accéder au menu Grub.

Lors du démarrage initial du système lorsque le menu Grub apparaît, si vous entrez dans le menu et modifiez (appuyez sur la etouche) la ligne du noyau, vous pouvez ajouter l'une des choses suivantes pour faire démarrer le noyau en mode mono-utilisateur.

  • Célibataire
  • init = / bin / sh
  • 1

La ligne ressemblera à ceci:

 kernel /vmlinuz-2.6.15-27-386 root=/dev/mapper/Ubuntu-root ro init=/bin/bash

Dans Grub, cela devrait ressembler à ceci:

       ss of grub

Une fois les modifications effectuées, démarrez le noyau (appuyez sur la touche b).

Cela vous donnera un accès temporaire au système avec un shell où vous pouvez utiliser vi / vim pour apporter les modifications dont vous avez besoin à votre /etc/passwdfichier. Tapez simplement rebootlorsque vous avez terminé.

slm
la source
2
Il dit qu'il n'a pas d'accès physique, donc il ne sera probablement pas en mesure de voir le menu GRUB.
Renan
@Renan. OK, je n'ai pas compris cela dès les premières lectures. Il est caché dans la ligne sur le "... je ne peux pas démarrer sur un CD live .." qui est étrangement formulé pour moi.
slm
4
Votre sucommande ne fonctionnera pas, car elle essaiera d'invoquer le shell de root, qui n'existe pas.
Gilles 'SO- arrête d'être méchant'
@Gilles: Vous avez d'autres idées? Je ne vois pas de moyen de résoudre ce problème sans accès physique. Sentez-vous que nous travaillons exactement contre ce que le système a été conçu pour empêcher à ce stade.
slm
1
@slm Sans sudo, je pense que le compte root est verrouillé, donc un accès physique est requis.
Gilles 'SO- arrête d'être méchant'