Ich bin dabei /sbin
und sehe, dass shutdown
es Berechtigungen gibt rwxr-xr-x
. Bedeutet das nicht, dass jeder es ausführen kann?
shutdown
Befehl.
shutdown
.
Ich bin dabei /sbin
und sehe, dass shutdown
es Berechtigungen gibt rwxr-xr-x
. Bedeutet das nicht, dass jeder es ausführen kann?
shutdown
Befehl.
shutdown
.
Antworten:
Jeder kann ausführen shutdown
, aber um ein Herunterfahren des Systems auszulösen, sind Root-Berechtigungen erforderlich. shutdown
Ist aber nicht setuid und kann nur root erfolgreich ausführen. Das shutdown
Programm ist nett genug, um Ihre Privilegien zu überprüfen und Sie über ein Problem zu informieren, aber selbst wenn es ein System-Shutdown naiv versuchte, würde nichts passieren.
GLENDOWER: Ich kann Geister aus der Tiefe rufen.
HOTSPUR: Warum kann ich das auch? Aber werden sie kommen, wenn du nach ihnen rufst?
(aus Heinrich IV.)
shutdown
ist nicht anders als /bin/rm
. Jeder kann es ausführen, aber ein normaler Benutzer kann es nicht entfernen /etc
oder das Basisverzeichnis eines anderen Benutzers.
Insbesondere: Nur ein Prozess, der mit Root-Rechten ausgeführt wird (effektive UID 0), kann das init-System anweisen, Systemdienste zu stoppen, alle Benutzerprozesse zu beenden und den Systemaufruf abzusetzen , der den Computer tatsächlich stoppt. (Wenn shutdown
setuid angegeben wurde, wird es als root ausgeführt, unabhängig davon, wer es aufruft. Dies ist jedoch nicht der Fall.)
Wie wäre es mit shutdown
einem GUI- Aufruf , zB mit control-alt-del? Es ist wichtig zu wissen, dass es in diesem Fall shutdown
direkt von gestartet wird init
und mit Root-Rechten ausgeführt wird. Jeder, der auf die Konsole zugeht, kann sie möglicherweise herunterfahren. Wenn dies nicht erwünscht ist, wird Control-Alt-Delete ausgeführt shutdown -a
. (Siehe die Dokumentation, die @ some1 in ihrer Antwort zitiert). Damit wird shutdown
überprüft, ob der aktuell angemeldete Benutzer berechtigt ist, es auszuführen. Dies ist jedoch nur relevant, da shutdown
in diesem Szenario als Root ausgeführt wird.
shutdown
, aber dieses Programm kann kein Herunterfahren des Systems auslösen, es sei denn, der aktuelle Benutzer verfügt über Root-Berechtigungen. Recht?
shutdown
. Ein setuid-Programm wird mit den Berechtigungen des Benutzers ausgeführt, dem die ausführbare Datei gehört. Wird beispielsweise /etc/passwd
mit Root-Berechtigungen ausgeführt, damit Sie die Kennwortdatei ändern können. Siehe die Manpage für chmod
.
/usr/bin/passwd
mit root-Rechten laufen" sollen! /etc/passwd
ist nicht ausführbar (es ist die "Passwortdatei", die geändert wird).
Die Binärdatei shutdown
selbst prüft, ob Ihre UID 0 ist.
Siehe die Ausgabe von strace:
strace /sbin/shutdown -r -h now
...
...
geteuid() = 10001
setuid(10001) = 0
getuid() = 10001
write(2, "shutdown: Need to be root\n", 26shutdown: Need to be root
) = 26
exit_group(1) = ?
shutdown
überprüft wird, ob Ihre UID 0 ist.
if(getuid() != 0) printf("Need to be root");
. Was in der Tat der Quellcode zeigt, dass es so ist.
Es scheint, dass das Herunterfahren eine Zugriffsliste überprüft, wenn Sie sie mit -a markieren:
ACCESS CONTROL
shutdown can be called from init(8) when the magic keys CTRL-ALT-DEL are pressed, by creating an appropriate entry in /etc/inittab. This means that every‐
one who has physical access to the console keyboard can shut the system down. To prevent this, shutdown can check to see if an authorized user is logged
in on one of the virtual consoles. If shutdown is called with the -a argument (add this to the invocation of shutdown in /etc/inittab), it checks to see
if the file /etc/shutdown.allow is present. It then compares the login names in that file with the list of people that are logged in on a virtual console
(from /var/run/utmp). Only if one of those authorized users or root is logged in, it will proceed. Otherwise it will write the message
shutdown: no authorized users logged in
to the (physical) system console. The format of /etc/shutdown.allow is one user name per line. Empty lines and comment lines (prefixed by a #) are
allowed. Currently there is a limit of 32 users in this file.
Da Sie es derzeit ohne das Flag -a aufrufen, werden standardmäßig nur Root-Shutdowns zugelassen.
Wenn Sie möchten, dass weitere Benutzer den Befehl ausführen können, konfigurieren Sie diese Datei und verwenden Sie das Flag.
Why can't I execute shutdown when the permission is rwxr-xr-x?
Berechtigungsbits schließen die Zugriffssteuerung basierend auf einem Benutzer oder einer Gruppe nicht unbedingt aus.
-a
von der Kommandozeile aus macht keinen Unterschied: shutdown -a
Muss immer noch mit root-Berechtigungen ausgeführt werden (was init
bei control-alt-del der Fall ist ).