Czy zamykanie / ponowne uruchamianie wymaga uprawnień roota w systemie Linux? [Zamknięte]

6

Dlaczego muszę być rootem, aby zamknąć / ponownie uruchomić komputer z terminala? Robienie tego za pomocą menu GUI nie wymaga uprawnień roota.

boh
źródło
To zależy od ustawień w twoim komputerze. Dlaczego chcesz wyłączyć z terminala zamiast z GUI?
O jakim terminalu mówisz? Czy masz terminal z zielonym ekranem na linii RS-323? Nie ma „terminala”.
Kaz

Odpowiedzi:

10

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 shutdownpolecenie 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 shutdownNarzę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.

StreakyCobra
źródło
1
Menedżer sesji nigdy nie działa jako root. Kontaktuje się z ConsoleKit lub systemd-logind.
grawitacja
1
Moja odpowiedź z pewnością nie jest kompletna ani idealnie dokładna, zachęcam do poprawienia jej!
StreakyCobra
@StreakyCobra oznacza [1], że użycie polecenia „zamknij” w terminalu nie jest zalecane, gdy działa środowisko Desktop?
boh
To zależy od DE, ale bezpieczniej jest go uniknąć. Niektóre DE zapisują sesję przed zamknięciem (otwarte aplikacje, konfiguracja przestrzeni roboczej, ...) lub zezwalają aplikacjom z niezapisanymi pracami, aby poprosiły użytkownika o akcję przed zamknięciem (jak wspomniano tutaj ).
StreakyCobra
2
Problem z tą odpowiedzią polega na tym, że możliwość zamknięcia Linuksa, jeśli masz fizyczny dostęp, istniała przez wiele lat na długo zanim niektóre dystrybucje Linuksa wprowadziły dbus. I możesz zamknąć Linuksa bez logowania: tzn. Jako użytkownik niebędący użytkownikiem, mniej niż zwykły użytkownik.
Kaz
1

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.?

Michaił Kupczik
źródło
To nie było pytanie.
grawitacja
Tak, to rozsądna interpretacja pytania. SSH jest przykładem terminala i nie zapewnia metody zamykania użytkownikom, którzy nie zostali jeszcze uwierzytelnieni lub nie zostali uwierzytelnieni jako root. Konsola tekstowa systemu Linux umożliwia ponowne uruchomienie użytkownikom niezalogowanym, podobnie jak graficzne ekrany logowania.
Kaz
1

Kilka powodów z góry mojej głowy:

  • warianty wiersza poleceń mogą być skryptowalne , a zatem można wstrzyknąć złośliwy skrypt i powodować bardzo nieprzyjemne rzeczy (atak DoS itp.).
  • Menu GUI jest bezpieczne: nie pozwala na przykre rzeczy (np. Wymuszony restart - wyrzucanie wszystkiego w powietrze)
  • Menu GUI jest proste: nie myli użytkowników z potężnymi opcjami administratora, takimi jak pełne rejestrowanie, opcjonalne wysyłanie wiadomości do wszystkich zalogowanych użytkowników, opóźnione zamknięcie, różnica między zatrzymaniem, trybem konserwacji itp.
  • Menu GUI jest ubogie i oznacza: nie działa „inaczej” w zależności od poziomów pracy systemu (0, 6 itd.) Wykonujących różne skrypty (np. / Sbin / shutdown) i / lub zgodnie z różnymi przełącznikami / opcjami wprowadzonymi z polecenia linia

HTH

John Thomas
źródło
X11 jest również skryptowalny.
grawitacja
1

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 sttysesję 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).

Kaz
źródło
Myślę, że fizyczny dostęp jest prawdziwym powodem. Osoby z fizycznym dostępem mogą po prostu przesunąć przełącznik, wyciągnąć wtyczkę lub rozbić komputer.
emory