Dlaczego muszę być rootem, aby zamknąć / ponownie uruchomić komputer z terminala? Robienie tego za pomocą menu GUI nie wymaga uprawnień roota.
Dlaczego muszę być rootem, aby zamknąć / ponownie uruchomić komputer z terminala? Robienie tego za pomocą menu GUI nie wymaga uprawnień roota.
Odpowiedzi:
Zwykle system operacyjny uruchamia się przy starcie usługi działającej jako root i oferuje środowisku komputerowym pewne możliwości dotyczące komputera. Zwykle jest to ConsoleKit lub systemd-logind.
Na przykład w KDE możesz wyłączyć komputer z wiersza poleceń jako zwykły użytkownik za pomocą czegoś takiego:
qdbus org.kde.ksmserver /KSMServer logout 0 0 0
Jest to możliwe, ponieważ menedżer sesji KDE skontaktuje się z usługą DBus działającą jako root, a po wywołaniu uruchomi shutdown
polecenie z uprawnieniami roota.
W systemach z ConsoleKit możesz użyć:
gdbus call -y -d org.freedesktop.ConsoleKit \
-o /org/freedesktop/ConsoleKit/Manager \
-m org.freedesktop.ConsoleKit.Manager.Stop
W systemach wykorzystujących Systemd-logind The shutdown
Narzędzie korzysta już DBus i nie wymaga przywilejów.
Podsumowując, możesz zamknąć komputer jako zwykły użytkownik, ponieważ środowisko pulpitu uruchamia usługę, która oferuje możliwość uruchomienia polecenia shutdown [1] jako root.
[1] W rzeczywistości usługa robi inne rzeczy, aby mieć pewność, że środowisko pulpitu zostanie poprawnie zamknięte.
Wyobraź sobie, że Twój komputer to wspólny serwer hostingowy, na którym każdy użytkownik ma dostęp do SSH. W takiej konfiguracji jest około 500 użytkowników na jeden serwer.
Czy ktoś powinien mieć możliwość ponownego uruchomienia całego serwera, zakłócania pobierania HTTP, przerywania sesji SSH itp.?
Kilka powodów z góry mojej głowy:
HTH
Oprócz menu GUI możesz także zamknąć Linuksa z konsoli tekstowej. Z GUI łączy to, że użytkownik wydający polecenie prawie na pewno ma fizyczny dostęp. (W wyjątkowych sytuacjach, w których nie jest to prawdą, takich jak publiczne kioski, można je wyłączyć).
Nie można zakładać, że użytkownik dowolnej sesji TTY ma fizyczny dostęp; jest to forma zdalnego dostępu. Nie ma sposobu, aby zasygnalizować zamknięcie przez dowolną sesję TTY, niezależnie od tego, czy jest to lokalny xterm, rzeczywisty terminal na linii szeregowej, czy sesja ssh. Musisz udowodnić, że masz uprawnienia równoważne fizycznemu dostępowi, stając się rootem.
Jeśli nieuwierzytelnieni lub nieuprzywilejowani użytkownicy mogą zdalnie zrestartować system, byłby to problem z bezpieczeństwem.
Podobnie jak zdalne logowanie, fizyczny terminal (rzeczywisty port szeregowy) jest formą zdalnego dostępu. Użytkownik może znajdować się w innym budynku lub w innej części świata (przez modem).
Emulator terminala graficznego, taki jak xterm, nie jest zdalny, ale system operacyjny tego nie wie. Aplikacja jest implementowana za pomocą pseudo TTY . Jest to zwirtualizowane urządzenie TTY, którego system operacyjny (w przeważającej części) nie odróżnia od prawdziwego tty. Jeśli wpiszesz stty
sesję xterm lub ssh, zauważysz, że masz prędkość transmisji, np. 9600 lub 38400 i możesz przełączać kontrolę przepływu xon / xoff, a nawet cts / rts. Teoretycznie pseudo TTY mogą mieć specjalny protokół sygnalizacyjny restartu między urządzeniem nadrzędnym i podrzędnym, który nie byłby dostępny w innych zwykłych TTY, ale tak nie jest. (W rzeczywistości xterm może być zdalny, ponieważ jest aplikacją kliencką X, którą można przekierować, aby utworzyć jego okna na zdalnym serwerze X.)
(Nie jestem pewien, do czego odnosi się pytanie w terminalu; w Linuksie nie ma czegoś takiego).