Wie entscheidet sudo, ob ein Passwort abgefragt werden soll, wenn ein Befehl erteilt wird, für den sudo eigentlich nicht benötigt wird?

10

Wenn Sie sudoauf einen Befehl anwenden , der eigentlich nicht benötigt wird sudo,

  • Manchmal werde ich nicht nach meinem Passwort gefragt. Zum Beispiel unter meinem $HOME, sudo ls.

  • Aber ich erinnere mich, dass es für einen anderen Befehl gilt, obwohl ich vergesse, welcher.

Also habe ich mich gefragt, wie ich sudoentscheiden soll, ob ich nach einem Passwort fragen soll, wenn ich einen Befehl bekomme, der eigentlich nicht benötigt wird sudo. Gibt es eine Regel, um das /etc/sudoersanzugeben?

Mein eigentliches Problem ist, dass bei der Verwendung dufür einige Verzeichnisse manchmal "Berechtigung verweigert" angezeigt wird und manchmal nicht, wahrscheinlich, weil ich für einige Verzeichnisse keine Berechtigung habe. Ich bewerbe ich sudoum duunabhängig, und dachte , dass ich unabhängig nach einem Passwort gefragt werden würde, aber eigentlich nicht auf meinem eigenen Verzeichnis.

Tim
quelle
15
Die Entscheidung, ob ein Programm versuchen würde , etwas zu tun, was nur root tun kann, oder auf eine Datei zuzugreifen, auf die der aufrufende Benutzer nicht zugreifen darf, ohne das Programm tatsächlich auszuführen, ist das verschleierte Problem des Anhaltens. Sie können also sicher sein, dass sudo das nicht tut.
zwol
2
+1, denn obwohl die Frage auf einem Missverständnis beruht, werden die Symptome klar erklärt und es gibt eine eindeutige Antwort.
Entkorken

Antworten:

22

In einer typischen Konfiguration ist der Befehl irrelevant. Sie müssen Ihr Passwort eingeben, wenn Sie sudo zum ersten Mal verwenden, und Sie benötigen Ihr Passwort für die nächsten 15 Minuten nicht in dieser bestimmten Shell.

Aus der Sicht des Computers gibt es keinen „Befehl, der Sudo benötigt“. Jeder Benutzer kann versuchen, einen beliebigen Befehl auszuführen. Das Ergebnis ist möglicherweise nur eine Fehlermeldung wie "Berechtigung verweigert" oder "Keine solche Datei oder kein solches Verzeichnis", aber es ist immer möglich, den Befehl auszuführen.

Wenn Sie beispielsweise duin einem Verzeichnisbaum mit Inhalten ausgeführt werden, auf die Sie nicht zugreifen dürfen, werden Berechtigungsfehler angezeigt. Das ist es, was "Erlaubnis verweigert" bedeutet. Wenn Sie ausführen sudo du, wird sudo duals root ausgeführt, sodass Sie keine Berechtigungsfehler erhalten (das ist der Punkt des Root-Kontos: root¹ hat immer die Berechtigung). Wenn Sie ausgeführt werden sudo du, wird es duals root ausgeführt und sudoist nach dem duStart überhaupt nicht beteiligt . Ob du auf Berechtigungsfehler stößt, ist für die Funktionsweise von sudo völlig irrelevant.

Es gibt Befehle, die sudo benötigen , um etwas Nützliches zu tun . Nützlichkeit ist ein menschliches Konzept. Sie müssen sudo (oder andere Methoden zum Ausführen des Befehls als root) verwenden, wenn der Befehl beim Ausführen als root etwas Nützliches tut, jedoch nicht, wenn er unter Ihrem Konto ausgeführt wird.

Ob sudo nach Ihrem Passwort fragt, hängt von zwei Dingen ab.

  1. Basierend auf der Konfiguration entscheidet sudo, ob Sie authentifiziert werden müssen. Standardmäßig benötigt sudo ein Passwort. Dies kann auf verschiedene Arten deaktiviert werden, einschließlich der Einstellung der authenticateOption auf false und der Verwendung einer anwendbaren Regel für das NOPASSWDTag.
  2. Wenn sudo Ihr Passwort benötigt, kann es zufrieden sein, einen zwischengespeicherten Wert zu verwenden. Das ist in Ordnung, weil der Grund, warum sudo Ihr Passwort benötigt, nicht darin besteht, zu authentifizieren, wer es anruft (sudo weiß, welcher Benutzer es aufgerufen hat), sondern zu bestätigen, dass Sie immer noch bei den Befehlen sind und nicht jemand, der die Kontrolle über Ihre Tastatur übernommen hat. Standardmäßig ist sudo bereit zu glauben, dass Sie immer noch bei den Befehlen sind, wenn Sie Ihr Passwort vor weniger als 15 Minuten eingegeben haben (dies kann mit der timeoutOption geändert werden ). Sie müssen das Kennwort im selben Terminal eingegeben haben. Wenn Sie also an einem Terminal angemeldet bleiben, dieses Terminal unbeaufsichtigt lassen und dann ein anderes Terminal verwenden, kann jemand 'tty_tickets

¹ fast, aber das würde den Rahmen dieses Threads sprengen.

Gilles 'SO - hör auf böse zu sein'
quelle
Möglicherweise gibt es Dateien, bei denen das ausführbare Bit nur für root und nicht für andere festgelegt ist. Dies könnte unter "Need Root to Execute" fallen. (Nur Nitpicking.)
Paŭlo Ebermann
@ PaŭloEbermann Ich schrieb: "Jeder Benutzer kann versuchen , einen beliebigen Befehl auszuführen", um zu vermeiden, dass dieser (seltene) Fall nicht ausgewählt wird. Es gibt immer einen Trottel :(
Gilles 'SO- hör auf böse zu sein'
45

sudoweiß nicht, ob der Befehl, den er ausführen soll, als ein anderer Benutzer (normalerweise root) ausgeführt werden muss. Er weiß nur, dass er konfiguriert ist. Dies bestimmt, welche Benutzer ausgeführt werden dürfen sudo, mit welchen Benutzern als "Ziele" und für welche Befehle. Außerdem wird festgelegt, ob und welches Kennwort benötigt wird und ob ein Authentifizierungstoken aufbewahrt werden soll.

Wenn Sie die Standard-Debian-Konfiguration verwenden, handelt es sich höchstwahrscheinlich um letztere: Hier sudowerden Sie nach Ihrem Kennwort gefragt, wenn Sie es zum ersten Mal in einem bestimmten Terminal verwenden. Anschließend wird ein Authentifizierungstoken für einen bestimmten Zeitraum gespeichert. Wenn Sie sudoinnerhalb dieses Zeitraums im selben Terminal wiederverwenden , werden Sie nicht zur Eingabe eines Kennworts aufgefordert.

Stephen Kitt
quelle
Vielen Dank. Meinst du, sudo du /path/to/some/dirsollte entweder immer mein Passwort benötigen oder nie, unabhängig davon /path/to/some/dir?
Tim
12
Ja. Es wird immer Ihr Passwort benötigen (oder nicht). Wenn es Ihr Passwort benötigt, es aber bereits im Cache gespeichert hat, werden Sie natürlich nicht aufgefordert, es einzugeben.
dr01
5
Streng genommen handelt es könnte auf dem Weg abhängen, weil /etc/sudoersBefehle und deren Argumente angeben können. Wenn Sie jedoch nichts Ähnliches hinzugefügt haben sudoers(und wenn ja , sollte ich hoffen, dass Sie sich dessen bewusst sind), spielen die Argumente keine Rolle (und der Befehl auch nicht, wenn Sie allgemeinen Zugriff auf root via haben sudo ).
Stephen Kitt
19
sudospeichert Ihr Passwort nicht im Cache, sondern nur die Information, dass Ihre Identität bereits einmal mit einer Passwortprüfung überprüft wurde. Da sudoes sich um ein Setuid-Root-Programm handelt, verfügt es bereits über alle erforderlichen Berechtigungen, um alles wie jeder andere auszuführen. Es wird jedoch davon ausgegangen, dass nur die Benutzer es genau wie in der sudoersDatei angegeben verwenden und alle anderen Verwendungsversuche ablehnen können . Deshalb ist es wichtig, dass sudoes sich um ein so kleines und sehr gut studiertes Programm handelt.
TelcoM
6

zu einem Befehl, der eigentlich kein sudo benötigt

Es ist nicht so, dass ein Befehl Sudo braucht oder nicht braucht . Wenn du rennst

sudo -u user command

Das System wird commandals ausgeführt user.

Ob der Aufruf erfolgreich ist oder nicht und ob ein Kennwort abgefragt wird oder nicht, hängt von der Sicherheitsrichtlinie ab sudoers(normalerweise konfiguriert in /etc/sudoers).

dr01
quelle