Comment récupérer sudo sur Ubuntu?

12

Je l'ai fait:

sudo chown -R myname /usr/

et maintenant je ne peux pas utiliser la sudocommande à cause de cette erreur:

sudo: doit être root setuid

Et comme je l'ai lu, cela signifie que le propriétaire de ce fichier /usr/bin/sudon'est pas la racine. C'est mon utilisateur maintenant à cause du chown sur le /usrdossier.

Sur de nombreux forums et blogs, les gens suggèrent de le faire en tant que root:

# chown root:root /usr/bin/sudo
# chmod 4111 /usr/bin/sudo

... mais le problème avec cela est que je dois me connecter en tant que root, mais je ne peux pas parce que si j'écris sudans le terminal, le mot de passe est incorrect (en fait j'utilise le mot de passe que j'ai ajouté à mon utilisateur):

$ su
Password:
su: Authentication failure

Puis-je récupérer la sudocommande?

Edit: Mon Ubuntu est sous Paralells sur mon Mac OS X.

Adam
la source
Qu'entendez-vous par «J'utilise le mot de passe que j'ai ajouté à mon utilisateur»? Lorsque vous utilisez su, vous serez invité à entrer le mot de passe de root , pas le mot de passe de votre utilisateur comme avec sudo. Connaissez-vous le mot de passe root de cette machine?
Caleb
Non, je n'ai jamais eu besoin de l'ajouter ou de le modifier, y a-t-il un défaut?
Adam
Vous devez redémarrer en mode mono-utilisateur. Quelle distribution utilisez-vous?
Gilles 'SO- arrête d'être méchant'
1
Juste curieux, mais qu'est-ce qui vous a poussé à diriger un projet sudo chmod -R cirk:cirk /usr? Qu'essayiez-vous d'accomplir?
loosecannon
1
Un programme qui a été installé quelque part dans / usr / puisque je ne connaissais pas l'emplacement exact du programme, j'ai décidé d'utiliser chown sur l'ensemble du dossier usr, et parce que je suis un noob, j'ai tout foutu à nouveau: P
Adam

Réponses:

5

Si vous avez un système similaire que vous pouvez utiliser comme guide pour voir quelle est la propriété appropriée pour tous les fichiers, vous pouvez démarrer en mode de secours, passer à un shell racine et restaurer manuellement la propriété correcte à tous les fichiers /usr.

Le moyen le plus rapide peut être de réinstaller votre système d'exploitation ou de restaurer à partir d'une sauvegarde.

Dans Ubuntu ou similaire, il n'y a pas de mot de passe root par défaut (le compte est désactivé), c'est pourquoi vous ne pouvez pas su.

psusi
la source
8
Woah, allez-y doucement, ce n'est pas la réinstallation de Windows qui n'est pas toujours le moyen le plus simple ou le plus rapide de faire quoi que ce soit et n'enseigne certainement pas aux gens comment résoudre les problèmes. Dans ce cas, tout ce qu'il doit faire est d'inverser l'action qu'il a prise, ce qui peut facilement être fait en montant le système de fichiers dans un autre environnement comme un LiveCD ou le mode de secours que vous avez suggéré (en fonction de la distribution).
Caleb
@Caleb lorsque vous supprimez complètement les autorisations sur un morceau majeur du système de fichiers qu'il est. Il n'a pas simplement foiré sudo, il a probablement oublié de mentionner dans son message qu'il avait utilisé -R (sinon cela n'aurait changé que le propriétaire du répertoire / usr lui-même et non sudo). J'ai également décrit comment inverser le processus, mais c'est une tâche très longue et laborieuse.
psusi
1
C'est un cas de chownnon chmod. Étant donné que tout dans le /usrdossier devrait être root:root, cela devrait être une solution facile, pas la correction minutieuse qu'un chmodclobber signifierait.
Caleb
2
@Caleb tout n'est pas dans / usr root: root.
psusi
6
@Caleb chownréinitialise les bits setxid. Il y a quelques fichiers /usrqui n'appartiennent pas à la racine; plus qui sont dans un groupe différent (en particulier les programmes setgid en /usr/bin).
Gilles 'SO- arrête d'être méchant'
11

Étant donné que vous avez appliqué les autorisations sur la seule chose qui vous donne un accès au niveau racine, vous aurez besoin de l'aide de l'extérieur du logiciel actuel pour résoudre ce problème.

Je suggère que le moyen le plus simple consiste à démarrer un LiveCD pour votre distribution, à monter votre lecteur et à modifier les autorisations de fichier à l'aide de ce que chmodvous avez répertorié à partir de là.

Vous pouvez également essayer de démarrer en mode mono-utilisateur afin d'obtenir un shell racine.

Sachez que généralement tout ce qui se trouve dans le /usr/répertoire devrait appartenir root, vous devriez donc être en mesure de faire un récursif chownpour réparer tout ce que vous avez cassé. ( Edit: Per @Gilles commentaires en cours d' exécution apparemment chownpauses setuid et les bits setgid, vous aurez besoin de comparer manuellement à un système existant pour restaurer toutes les fois que vous fixer à nouveau la propriété.)

Cependant, très FEW devrait être 4111. Celui-ci est une autorisation spéciale mais qui le fait s'exécuter en tant que root même lorsqu'il est exécuté en tant qu'utilisateur! Seules sudoet quelques commandes sélectionnées devraient avoir ce bit d'autorisation défini. Si vous n'avez pas exécuté un chmodpour commencer, vous n'avez probablement pas besoin de résoudre ce problème , toutes les autorisations doivent déjà être correctes. N'exécutez pas une grosse chmodopération sans savoir quelles sont toutes les autorisations.

Caleb
la source
Est-ce possible si le système d'exploitation est dans une machine virtuelle?
Adam
Oui, cela ne fait aucune différence. Vous pouvez utiliser le niveau d'exécution 1 (quelque chose que vous pouvez faire au tout début du processus de démarrage à partir de grub / lilo ou wahtever votre chargeur de démarrage) ou vous pouvez configurer la machine virtuelle pour utiliser une image ISO du LiveCD comme périphérique de démarrage.
Caleb
aham, bien avant de le réinstaller, je vais essayer votre conseil :)
Adam
ok je pense que je suis dans le LiveCD, maintenant je dois écrire ceci dans le terminal? sudo chown -R root /usr/?
Adam
Vous commencez avec ça, mais pas sur /usrle LivdCD, vous devez le monter quelque part et courir contre ce chemin, disons /mnt/mydrive/usr. Ensuite, vous devrez fixer le bit setuid /mnt/mydrive/usr/bin/sudo. Ensuite, regardez dans / usr sur le livecd et voyez s'il y a d'autres propriétaires que root. find /usr -not -uid 0et changez-les pour qu'ils correspondent. Ensuite, recherchez les éléments qui ont des bits setuid ou setgid différents et assurez-vous qu'ils correspondent également. Si vous avez un vrai système Ubunutu à comparer, ce serait mieux.
Caleb
4

En mode de récupération Ubuntu, entrez les commandes suivantes .. Cela a résolu le problème pour moi ..

mount -o remount,rw /
mount --all
chown root:root /usr/bin/sudo
chmod 4755 /usr/bin/sudo
restart

J'espère que cela résoudra votre problème (ou celui de quelqu'un d'autre)

J'ai trouvé celui-ci ici dans cet article de blog .

Utilisateur Ubuntu
la source
2

C'est beaucoup plus facile que ne le suggèrent les autres réponses. Pas besoin de formater, redémarrer ou utiliser un CD live.

su root # then enter your password to switch to root user
chown root:root /usr/bin/sudo && chmod 4755 /usr/bin/sudo
exit # to get back to the original user

C'est le moyen le plus simple de résoudre ce problème. Explication, sudo est corrompu (je sais que corrompu n'est pas le bon terme, mais il ne fonctionne pas, nous devons donc éviter d'utiliser sudo)

  • En utilisant la commande 1 (su root) , nous changeons l'utilisateur en root sans utiliser sudo.
  • En utilisant la commande 2 (racine chown: root / usr / bin / sudo && chmod 4755 / usr / bin / sudo) , nous fixons les autorisations / la propriété de sudo.
  • En utilisant la commande 3 (exit) , nous revenons à l'utilisateur d'origine.

J'ai testé cette méthode sur Linux mint. C'est un système de type ubuntu. Faites-moi savoir que cette méthode ne fonctionne sur aucun autre système d'exploitation. Met à jour la réponse en conséquence.

Merci

divyenduz
la source
si je comprends bien, par défaut, le compte root n'a pas de mot de passe, il est donc impossible de fournir le mot de passe à la première étape su root, et parce que sudocela ne fonctionne pas, il est impossible de définir le mot de passe root
TitanFighter
1
Merci, ça m'a aidé.
Arun
1

C'est plus simple que les gens ne le font. Essayez ce qui suit:

  1. Au lieu d'essayer de vous connecter en tant que root en utilisant la sucommande cassée , déconnectez-vous en tant qu'utilisateur actuel et reconnectez-vous en tant que root via votre gestionnaire d'affichage normal (c'est-à-dire l'écran de connexion).
  2. Exécutez les opérations suivantes au terminal: chown root:root /usr/bin/sudo && chmod 4755 /usr/bin/sudo

Cela devrait corriger la sudocommande et vous permettre de redémarrer en un rien de temps.

user7089
la source
0

Pour vous connecter en tant que root, sans su ou sudo, vous pouvez utiliser pkexec:

pkexec su

Modifiez maintenant les autorisations des fichiers:

chmod 440 /etc/sudoers
chmod 775 /etc/sudoers.d
chmod 440 /etc/sudoers.d/README
Jagmeet Singh Bains
la source