Zezwolenie na zamykanie systemu Linux

8

Załóżmy, że instalujesz środowisko pulpitu, powiedzmy ubuntu lub debian. Możesz zamknąć system, klikając przycisk gdzieś w menu systemu jako zwykły użytkownik. Aby tego dokonać, nie musisz przełączać się na administratora.

Jednak w tym samym środowisku pulpitu, jeśli otworzę terminal (powiedzmy gnome-terminal) jako zwykły użytkownik i napiszę

shutdown -h now

Byłbym poproszony przez

shutdown: need to be root

Jedynym sposobem na zamknięcie jest dodanie polecenia sudo.

Czy ktoś może wyjaśnić, dlaczego tak jest?

Dzięki KC

K.Chen
źródło

Odpowiedzi:

8

Pytanie zadane przez K.Chen brzmi: dlaczego potrzebuję uprawnień sudo, kiedy robię to z interfejsu CLI, chociaż nie potrzebuję takich uprawnień, kiedy robię to z GUI.

Pierwszą częścią odpowiedzi jest to, że ludzie, którzy projektują środowiska pulpitu, takie jak Gnome, KDE, Xfce, Mate, Cinnamon, ... próbują uprościć pracę swoich użytkowników i konfigurują zamykanie i ponowne uruchamianie bez konieczności posiadania poświadczeń sudo. To, nawiasem mówiąc, oznacza, że nie musi być sekwencja wyłączania, która ma nie wiązać zamknięcie programu, który nie wymaga przywileje sudo (nie odwrotnie, że).

Nie wiem szczegółowo, jak to robi każdy DE, ale wiem, że istnieje delikatny sposób na obniżenie lub ponowne uruchomienie / zamknięcie / hibernację systemu, który nie wymaga uprawnień roota. Oryginalny post można znaleźć w poście na forum Arch Linux . Zasadniczo sprowadza się do wydawania następujących poleceń:

postój

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"/org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

restart

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"  /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart

dbus-suspend

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend

hibernować

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate 

Domyślam się, że przyciski GUI używają z grubsza tych poleceń. Dla pewności należy przyjrzeć się kodowi, ale uważam, że jest to bezpieczny zakład.

MariusMatutiae
źródło
1
Jeśli ktoś zdalnie zaloguje się do komputera, na którym działa również środowisko pulpitu, czy może wydać te polecenia i pomyślnie zamknąć / ponownie uruchomić / zawiesić / hibernować?
gerrit
Jest to złośliwa strona tego pytania, uważam, że należy zachować dyskrecję.
MariusMatutiae
1
Dlaczego złośliwy? Jeśli można go nadużyć, sysops powinien wiedzieć, a następnie wiedzieć, jak się przed nim chronić.
gerrit
Nie twierdzę, że jesteś złośliwy, ale że z tych informacji można zrobić złośliwe wykorzystanie. Już żałuję, że to udostępniłem ... Być może powinienem był zrobić jak @Matteo
MariusMatutiae
5

Powód tej decyzji projektowej nie jest techniczny (możesz mieć nieuprzywilejowane shutdownpolecenie lub wymagać hasła w GUI).

  • Podczas korzystania ze środowiska pulpitu użytkownik powinien mieć fizyczny dostęp do komputera. Lepiej więc pozwolić na czyste wyłączenie niż pozwolić użytkownikowi nacisnąć przycisk zasilania lub odłączyć przewód zasilający.

  • Podczas używania powłoki użytkownik może być użytkownikiem zdalnym i aby uniknąć zdalnego zamknięcia, wymagane są dodatkowe uprawnienia.

Nie są to reguły, a jedynie wartości domyślne oparte na założeniach: możesz mieć lokalnego użytkownika w powłoce i zdalnego użytkownika ze środowiskiem pulpitu. Jeśli chcesz wybrać domyślne zachowanie, możesz odpowiednio skonfigurować system.

Matteo
źródło
Rozumiem twój punkt @ Matteo. Ale jak powiedział Marius Matutiae, pod maską DE musiał wywołać inny program niż „shutdown”, aby zamknąć system bez uprawnień administratora. Masz jakieś pojęcie, co to jest?
K.Chen
1

Sudo (superuser do) pozwala administratorowi systemu dać niektórym użytkownikom (lub grupom użytkowników) możliwość uruchamiania niektórych (lub wszystkich) poleceń jako root podczas rejestrowania wszystkich poleceń i argumentów. polecenie shutdown -h lub polecenie init 0 może być użyte do wyłączenia maszyny. Ale oba polecenia wymagały uprawnień administratora do wykonania.

Polecenie znajdujące się w katalogu / sbin musi mieć uprawnienia roota, aby je wykonać. Aby znaleźć lokalizację polecenia zamknięcia,

wpisz, które zamknięcie w terminalu.

Mam nadzieję, że teraz masz wątpliwości :)

Unnikrishnan
źródło