Warum habe ich kein Passwort für "su"? Probleme mit "sudo"

34

Ich habe Ubuntu über die GUI installiert und mir ein Passwort und alles gegeben. Ich kann mich nicht genau an den Vorgang erinnern. Was mich jedoch beunruhigt, ist, dass ich das folgende Passwort nicht kenne:

$ su
Password: <the only password I've ever created on this machine>
su: Authentication failure

Ich weiß nur nicht, was ich tun soll. Ich bin nicht in Schwierigkeiten, aber ich möchte nur wissen, was hier los ist. Ich kann mich auch aus Verzeichnissen ausschließen:

starkers@ubuntu:~/Desktop$ mkdir foobs
starkers@ubuntu:~/Desktop$ sudo chmod 777 -R foobs
sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700
[sudo] password for starkers: <the only password I've ever created on this machine> 
starkers@ubuntu:~/Desktop$ cd foobs
bash: cd: foobs: Permission denied

Ich bin nur ein bisschen verwirrt. Wie kann ich mich so aussperren? Ich denke, das sudoist der Schlüsselbefehl hier. Aber ich mache die foobsDatei so offen, wie es nur möglich ist. chmodWarum sperrt sie mich dann aus?

Starkers
quelle
6
Dies sollten Sie so gut wie nie tun chmod -R 777 whatever, es sei denn, Sie möchten ein großes Sicherheitsrisiko verursachen.
1
@BroSlow Danke für die Spitze. Außerhalb dieser Frage, aber wie würde man sicher Lese- und Schreibrechte für ein Verzeichnis festlegen? 666?
Starkers
1
Auf jeden Fall besser, hängt aber davon ab, was Sie versuchen zu tun. Brauchen Sie zB wirklich alle Benutzer, um r / w Zugriff auf alles zu haben? Wenn nicht, könnten Sie so etwas wie 644 machen (nur für alle außer Ihnen lesbar). Und im Allgemeinen würde ich sehr vorsichtig sein, wenn ich rekursiv mache, chmoddass nur die von Ihnen beabsichtigten Dateien geändert werden.
1
@broslow Bist du high? 666 ist 1) immer noch schreibbar und daher das gleiche Sicherheitsrisiko, und 2) entfernt das ausführbare Bit, was bedeutet, dass er nicht mehr in der Lage ist, chdir in dieses Verzeichnis zu schreiben.
Shadur
@Starkers Das eigentliche Sicherheitsproblem, das ich hier sehe, ist, dass aus irgendeinem wahnsinnigen Grund festgelegt /var/lib/sudoist, dass es weltweit beschreibbar ist. Dies sollte nicht passieren und Sie sollten versuchen herauszufinden, warum es passiert ist .
Shadur

Antworten:

49

Standardmäßig ist das rootKonto superuser ( ) deaktiviert und hat kein Kennwort. Sie können eine erstellen, indem Sie Folgendes ausführen:

$ sudo passwd root

Sie können sich dann sumit diesem Kennwort als root anmelden .

Was chmodwäre der korrekte Befehl sein:

$ chmod 777 -R foobs

Sie können auch verwenden:

$ sudo -i

Melden Sie sich mit Ihrem Passwort als root an (ohne ein root-Passwort wie oben beschrieben zu erstellen).

Oli
quelle
4
@Oli Vielleicht kannst du deine Frage bearbeiten und hinzufügen sudo su. Dies gibt auch permanente Rechte im Terminal.
Aufwachen
13
Nicht verwenden sudo su, da dies die Umwelt schädigt und die Dinge zerbrechen. Verwenden Sie stattdessen sudo -i.
Strugee
20
Legen Sie kein root-Passwort fest. Legen Sie kein root-Passwort fest.
Wchargin
4
chmod 777 ist fast immer schlecht (Sticky Bit ist ausgenommen; wie mit / tmp verwendet). Diese Antwort ist ein Sicherheitsrisiko. Das Festlegen eines root-Passworts ist nicht die Art und Weise, wie Ubuntu verwendet werden sollte. wieder ein Sicherheitsrisiko einladen. Bitte folgen Sie der Antwort von neon_overload.
Rinzwind
4
@WChargin, warum schlagen Sie vor, kein Root-Konto / Passwort zu haben? Ich bin wirklich neugierig als Archlinux-Benutzer.
Rob
67

1. Warum hast du kein root Passwort?

Sie können zwar ein Kennwort für das Superuser-Konto erstellen, mit dem Sie sich als root anmelden können su, es ist jedoch erwähnenswert, dass dies nicht die übliche Vorgehensweise mit Ubuntu (oder zunehmend auch mit anderen Distributionen) ist. Ubuntu wählt nicht eine root - Login und Passwort standardmäßig für einen Grund zu geben. Stattdessen werden bei einer Ubuntu-Standardinstallation sudoSuperuser-Berechtigungen vergeben. In einer Ubuntu-Standardinstallation erhält die Person, die das Betriebssystem installiert hat, standardmäßig die Berechtigung "sudo".

Jeder mit vollständiger "sudo" -Erlaubnis kann etwas "als Superuser" ausführen, indem er sich sudoan seinen Befehl anhängt . Um beispielsweise apt-get dist-upgradeals Superuser zu arbeiten, können Sie Folgendes verwenden:

sudo apt-get dist-upgrade

Sie werden diese Verwendung von sudo so ziemlich überall sehen, wo Sie ein Tutorial über Ubuntu im Web lesen. Es ist eine Alternative dazu.

su
apt-get dist-upgrade
exit

Mit sudo legen Sie im Voraus fest, welche Benutzer sudo-Zugriff haben. Sie müssen sich kein Root-Passwort merken, da sie ein eigenes Passwort verwenden. Wenn Sie mehrere Benutzer haben, können Sie den Superuser-Zugriff widerrufen, indem Sie einfach die sudo-Berechtigung entfernen, ohne das Root-Kennwort ändern und alle Benutzer über ein neues Kennwort benachrichtigen zu müssen. Sie können sogar auswählen, welche Befehle ein Benutzer mit sudo ausführen darf und welche Befehle für diesen Benutzer verboten sind. Und schließlich kann bei einer Sicherheitsverletzung in einigen Fällen ein besserer Prüfpfad hinterlassen werden, der angibt, welches Benutzerkonto gefährdet wurde.

Mit Sudo ist es einfacher, einen einzelnen Befehl mit Superuser-Rechten auszuführen. Mitsu Sie dauerhaft zu einer Superuser-Shell, die mit exitoder beendet werden muss logout. Dies kann dazu führen, dass Benutzer länger als nötig in der Superuser-Shell bleiben, nur weil dies praktischer ist als ein späteres Aus- und erneutes Anmelden.

Mit sudo haben Sie weiterhin die Möglichkeit, eine permanente (interaktive) Superuser-Shell mit dem folgenden Befehl zu öffnen:

sudo su

... und das geht immer noch ohne root Passwort, weil sudo der suBefehl Superuser-Rechte hat .

Und in ähnlicher Weise können Sie anstelle su -einer Login-Shell auch sudo su -deren Verknüpfung verwenden sudo -i.

Dabei müssen Sie jedoch lediglich berücksichtigen, dass Sie für jeden Befehl als Superuser fungieren. Es ist ein gutes Sicherheitsprinzip, nicht länger als nötig als Superuser zu bleiben, nur um die Möglichkeit zu verringern, versehentlich Schäden am System zu verursachen (ohne diese können Sie nur Dateien beschädigen, die Ihrem Benutzer gehören).

Um dies zu verdeutlichen, können Sie dem Root-Benutzer ein Passwort geben, mit dem Sie sich wie in @ Olis Antwort beschrieben als Root anmelden können, wenn Sie die Dinge stattdessen auf diese Weise ausführen möchten. Ich wollte Sie nur über die Ubuntu-Konvention des Bevorzugens sudoinformieren und Ihnen mitteilen, dass es eine Alternative gibt.


2. Die Probleme mit Ihrem Befehl chmod 777 -R

Ihre Frage hat auch einen zweiten Teil: Ihre Probleme mit dem Befehl sudo chmod 777 -R foobs .

Erstens weist die folgende Warnung auf ein potenziell schwerwiegendes Sicherheitsproblem auf Ihrem Computer hin:

sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700

Dies bedeutet, dass Sie irgendwann festgelegt haben, dass Sie /var/lib/sudovon der Welt aus beschreibbar sind. Ich stelle mir vor, Sie haben das irgendwann mit einem Befehl wie getan sudo chmod 777 -R /. Leider haben Sie auf diese Weise wahrscheinlich alle Dateiberechtigungen in Ihrem gesamten System verletzt. Es ist unwahrscheinlich, dass dies die einzige wichtige Systemdatei ist, deren Berechtigungen dahingehend geändert wurden, dass sie weltweit beschreibbar sind. Grundsätzlich haben Sie jetzt ein leicht hackbares System, und die einzige einfache Möglichkeit, es wieder herzustellen, ist die Neuinstallation.

Zweitens der Befehl, den Sie verwendet haben:

sudo chmod 777 -R foobs

Wenn Sie Dateien in Ihrem Home-Verzeichnis bearbeiten ~/Desktop, sollten Sie in diesem Fall nicht verwenden müssensudo . Alle Dateien, die Sie in Ihrem Home-Verzeichnis erstellen, sollten sowieso von Ihnen geändert werden können (und wenn nicht, passiert etwas Lustiges).

Außerdem müssen Sie sich der Konsequenzen bewusst sein, die sich aus einer massenhaften Änderung von Dateiberechtigungen ergeben, z. In diesem Fall ändern Sie sorgfältig die Dateiberechtigungen so, dass sie von der Welt beschreibbar sind. Jeder andere Benutzer oder eine fehlerhafte Serversoftware auf dem Computer hat möglicherweise einfachen Zugriff auf das Überschreiben all dieser Dateien und Verzeichnisse.

Es ist fast sicher, dass chmod 777 -R [dir]es nicht ist geeignete Lösung für jedes Problem ist, das Sie zu lösen versuchten (und wie oben erwähnt, gibt es Hinweise darauf, dass Sie dies auch für Systemdateien in / var / lib getan haben, und ich gehe davon aus, dass es sich um viele andere handelt setzt).

Ein paar grundlegende Faustregeln:

  • Wenn Sie nur mit Ihren eigenen Dateien in Ihrem Home-Verzeichnis, Desktop usw. herumspielen, sollten Sie niemals sudoBenutzer- oder Superuser-Rechte benötigen . Wenn Sie dies tun, ist dies ein Warnsignal dafür, dass Sie etwas falsch machen.

  • Sie sollten Systemdateien, die sich im Besitz von Paketen befinden, niemals manuell ändern. Ausnahme: Es sei denn, Sie tun dies auf eine Weise, die von diesen Paketen dokumentiert wird, beispielsweise durch Ändern ihrer Konfiguration in /etc. Dies gilt auch für das Ändern von Dateiberechtigungen. Wenn ein Tutorial oder der Versuch, das Problem zu beheben, sudoSuperuser-Rechte erfordert und es sich nicht einfach um eine Änderung an einer Konfiguration in / etc / handelt, ist dies ein Warnsignal dafür, dass Sie etwas falsch gemacht haben.

thomasrutter
quelle
Ehrfürchtige Erklärung .. Daumen hoch .. :)
Saurav Kumar
7
Ich denke, "sudo -i" ist der "offizielle" Weg, um eine Root-Shell zu bekommen, anstatt "sudo su"
Max
3
Ja, Sie sollten sudo -iüber verwenden sudo su.
Seth
sudo -i(oder sudo su -) sind nicht allgemein besser, sondern nur anders - diese starten eine Login- Shell, die eine Root-Benutzer-Login-Umgebung simuliert, die zum Beispiel die .profileDatei oder die .loginDatei des Root-Benutzers ausführt . Diese sind besser, wenn Sie möchten, dass die Umgebung in der Shell eher einer Root-Anmeldeshell als einer interaktiven Shell ähnelt, die Superuser-Berechtigungen zufällt. Es ist wahrscheinlich besser, die Login-basierten Shells zu verwenden, wenn Sie eine Shell verwenden. Dies ist jedoch umstritten: Die Antwort lautet, dass Ubuntu hauptsächlich für die sudoAusführung von Befehlen mit Superuser-Rechten entwickelt wurde.
Thomasrutter