Jestem /sbin
i widzę, że shutdown
ma uprawnienia rwxr-xr-x
. Czy to nie oznacza, że każdy może to wykonać?
shutdown
poleceniu.
shutdown
.
Jestem /sbin
i widzę, że shutdown
ma uprawnienia rwxr-xr-x
. Czy to nie oznacza, że każdy może to wykonać?
shutdown
poleceniu.
shutdown
.
Odpowiedzi:
Każdy może wykonać shutdown
, ale uruchomienie zamknięcia systemu wymaga uprawnień roota. Ale shutdown
nie jest setuid, więc tylko root może go z powodzeniem wykonać. shutdown
Program jest na tyle miły, by sprawdzić swoje przywileje i poinformować, jeśli nie jest to problem, ale nawet jeśli to naiwnie próbuje zamknąć systemu, nic się nie stanie.
GLENDOWER: Mogę przywoływać duchy z paskudnej głębi.
HOTSPUR: Cóż, ja też mogę, podobnie jak każdy mężczyzna; Ale czy przyjdą, kiedy ich wezwiesz?
(od Henryka IV)
shutdown
nie różni się od /bin/rm
. Każdy może to wykonać, ale zwykły użytkownik nie może usunąć /etc
katalogu domowego innego użytkownika.
W szczególności: Tylko proces działający z uprawnieniami administratora (efektywny UID 0) może skierować system init do zatrzymania usług systemowych, zakończenia wszystkich procesów użytkownika i wykonania wywołania systemowego, które faktycznie zatrzymuje maszynę. (Gdyby shutdown
był setuid, działałby jako root bez względu na to, kto go wywołuje; ale tak nie jest.)
Co shutdown
z dzwonieniem z GUI, np. Z control-alt-del? Ważne jest, aby zdawać sobie sprawę, że w takim przypadku shutdown
jest uruchamiany bezpośrednio przez init
i działa z uprawnieniami administratora. Aby każdy, kto podejdzie do konsoli, mógł ją potencjalnie wyłączyć. Jeśli nie jest to pożądane, polecenie control-alt-delete faktycznie zostanie uruchomione shutdown -a
. (Zobacz dokumentację, którą @ some1 zacytował w swojej odpowiedzi). Mówi shutdown
to o sprawdzeniu, czy aktualnie zalogowany użytkownik jest uprawniony do jego uruchomienia. Jest to istotne tylko dlatego, shutdown
że w tym scenariuszu działa jako root.
shutdown
, ale ten program nie może faktycznie uruchomić systemu, chyba że bieżący użytkownik ma uprawnienia roota. Dobrze?
shutdown
. Program setuid jest uruchamiany z uprawnieniami użytkownika, który jest właścicielem pliku wykonywalnego. Na przykład /etc/passwd
działa z uprawnieniami administratora, aby umożliwić modyfikację pliku hasła. Zobacz stronę dla chmod
.
/usr/bin/passwd
działa z uprawnieniami roota”! /etc/passwd
nie jest wykonywalny (modyfikowany jest „plik haseł”).
Sam plik binarny shutdown
sprawdza, czy Twój UID ma wartość 0.
Zobacz dane wyjściowe 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
sprawdza, czy Twój identyfikator UID wynosi 0.
if(getuid() != 0) printf("Need to be root");
. Który w rzeczywistości pokazuje kod źródłowy.
Wygląda na to, że zamknięcie sprawdzi listę dostępu, jeśli oflagujesz ją za pomocą opcji -a:
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.
Ponieważ obecnie wywołujesz go bez flagi -a, domyślnie zezwala tylko na zamykanie systemu root.
Jeśli chcesz, aby dodatkowi użytkownicy mogli uruchomić polecenie, skonfiguruj ten plik i użyj flagi.
Why can't I execute shutdown when the permission is rwxr-xr-x?
Bity uprawnień niekoniecznie wykluczają kontrolę dostępu w oparciu o użytkownika lub grupę.
-a
pomocą wiersza polecenia nie robi różnicy: shutdown -a
nadal musi być wykonywane z uprawnieniami roota (które init
dostarcza na control-alt-del).