Jestem /sbin
i widzę, że shutdown
ma uprawnienia rwxr-xr-x
. Czy to nie oznacza, że każdy może to wykonać?
permissions
security
shutdown
Korgan Rivera
źródło
źródło
shutdown
poleceniu.shutdown
.Odpowiedzi:
Każdy może wykonać
shutdown
, ale uruchomienie zamknięcia systemu wymaga uprawnień roota. Aleshutdown
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.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 przypadkushutdown
jest uruchamiany bezpośrednio przezinit
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 uruchomioneshutdown -a
. (Zobacz dokumentację, którą @ some1 zacytował w swojej odpowiedzi). Mówishutdown
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.źródło
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ę dlachmod
./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:
źródło
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.Tak ! Każdy może uruchomić to polecenie. Jak powiedziałeś, możesz go uruchomić, ale pojawia się komunikat „Musisz być rootem”, a nie
permission denied
. Doshutdown
kontroli DowodzenieUID
zobaczyć jeśli jesteś korzeń, czy nie.źródło
Wygląda na to, że zamknięcie sprawdzi listę dostępu, jeśli oflagujesz ją za pomocą opcji -a:
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.
Bity uprawnień niekoniecznie wykluczają kontrolę dostępu w oparciu o użytkownika lub grupę.
źródło
-a
pomocą wiersza polecenia nie robi różnicy:shutdown -a
nadal musi być wykonywane z uprawnieniami roota (któreinit
dostarcza na control-alt-del).