Comment réparer sudo après "chmod -R 777 / usr / bin"?


15

Je suis entré chmod -R 777 /usr/binet maintenant sudo ne fonctionne pas.

Ça dit sudo must be setuid root.

Certains conseils en ligne ont dit de fonctionner chown root:root /usr/bin/sudo chmod 4755 /usr/bin/sudo.

En entrant, chown root:root /usr/bin/sudoil affiche une opened in readonly modeerreur.


1
Vous devez être root pour exécuter ces commandes

Manoj Kumar: Est-ce que la pkexecméthode dans ma réponse (que vous avez marqué comme accepté) résoudre ce problème pour vous? Je suis devenu convaincu que, comme l'ont fait remarquer Damien Roche et Oli, cette méthode ne fonctionne pas réellement après l' sudo chmod -R 777 /usr/binexécution d' une commande . Comme sudo, pkexecdoit être setuid root pour fonctionner. (Je ne sais pas pourquoi, car il utilise le service polkit , mais il le fait.) Cependant, je pense avoir entendu d'autres personnes dire que cela a fonctionné pour eux, ce qui est curieux! Aviez-vous appuyé sur Ctrl + C avant la fin de la 777commande chmod?
Eliah Kagan

Bonjour. Cette méthode a réellement fonctionné pour moi après une exécution accidentelle réussie sudo chmod -R 777 /usr/bin, mais uniquement après la connexion au rootcompte.
iHowell

Réponses:


10

Nonobstant le statut accepté, je suis maintenant convaincu que cette réponse est erronée . (J'espère l'améliorer bientôt, après avoir consulté le PO au sujet de l'acceptation.) Je pense que je me souviens que d'autres ont dit que cela fonctionnait, mais je pense que leurs problèmes étaient au moins légèrement différents. La méthode décrite ici reste valable pour certaines situations où chmod -R 777 /usr/binest interrompu avec Ctrl+ Cou sinon ne se termine pas. Mais une fois que c'est le cas, cela pkexecn'est pas non plus défini et cela ne fonctionnera pas mieux quesudo , comme l'ont justement commenté Damien Roche et Oli.

Sur un système de bureau Ubuntu, PolicyKit est installé, il pkexecpeutsudosudoers donc être utilisé pour réparer un fichier exécutable ou un fichier cassé . Vous n'avez pas besoin de démarrer en mode de récupération et vous n'avez pas besoin de démarrer à partir d'un CD live. Vous n'avez même pas besoin de redémarrer.

Dans ce cas, exécutez les commandes suivantes:

pkexec chown root:root /usr/bin/sudo
pkexec chmod 4755 /usr/bin/sudo

Voir cette question pour plus d'informations.


9
pkexec must be setuid root! Quel cauchemard!
Damien Roche

1
Comme le souligne Damien, le problème avec cette approche est pkexecexactement dans la même situation que sudo. C'est normalement setuid et vit /usr/bin. Je l'ai testé et cela ne fonctionne plus chmod -R 777 /usr/bin.
Oli

@DamienRoche, Oli: Je suis désolé de ne pas fixer cette façon plus tôt! Vous avez raison tous les deux. Je ne sais pas pourquoi la pkexecracine setuid doit fonctionner (ne fonctionne-t-elle pas via le démon polkit comme les autres processus non-setuid?), Mais elle en a besoin. J'ai commenté la question pour voir si le PO (qui l'a accepté) peut faire la lumière sur ce qui, le cas échéant, est juste ou utile à propos de cette réponse. Et j'ai ajouté une bannière temporaire en haut de ce message afin de ne pas induire en erreur. Si cette réponse continue d'exister, sa forme améliorée incorporera probablement quelques informations actuellement dans cette bannière.
Eliah Kagan

Vous pouvez simplement utiliser su, qui se trouve sous / bin
FliiFe

@FliiFe La fixation des autorisations (ou de la propriété) des fichiers dans /usr/binnécessite des privilèges root, mais vous ne pouvez pas surooter sur la plupart des systèmes Ubuntu car les connexions root sont désactivées par défaut. Contrairement à sudoet pkexec, lorsque vous utilisez supour obtenir un shell root ou pour exécuter une commande en tant que root, vous devez fournir le mot de passe de root, pas le vôtre. Mais root n'a pas de mot de passe par défaut dans Ubuntu (c'est-à-dire que l'authentification par mot de passe pour root échouera toujours, pas que la saisie d'un mot de passe vide fonctionnerait). Voir RootSudo pour plus de détails.
Eliah Kagan

4

Même lors de l'exécution à partir du CD / Pendrive en direct, vous devez préfixer votre chmodcommande avec sudo. Vos étapes seront donc les suivantes:

  1. démarrer à partir d'un CD live / Pendrive
  2. vérifiez si votre disque a déjà été monté automatiquement (et où). Sinon, montez-le (voir ci-dessous)
  3. utiliser sudo chmod 0755 <path>pour ajuster les autorisations

Comment savoir où votre disque est monté: à partir d'une fenêtre de terminal, exécutez mount(sans arguments). Cela répertoriera tous les périphériques montés. Vérifiez la typeliste - vous pouvez ignorer tout ce qui n'utilise pas un "vrai système de fichiers" (votre disque utilise probablement ext3 ou ext4 - vous pouvez certainement ignorer des choses comme proc, sysfs et autres). Si quelque chose semble prometteur (ressemblant à /dev/sda1 on /media/sda1 type ext3), vérifiez son contenu en utilisant ls /media/sda1pour voir si c'est ça.

S'il n'est pas monté, vous pouvez vérifier avec les /deventrées où le disque pourrait être (en utilisant ls /dev/ |grep '/dev/sdpour vérifier les périphériques disponibles; votre disque devrait ressembler /dev/sdaX, /dev/sdbXou similaire - avec X étant un nombre). Comparez cela avec la liste des appareils montés. S'il n'est pas là, essayez de le monter et vérifiez son contenu (comme indiqué ci-dessus). Pour le monter, créez d'abord un point de montage, par exemple sudo mkdir /mnt/mydisk, puis essayez de monter le périphérique à l'aide mount /dev/sda1 /mnt/mydisket vérifiez son contenu à l'aide ls /mnt/mydisk.

Une fois que vous obtenez le bon disque là - bas, vous pouvez aller modifier les autorisations retour sur votre répertoire usr: sudo chmod 0755 /mnt/mydisk/usr.

Maintenant, vous pouvez toujours avoir des problèmes si vous avez initialement exécuté la chmodcommande récursivement, en utilisant le -Rparamètre. Dans ce cas, vous pouvez soit essayer de corriger chaque entrée manuellement - soit aller directement pour une nouvelle installation ...


J'ai essayé de créer le point de montage, mais je suis une erreur qui se lit point de montage mnt / mondisque n'existe est mondisque être remplacé par quelque chose et pour le compte rendu je l' ai écrit mount /dev/sda /mnt/mydiskderoot@Ubuntu:/dev#
vin

Vous avez a) créé ce point de montage (répertoire) avant d'émettre la commande de montage (comme décrit) et b) avez également pris soin de la barre oblique principale ? Essayez mkdir -p /mnt/mydisk && mount /dev/sda1 /mnt/mydisk(je ne pense pas que vous n'ayez pas de partitions /dev/sda, vous devez donc également avoir manqué le numéro de partition. Assurez-vous de spécifier le bon périphérique (ou le montage échouera).
Izzy

1

Je pense que Mat a raison, vous devez être root pour ajouter le bit à / usr / bin, mais bien sûr sudo est cassé. Si vous avez un mot de passe root, vous pouvez l'utiliser pour vous connecter en tant que root, puis corriger les autorisations avec la commande ci-dessus. Si vous ne le faites pas, cependant (et moi non plus), il serait probablement préférable de:

  • démarrer à partir d'un CD live Linux
  • devenir racine là-bas
  • monter la partition avec le système ci-dessus
  • puis redressez les autorisations sur ce système de fichiers à l'aide d'un terminal.

Root est toujours le numéro d'utilisateur 0, donc root sur n'importe quel système peut effectuer des modifications autorisées sur root sur d'autres systèmes de fichiers.


1

Je n'ai pas beaucoup de connaissances. Mais ces étapes ont résolu mon problème même sans redémarrer ma machine. Suivez ces étapes:

su root
<enter root password>
cd /usr
chmod -R 755 *

1
Il vous manque au moins une commande "cd". Si vous le faites comme ça, vous faites le "chmod" sur le répertoire home pour root. Cela aggravera les choses.
Rinzwind

thaks ... édité ma réponse ... j'étais dans le dossier / usr
Manu Mohan Thekkedath

2
Cela ne fonctionne que si un mot de passe est défini pour root, ce qui n'est pas la configuration par défaut d'Ubuntu.
David Foerster

1

Dans une tentative de définir des autorisations pour mes scripts locaux, j'ai rompu l'autorisation sudo et changé de propriétaire, par erreur. J'ai pu rétablir la propriété de sudo en root en procédant comme suit:

Étape 1: Passez en mode de récupération ubuntu . Si vous n'êtes pas au courant du processus, vous pouvez renvoyer une réponse ici: /ubuntu//a/172346/223901

Étape 2: Une fois en mode de récupération, sélectionnez root - Invite Drop to root shell

Étape 3: effectuez les commandes suivantes

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

Attendez que votre système démarre normalement et vous verrez la propriété de sudo revenir à la racine.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.