Wie kann man sudo nach "chmod -R 777 / usr / bin" reparieren?

15

Ich trat ein chmod -R 777 /usr/binund jetzt arbeitet sudo nicht.

Es heißt sudo must be setuid root.

Einige Online-Ratschläge sollen laufen chown root:root /usr/bin/sudo chmod 4755 /usr/bin/sudo.

Bei der Eingabe chown root:root /usr/bin/sudowird ein opened in readonly modeFehler angezeigt.

Manojkumar
quelle
1
Sie müssen root sein, um diese Befehle auszuführen
Manoj Kumar: Hat die pkexecMethode in meiner Antwort (die Sie als akzeptiert markiert haben) dieses Problem für Sie gelöst? Ich bin davon überzeugt, dass diese Methode, wie Damien Roche und Oli kommentiert haben, nach erfolgreichem Abschluss eines sudo chmod -R 777 /usr/binBefehls nicht funktioniert . Wie sudo, pkexechat setuid root Arbeit. (Ich bin nicht sicher, warum, da es den Polkit- Dienst verwendet , aber es tut.) Ich denke jedoch, ich habe andere Leute sagen hören, dass dies für sie funktioniert hat, was merkwürdig ist! Hatten Sie Strg + C gedrückt, bevor der 777Befehl chmod beendet war?
Eliah Kagan
Hallo. Diese Methode hat sich bei mir tatsächlich bewährt sudo chmod -R 777 /usr/bin, nachdem ich versehentlich erfolgreich ausgeführt wurde , jedoch erst , nachdem ich mich in das rootKonto eingeloggt habe.
iHowell

Antworten:

10

Ungeachtet des akzeptierten Status bin ich jetzt überzeugt, dass diese Antwort falsch ist . (Ich hoffe, es bald nach Rücksprache mit dem OP über die Annahme zu verbessern.) Ich denke, ich erinnere mich, dass andere sagten, dies habe funktioniert, aber ich glaube, ihre Probleme waren zumindest geringfügig anders. Das hier beschriebene Verfahren bleibt für einige Situationen wertvoll, in denen chmod -R 777 /usr/bines mit Ctrl+ unterbrochen wird Coder auf andere Weise nicht abgeschlossen wird. Aber sobald dies der Fall ist, pkexecist es ebenfalls unbestimmt, und es wird nicht besser funktionieren alssudo , wie Damien Roche und Oli zu Recht bemerkt haben.

Auf einem Ubuntu-Desktop-System ist PolicyKit installiert, pkexecmit dem eine beschädigte sudoausführbare sudoersDatei oder Datei repariert werden kann . Sie müssen nicht in den Wiederherstellungsmodus booten und müssen nicht von einer Live-CD booten. Sie müssen nicht einmal neu starten.

Führen Sie in diesem Fall die folgenden Befehle aus:

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

Weitere Informationen finden Sie in dieser Frage .

Eliah Kagan
quelle
9
pkexec must be setuid root! Was ein Alptraum!
Damien Roche
1
Wie Damien betont, liegt das Problem bei diesem Ansatz pkexecgenau in der gleichen Situation wie sudo. Es ist normalerweise setuid und lebt in /usr/bin. Ich habe es getestet und das funktioniert danach einfach nicht mehr chmod -R 777 /usr/bin.
Oli
@DamienRoche, Oli: Es tut mir leid für nicht diese Fixierung Weg früher! Sie haben beide recht. Ich bin mir nicht sicher, warum pkexecsetuid root erforderlich ist, um zu funktionieren (funktioniert es nicht wie andere nicht-setuid-Prozesse über den polkit-Daemon?), Aber es benötigt dies. Ich habe die Frage kommentiert, um zu sehen, ob das OP (das dies akzeptiert hat) Aufschluss darüber geben kann, ob diese Antwort richtig oder hilfreich ist. Und ich habe ein temporäres Banner oben in diesem Beitrag hinzugefügt, damit ich nicht weiter in die Irre führe. Wenn diese Antwort weiterhin existiert, wird ihre verbesserte Form wahrscheinlich einige Informationen enthalten, die derzeit in diesem Banner enthalten sind.
Eliah Kagan
Du su
könntest
@FliiFe Um die Berechtigungen (oder den Besitz) von Dateien in zu ändern, /usr/binsind Root-Berechtigungen erforderlich. suAuf den meisten Ubuntu-Systemen ist jedoch kein Root-Zugriff möglich, da Root-Anmeldungen standardmäßig deaktiviert sind. Im Gegensatz zu sudound pkexecmüssen Sie, wenn Sie sueine Root-Shell abrufen oder einen Befehl als Root ausführen, das Root-Passwort eingeben, nicht das eigene. Aber root hat kein Passwort standardmäßig in Ubuntu (das heißt , dass die kennwortbasierte Authentifizierung für root wird immer scheitern, nicht , dass ein leeres Passwort eingeben funktionieren würde). Siehe RootSudo für Details.
Eliah Kagan
4

Auch wenn Sie von der Live-CD / Pendrive ausgeführt werden, müssen Sie Ihrem chmodBefehl das Präfix voranstellen sudo. So werden Ihre Schritte wie folgt aussehen:

  1. Booten von einer Live-CD / Pendrive
  2. Überprüfen Sie, ob Ihre Festplatte bereits automatisch aktiviert wurde (und wohin). Wenn nicht, montieren Sie es (siehe unten)
  3. Verwenden Sie sudo chmod 0755 <path>, um die Berechtigungen anzupassen

So finden Sie heraus, wo Ihre Festplatte eingehängt ist: Führen Sie in einem Terminalfenster mount(ohne Argumente) aus. Dies listet alle gemounteten Geräte auf. Überprüfen Sie die typeListe - Sie können alles überspringen, ohne ein "echtes Dateisystem" zu verwenden (Ihre Festplatte verwendet wahrscheinlich entweder ext3 oder ext4 - Sie können sicher Dinge wie proc, sysfs und dergleichen überspringen). Wenn etwas vielversprechend klingt (wie es aussieht /dev/sda1 on /media/sda1 type ext3), überprüfen Sie seinen Inhalt mit, ls /media/sda1um festzustellen, ob es das ist.

Wenn es nicht angebracht ist, können Sie mit den Check - /devEinträgen , wo die Platte sein könnte (unter Verwendung von ls /dev/ |grep '/dev/sdverfügbaren Geräten zu überprüfen, Ihre Festplatte aussehen sollte /dev/sdaX, /dev/sdbXoder dergleichen - mit X eine Zahl ist). Vergleichen Sie dies mit der Liste der gemounteten Geräte. Wenn es nicht vorhanden ist, versuchen Sie es zu mounten und überprüfen Sie den Inhalt (wie oben gezeigt). Um es zu mounten, erstellen Sie zuerst einen Mountpoint, sudo mkdir /mnt/mydiskversuchen Sie dann, das Gerät mit zu mounten mount /dev/sda1 /mnt/mydiskund überprüfen Sie seinen Inhalt mit ls /mnt/mydisk.

Sobald Sie die richtige Scheibe dorthin zu gelangen, können Sie die Berechtigungen wieder auf usr dir ändern gehen Sie zu: sudo chmod 0755 /mnt/mydisk/usr.

Jetzt könnten Sie immer noch Probleme haben, wenn Sie den chmodBefehl ursprünglich rekursiv mit dem -RParameter ausgeführt haben. In diesem Fall können Sie entweder versuchen, jeden Eintrag manuell zu korrigieren - oder Sie können direkt eine Neuinstallation durchführen ...

Izzy
quelle
Ich versuchte Punkt zu erstellen zu montieren, aber ich habe einen Fehler, der lesen Mount - Punkt mnt / mydisk nicht nicht vorhanden ist mydisk mit einigen , was ersetzt werden und nur für das Protokoll schrieb ich mount /dev/sda /mnt/mydiskausroot@Ubuntu:/dev#
vin
Sie haben a) diesen Einhängepunkt (Verzeichnis) erstellt, bevor Sie den Einhängebefehl (wie beschrieben) abgesetzt haben, und b) auch den führenden Schrägstrich berücksichtigt? Versuchen Sie es mkdir -p /mnt/mydisk && mount /dev/sda1 /mnt/mydisk(Ich glaube nicht, dass Sie keine Partitionen haben /dev/sda, daher müssen Sie auch die Partitionsnummer verpasst haben. Stellen Sie sicher, dass Sie das richtige Gerät angeben (oder die Bereitstellung schlägt fehl).
Izzy
1

Ich denke, Mat hat recht, Sie müssen root sein, um das Bit zu / usr / bin hinzuzufügen, aber natürlich ist sudo kaputt. Wenn Sie ein root-Passwort haben, können Sie sich damit als root anmelden und dann die Berechtigungen mit dem obigen Befehl korrigieren. Wenn Sie dies jedoch nicht tun (und ich auch nicht), ist es wahrscheinlich am besten,

  • Booten Sie von einer Linux-Live-CD
  • werde dort Wurzel
  • Mounten Sie die Partition mit dem obigen System
  • Richten Sie dann die Berechtigungen für dieses Dateisystem mithilfe eines Terminals gerade aus.

Root ist immer die Benutzernummer 0, damit Root auf jedem System Änderungen vornehmen kann, die Root auf anderen Dateisystemen erlauben.

John S Gruber
quelle
1

Ich habe nicht viel Wissen. Aber diese Schritte lösten mein Problem auch ohne Neustart meiner Maschine. Folge diesen Schritten:

su root
<enter root password>
cd /usr
chmod -R 755 *
Manu Mohan Thekkedath
quelle
1
Ihnen fehlt mindestens ein "cd" -Befehl. Wenn du das so machst, machst du das "chmod" im Home-Verzeichnis für root. Das wird alles noch schlimmer machen.
Rinzwind
thaks ... bearbeitete meine Antwort ... ich war in / usr Ordner
Manu Mohan Thekkedath
2
Dies funktioniert nur, wenn ein Passwort festgelegt ist root, was nicht die Standardkonfiguration von Ubuntu ist.
David Foerster
1

Beim Versuch, Berechtigungen für meine lokalen Skripts festzulegen, habe ich die sudo-Berechtigung verletzt und versehentlich den Besitzer gewechselt. Ich konnte den Besitz von sudo auf root zurücksetzen, indem ich Folgendes ausführte:

Schritt 1: Wechseln Sie in den Ubuntu-Wiederherstellungsmodus . Wenn Sie den Vorgang nicht kennen, können Sie hier eine Antwort eingeben: /ubuntu//a/172346/223901

Schritt 2: Sobald Sie sich im Wiederherstellungsmodus befinden, wählen Sie root - Drop to root shell prompt

Schritt 3: Führen Sie die folgenden Befehle aus

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

Warten Sie, bis Ihr System normal gebootet ist und Sie sehen, dass sudo wieder als root angemeldet ist.

ramsudharsan
quelle