$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul 4 2017 /usr/bin/sudo
so sudo
ist von jedem Benutzer runnable, und jeder Benutzer, der läuft sudo
root als die effektive Benutzer - ID des Prozesses haben wird , da die Set-user-id Bit - /usr/bin/sudo
Set ist.
Der sichtbarste Unterschied zwischen sudo und su besteht darin, dass für sudo das Kennwort des Benutzers und für su das Kennwort von root erforderlich ist.
Nach welchem Benutzerpasswort wird
sudo
gefragt? Ist es der Benutzer, der durch die tatsächliche Benutzer-ID des Prozesses dargestellt wird?Wenn ja, kann kein Benutzer das Superuser-Privileg erhalten, indem er ausgeführt wird
sudo
und dann sein eigenes Kennwort angibt? Kann Linux das bei einigen Benutzern einschränken?Ist es richtig , dass
sudo
nach dem Passwort fragt nachexecve()
beginnt die Ausführungmain()
von/usr/bin/sudo
?Da die EUID des Prozesses in root geändert wurde (weil das Bit set-user-id von / usr / bin / sudo gesetzt ist), wozu fragt sudo später nach dem Passwort?
Vielen Dank.
Ich habe /unix//a/80350/674 gelesen , aber die obigen Fragen werden nicht beantwortet.
quelle
Antworten:
In seiner am weitesten verbreiteten Konfiguration,
sudo
fragt nach dem Passwort des Benutzers ausgeführtsudo
wird (wie Sie sagen, der Benutzer mit dem Prozess reale Benutzer - ID entspricht). Der Zweck vonsudo
besteht darin, bestimmten Benutzern zusätzliche Berechtigungen zu gewähren (wie durch die Konfiguration in festgelegtsudoers
), ohne dass diese Benutzer eine andere Authentifizierung als ihre eigene bereitstellen müssen. Allerdingssudo
tut prüfen, ob der Benutzer, dersudo
wirklich ist , die sie vorgeben zu sein, und es tut, indem sie ihr Passwort zu fragen (oder was auch immer Authentifizierungsmechanismus eingerichtet ist , fürsudo
gewöhnlich PAM verwenden - so dies einen Fingerabdruck könnte beinhalten, oder Zwei-Faktor Authentifizierung etc.).sudo
gewährt nicht unbedingt das Recht, root zu werden, sondern kann eine Vielzahl von Privilegien gewähren. Jeder Benutzer, der als Root angemeldet werden darf,sudoers
kann dies nur mit seiner eigenen Authentifizierung tun. aber ein Benutzer darf nicht, kann nicht (zumindest nicht mitsudo
). Dies wird nicht von Linux selbst erzwungen, sondern vonsudo
(und seinem Authentifizierungssetup).sudo
fragt tatsächlich nach dem Passwort, nachdem es gestartet wurde; es kann nichts anderes tun ( dh es kann nichts tun, bevor es zu laufen beginnt). Der Punkt , dersudo
nach dem Passwort fragen, auch wenn es der Wurzel ist der Lauf der Identität des Benutzers (in seiner typischen Konfiguration) zu überprüfen.quelle
sudo
fragt normalerweise nach dem Kennwort des Benutzers, der es ausführt, obwohl dies konfiguriert werden kann :Die Einstellung
rootpw
hatsudo
immertargetpw
nach dem Passwort des Roots gefragt, nach dem Passwort des Benutzers gefragt,sudo
wird das Programm schließlich als ausgeführt undrunaspw
fragt nach dem Passwort des eingestellten Benutzersrunas_default
.Eine
sudo
solche binäre Einrichtung kann tatsächlich von jedem Benutzer mit Root-Rechten gestartet werden. Vorausgesetzt,sudo
der Authentifizierungscode weist keine Fehler auf, ist das an sich nicht wichtig.In ähnlicher Weise kann jeder Prozess auch Code im Kernelmodus ausführen, indem er beispielsweise einen beliebigen Systemaufruf aufruft
open()
. (Dies ist nicht dasselbe wie Userspace-Code als Root.) Solange der Kernel keine Fehler aufweist, können sie jedoch keinen beliebigen Code ausführen.quelle
Aus der ersten Zeile (n) von
man sudo
:So:
Ja, jeder ( zulässige ) Benutzer kann die Superuser (oder andere) zusätzlichen Berechtigungen erhalten, indem er sudo ausführt und dann die erforderliche ( konfigurierte ) Authentifizierung bereitstellt . Sowohl zulässig als auch konfiguriert werden in sudoers-Dateien festgelegt.
Kann Linux das bei einigen Benutzern einschränken?
Ja, das kann es, aber das tut es nicht. Linux ist so eingestellt, dass die sudo-Binärdatei die Entscheidung basierend auf den Regeln (Sicherheitsrichtlinien) im sudo-Programm und in der Datei treffen kann
/etc/sudoers
. Normalerweise können andere Dateien (auch / stattdessen) verwendet werden.Von
man setresuid
:Die einzige Möglichkeit, vom Kernel erteilte Superuser-Berechtigungen zu erhalten, besteht darin, ein Programm suid auszuführen. Es kann nicht anders sein. Auf diese Weise hat Linux ausgewählt, Superuser-Berechtigungen zu erteilen.
Nachdem der Kernel eine ausführbare Datei geladen hat, die von keinem anderen Benutzer geändert werden kann (Datei und Verzeichnis von root und nur von root beschreibbar), authentifiziert die ausführbare Datei selbst (sudo) den Benutzer, indem sie nach seinem Kennwort fragt (oder nach etwas anderem, wie konfiguriert). und entscheidet, ob und welche Berechtigungen erteilt werden sollen.
quelle
Zusätzlich zu anderen guten Antworten zu
sudo
:su
ermöglicht es Ihnen, effektiv ein anderer Benutzer zu werden. Auf meinem eigenen Computer arbeite ich nicht als Administrator für den täglichen Gebrauch - was unter anderem bedeutet, dass ich nicht (direkt) verwenden kannsudo
. Wenn ich verwenden möchtesudo
, kann ich verwendensu
, um der Administrator-Benutzer zu werden und dann in dieser Rolle zu verwendensudo
. In dieser Situation gebe ich das Kennwort des Administratorkontos zweimal ein - einmal beim Ausführensu
und einmal beim Ausführensudo
.quelle