Ist es sicherer, Folgendes zu tun:
$ sudo dnf update
[Benutzerpasswort eingeben]
oder
$ su - [enter root password] # dnf update
Ich bin immer davon ausgegangen, dass es sich dabei um genau dasselbe handelt, da sudo „setuid-root“ verwendet und der Prozess, der als erstes Argument von sudo ausgeführt wird, daher mit der effektiven ID von sudo ausgeführt wird, also „root“.
Ich denke, meine Frage ist:Ändert sudo seine effektive ID irgendwann zu der des normalen Benutzers? In diesem Fall wäre Nummer 1 oben die sicherere Wahl, denn wenn das Programm, mit dem sudo ausgeführt wird, von einem Angreifer kompromittiert wird, besteht die Möglichkeit, dass der Angreifer nicht als Root ausgeführt wird, weil das Privileg bereits gelöscht wurde?
Antwort1
Dieser erste Befehl erfordert (wahrscheinlich) Ihr korrektes Passwort, wird dnf update
als Root ausgeführt und beendet sich dann:
$ sudo dnf update [enter user password]
Dieser zweite Befehl erfordert das Root-Passwort und startet dann eine Root-Shell. In dieser Shell führen Sie Folgendes aus dnf update
:
$ su - [enter root password] # dnf update
Sie vergleichen nicht wirklich Gleiches mit Gleichem. Sie könnten diese beiden Befehle vergleichen, die beide eine Root-Shell starten, in der Sie (mindestens) den Befehl ausführendnf update
sudo -s
dnf update
su -
dnf update
Oder Sie vergleichen diese beiden Befehle, die beide eine Instanz mit Root-Rechten starten dnf update
und dann zur Shell des Anrufers zurückkehren.
sudo dnf update
su root -c 'dnf update'
Ich glaube, Sie fragen eigentlich, ob es besser ist, einen einzelnen Befehl mit Root-Rechten aufzurufen oder eine Shell mit Root-Rechten zu starten, in der ein oder mehrere Befehle ausgeführt werden.
- Wenn die
dnf
Funktionalität oder die Downloads in irgendeiner Weise beeinträchtigt sind, dann ist es egal, wie es ausgeführt wird. Das Problem ist, dass es überhaupt ausgeführt wird. - Wenn Sie über die Gefährdung Ihres Systems sprechen, kommt es auf die Sicherheit des Benutzerkennworts (
sudo
) gegenüber dem Rootkennwort (su
) an. - Wenn Sie überlegen, ob Sie dem Benutzer vertrauen können, dann ist es nicht wirklich wichtig, ob Sie eine Root-Shell erhalten, in der Sie mehrere Befehle ausführen, oder eine Root-Shell, in der Sie jeweils einen Befehl ausführen. Das Problem besteht darin, dass Befehle als Root ausgeführt werden können.
Persönlich kombiniere ich die Verwendung je nach Bedarf. Ich verwende es selten, su
aber sudo {command....}
für schnelle einmalige Aktionen oder sudo -s
für eine kurze Sitzung, in der ich mehrere Befehle ausführen muss (z. B. Debian-Paketverwaltungstools, apt-get update
gefolgt von apt-get upgrade
).
Antwort2
Ja, sudo
Privilegien werden gelöscht, wenn der untergeordnete Prozess endet. In diesem Fall dnf
. Wobei su
Privilegien gelöscht werden, wenn der untergeordnete Prozess endet. In diesem Fall eine interaktive Shell. Daher werden im sudo
Beispiel Privilegien früher gelöscht.
sudo
hat auch andere Vorteile, die hier nicht behandelt werden. (Zum Beispiel sudoers
kann die Datei verwendet werden, um mehr Kontrolle darüber zu geben, was jeder Benutzer tun kann und was nicht).