Es kommt hauptsächlich darauf an, was das Tool oder Programm macht . Denken Sie daran, dass ein Nicht-Superuser nur Dateien berühren kann, die er besitzt oder auf die er Zugriff hat, jedes Tool, das in der Lage sein muss, seine Finger in alles zu bekommen erfordert Superuser-Zugriff, um das zu tun, was es tut. Ein kurzes Beispiel für Dinge, die Superuser-Zugriff erfordern könnten, sind unter anderem:
- Öffnen eines lauschenden TCP-Sockets auf einem Port unter 1024
- Ändern von Systemkonfigurationen (z. B. irgendetwas in
/etc
) - Hinzufügen neuer global zugänglicher Bibliotheken (
/lib
und/usr/lib
) oder Binärdateien (/bin
,/usr/bin
) - Berühren von Dateien, die nicht dem Benutzer gehören, der die Berührung durchführt, die keinen ausreichend zulassenden Modus haben
- Ändern der Eigentumsrechte an Dateien anderer Benutzer
- Herausstufen von Prozessprioritäten (z. B.
renice
) - Starten oder Stoppen der meisten Dienste
- Kernel-Konfiguration (z. B. Anpassung der Auslagerung)
- Dateisystem-Kontingente anpassen
- Schreiben auf "volle" Festplatten (die meisten Dateisysteme reservieren etwas Platz für den Root-Benutzer)
- Aktionen als andere Benutzer ausführen
Unter Linux wurden die Privilegien von root einmal in "Fähigkeiten" unterteilt, so dass Sie eine vollständige Liste der speziellen Privilegien von root erhalten, indem Sie in diese Dokumentation schauen:man 7 capabilities
.
Um Ihre Frage zu beantworten, muss ein Befehl als root ausgeführt werden, wenn er eines dieser Privilegien benötigt, und seine ausführbare Datei, die kein Skript ist, hat nicht die relevante Fähigkeit in seinen Dateimetadaten (z. B. wenn ein Python-Skript die Fähigkeit erfordert, dann die Fähigkeit müsste in dem Python-Interpreter sein, der in der Shebang-Zeile angegeben ist).
Beachten Sie, dass einige Befehle, die Root-Zugriff benötigen, so etwas wie sudo
nicht benötigen weil sie das SUID-Bit in ihrer ausführbaren Datei gesetzt haben. Dieses Bit bewirkt, dass die ausführbare Datei als Eigentümer (normalerweise root) ausgeführt wird, wenn sie von jemandem ausgeführt wird, der über Ausführungszugriff verfügt. Ein Beispiel ist sudo
selbst, da das Ändern von Benutzern eine privilegierte Aktion ist, die es ausführen muss.
BEARBEITEN:Ich stelle aus Ihrer Frage fest, dass Sie möglicherweise die Idee haben, dass Sie feststellen können, ob ein Befehl Root-Zugriff benötigt, bevor Sie ihn ausführen. Das ist nicht der Fall. Ein Programm erfordert manchmal Root-Rechte und manchmal nicht, und dies kann eine Entscheidung des Programms sein, da es während der Laufzeit Daten bereitstellt. Nehmen Sie zum Beispiel das Aufrufen von vim
, einfach so ohne Argumente, und dann durch eine Reihe von Tastendrücken und Einfügen, um ihm zu sagen, dass er etwas in eine Datei schreiben soll, zu der er keine Schreibberechtigung hat, oder vielleicht einen anderen Befehl auszuführen, der selbst Root-Rechte erfordert. Nichts an dem Befehl vor der Ausführung könnte darauf hindeuten, dass er schließlich Root-Zugriff erfordern würde. Das ist etwas, das nur an dem Punkt festgestellt werden kann, an dem versucht wird, etwas zu tun, das dies erfordert.
Wie dem auch sei, hier sind nur sehr wenige Beispiele aus der referenzierten Manpage der Privilegien von root:
- Beliebige Manipulationen von Prozess-UIDs vornehmen (setuid(2), setreuid(2), setresuid(2), setfsuid(2));
- Berechtigungsprüfungen zum Lesen, Schreiben und Ausführen von Dateien umgehen. (DAC ist eine Abkürzung für „Discretionary Access Control“.)
- Berechtigungsprüfungen für das Senden von Signalen umgehen (siehe kill(2)). Dies schließt die Verwendung der ioctl(2) KDSIGACCEPT-Operation ein.
- Durchführen verschiedener netzwerkbezogener Operationen:
- Schnittstellenkonfiguration;
- Verwaltung von IP-Firewall, Maskierung und Abrechnung;
- Routing-Tabellen ändern;
- Binden Sie einen Socket an privilegierte Ports der Internetdomäne (Portnummern kleiner als 1024).
- Kernel-Module laden und entladen (siehe init_module(2) und delete_module(2));
- Systemuhr einstellen (settimeofday(2), stime(2), adjtimex(2)); Echtzeituhr (Hardware) einstellen.
- Führen Sie eine Reihe von Systemverwaltungsoperationen durch, darunter:quotactl(2), mount(2), umount(2), swapon(2), swapoff(2), sethostname(2) und setdomainname(2);
- Verwenden Sie reboot(2) und kexec_load(2).
- Verwenden Sie chroot(2).
- Nice-Wert des Prozesses erhöhen (nice(2), setpriority(2)) und den Nice-Wert für beliebige Prozesse ändern;