Wie können Sie wissen, ob für die Ausführung eines Programms root erforderlich ist?

10

Ich verstehe, dass dies eine etwas grundlegende und vielleicht dumme Frage ist, aber ich konnte keine Antwort finden.

Ich verstehe, dass jede Datei das "Executable"Bit hat.

Ich ging davon aus, dass Programme, die Benutzer und Gruppen benötigen root, nicht das Bit dafür haben und verhindern würden, dass Nicht-Root-Benutzer diese ausführen. Aber in den Verzeichnissen und sehe ich, dass alle Dateien Berechtigungen wie habenrootrootExecutableOther/bin/sbin-rwxr-xr-x

Was bestimmt also wirklich, ob ein Benutzer Root-Berechtigung benötigt, um etwas auszuführen?

Dean
quelle
1
Standardmäßig können Sie oder jeder Benutzer ein beliebiges Programm /binoder /sbinVerzeichnisse ausführen . Das Problem ist, dass einige dieser Programme unterschiedlich ausgeführt werden, je nachdem, welcher Benutzer sie ausführt.
Radu Rădeanu

Antworten:

13

Irgendwann steht es im Code. Auf halbem Weg hwclock.cfinden Sie zum Beispiel :

if (getuid() == 0)
            permitted = TRUE;
else {
            /* program is designed to run setuid (in some situations) */
            if (set || systohc || adjust) {
                    warnx(_("Sorry, only the superuser can change "
                            "the Hardware Clock."));
[...]

Dies ändert das Verhalten des Programms, wenn Sie root sind oder nicht.

In den meisten anderen Fällen ist dies implizit. an den Kernel delegiert. Wenn das Programm beispielsweise den Systemaufruf aufruft, mit dem Sie das System neu starten können, funktioniert dies nur, wenn Sie root sind. Wenn Sie nicht root sind, wird der Fehler "Berechtigung verweigert" angezeigt, den die Anwendung (sofern gut geschrieben) Ihnen einfach meldet. Oder Sie versuchen, eine Datei zu löschen. Wenn Sie die richtige Berechtigung für die Datei haben, wird dies erfolgreich sein. Wenn nicht, hängt es davon ab, ob Sie root sind oder nicht - bei rmAufrufen unlink()überprüft der Kernel die Berechtigungen.

Also nein, im Prinzip kann man nicht nur die Berechtigung der ausführbaren Datei betrachten, ob das Programm Root-Rechte benötigt oder nicht. Viele Programme benötigen sie nur für einen bestimmten Vorgang, daher ist es sehr schwierig, so etwas zu tun. Der Fall hwclockist ein (jemand die Uhr lesen kann , aber nur einer kann es root gesetzt ist ), aber es gibt Hunderte von ihnen ( kill, rm, cat...)

Dann gibt es die verwandte und interessante Welt der Setuid- Programme ...

Rmano
quelle
Im Grunde ist der Kernel also "dafür verantwortlich"? Wenn das Programm einen Systemaufruf ausführt, bestimmt der Kernel, ob der Benutzer, der das Programm ausführt, root sein muss, und erzwingt es?
Dean
2
Grundsätzlich ja. Das Programm kann zusätzliche Tests durchführen, die Berechtigungsprüfung erfolgt jedoch auf Kernelebene. Setuid-Root-Programme sind die Ausnahme; Sie werden immer als Root ausgeführt, daher müssen sie selbst nach Berechtigungen
suchen