Wyłączanie polecenia zamykania dla wszystkich użytkowników, nawet konsekwencji root?

11

Chciałbym wyłączyć shutdownpolecenie dla wszystkich użytkowników, nawet root, na instalacji Ubuntu Server.

Powodem, dla którego chcę to zrobić, jest upewnienie się, że nie mam zwyczaju wyłączania maszyny w ten sposób, ponieważ SSH na wielu maszynach produkcyjnych w tym samym czasie i nie robię tego chcesz przypadkowo zamknąć jedną z pozostałych maszyn, wpisując polecenie w niewłaściwym oknie.

Serwer, który chcę wyłączyć, wyłącza się tylko w programie VirtualBox na pulpicie Windows i używam go tylko do testowania lokalnego, więc nie ma problemu, jeśli nie mogę go zamknąć z wiersza poleceń.

Już trochę złagodziłem ten problem, upewniając się, że mam inne hasło do obrazu VirtualBox, ale oczywiście jeśli znajdę się w sudo„oknie” na jednej z maszyn produkcyjnych, nadal mogę go przypadkowo zamknąć.

Moje pytania to:

  1. Jak wyłączyć polecenie zamknięcia systemu?
  2. Jeśli wyłączę polecenie zamknięcia, czy są jakieś konsekwencje, o których powinienem wiedzieć? W szczególności, czy wyłączy obsługę zamykania ACPI, co jest równoważne z naciśnięciem przycisku zasilania na fizycznej maszynie? Czy może to wpłynąć na inne ogólne aplikacje?

Aby uzyskać informacje, używam tego obrazu VirtualBox do testowania skryptów powłoki, uruchamiania Tomcat i Java i tego typu rzeczy.

Bogaty
źródło
2
Moim zdaniem zmiana takiego podstawowego zachowania systemu, aby zapobiec błędom ludzkim, jest złym pomysłem. W dłuższej perspektywie może to przynieść więcej problemów niż rozwiązuje. Jeśli zachowasz inne hasło użytkownika dla każdego systemu, zminimalizujesz ryzyko (ponieważ wymaga sudo). Powinieneś rozwinąć dobre nawyki, które nie zależą od konkretnej zmiany systemu, znacznie poważniejsze katastrofy są często powodowane przez rm / cp / chmod, które są używane znacznie częściej, i myślę, że nie zamierzasz ich wyłączać.
João Pinto,
Chociaż zgadzam się z tym i zdecydowanie jest to właściwy sposób na robienie rzeczy, to po prostu unikam tej jednej, drobnej sytuacji, która zawiera nieoficjalny obraz Ubuntu, który mam na pulpicie, aby umożliwić mi wypróbowanie rzeczy bez ryzyka o szarpaniu maszyn mojego pracodawcy :)
Rich

Odpowiedzi:

3

Jeśli zwykle uruchamiasz komendę sudo shutdownzamiast sudo /sbin/shutdown, możesz po prostu ustawić globalny alias powłoki dla „shutdown”, aby zamiast tego wysłać wiadomość do terminala. Prawdziwy plik wykonywalny nadal będzie dostępny dla wszystkich innych celów.

Dave Jennings
źródło
To brzmi jak najlepsza droga, jeśli tylko próbujesz przerwać nawyk.
ændrük
2
Zauważ jednak, że oczywisty sposób ustawienia aliasu powłoki ( alias shutdown=sl) nie będzie miał żadnego wpływu na argumenty sudo. W Zsh możesz zdefiniować aliasy, które pasują do argumentów, ale myślę, że nie w bash. Możesz sudoużyć aliasu do skryptu powłoki, który odmawia wykonania czegokolwiek, jeśli pierwszym argumentem jest shutdown.
poolie 23.03.11
2
Innymi słowy, to nie zadziała.
poolie
14

Znacznie lepszym rozwiązaniem tego problemu jest instalacja Molly-Guard programu na polach ty nie chcesz wyłączenia, zamiast próbować szkolić się nie uruchomić wyłączył.

Molly-Guard próbuje zapobiec przypadkowemu wyłączeniu lub ponownym uruchomieniu komputera. Robi to poprzez wstrzyknięcie kilku sprawdzeń przed istniejącymi poleceniami: zatrzymanie, ponowne uruchomienie, zamknięcie i wyłączenie zasilania.

Typowa konfiguracja polega na tym, że prosi o wpisanie nazwy hosta komputera, aby potwierdzić, że naprawdę jesteś na dobrej.

Możliwe jest dodawanie nowych skryptów do /etc/molly-guard/run.d(jak udokumentowano na stronie podręcznika , pliki skryptów muszą być zgodne z nazwami oczekiwanymi przez run-parts.

Jeśli naprawdę chcesz wyłączyć shutdown(a to taki dziwny pomysł), po prostu zrób

chmod 0 /sbin/shutdown

następnie, jeśli musisz go użyć, chmod go z powrotem do 0755.

poolie
źródło
Świetny pomysł, ale niestety niemożliwy, ponieważ nie mam wystarczającej kontroli nad systemami, aby móc zainstalować własne oprogramowanie. Niestety mam wystarczającą kontrolę, aby móc je zamknąć!
Rich
4
Mówisz poważnie? To bardzo dziwne. Jeśli masz dostęp do sudo tylko do zamykania systemu, być może uda ci się przekonać ludzi do zmiany sudo w celu wyświetlenia dużego monitu lub zawsze wymagającego hasła. Jeśli istnieje ryzyko, że przypadkowo je zamkniesz, w interesie administratorów leży zainstalowanie molly-guard.
poolie
1

Aby wyłączyć komendę zamykania, po prostu spraw, by plik binarny nie był wykonywalny, tzn. sudo chmod a-x /sbin/shutdown Również nie sądzę, że wpłynie to na jakąkolwiek inną metodę zamykania, ponieważ jak mówi wpis man dotyczący zamykania

shutdown wysyła żądanie do demona init, aby sprowadził system do odpowiedniego poziomu działania

więc każde inne polecenie / skrypt może to zrobić nawet po wyłączeniu polecenia shutdown, na przykład nadal mogę zamknąć system za pomocą shutdown z menu GNOME. Nadal możesz zrestartować komputer z wiersza poleceń, używając polecenia restartu

binW
źródło
1

shutdownKomenda jest /sbin/shutdown. Możesz to wyłączyć, wykonując następujące czynności:

sudo mv /sbin/shutdown /sbin/really-do-shutdown

Ale : Oznacza to, że prawie żadna z typowych metod zamykania systemu nie będzie działać. Wyłączenie gnoma na mojej maszynie testowej dla tej odpowiedzi powoduje, że po prostu wylogowuje cię i wrzuca z powrotem do GDM.

Jeśli chcesz później zamknąć system, musisz to zrobić

sudo init 0

Wyłączenie „Wyłączenie” wpłynie na każdą aplikację, która używa polecenia do czegokolwiek. Ponieważ init 0nie jest to zalecany sposób zamykania systemu, wszystkie programy, które muszą zamknąć system, korzystają shutdownz niego, co już nie będzie działać.

  • Aplikacje mogą również zgłaszać wyjątki ze względu na brakujący plik lub plik, który nie jest wykonywalny , co może spowodować awarię, nawet jeśli zamknięcie nie jest konieczne. Jest to przypadek, który można obejść, przenosząc w to miejsce jakiś plik binarny, najlepiej wykonywalny (nie skrypt powłoki - to nie zadziała). Na przykład:

    sudo cp /bin/ps /sbin/shutdown
    

    Dzieje się tak po tym, jak bezpiecznie usunąłeś oryginał.

Teraz wszystko to jest dość zuchwałe i odradzam to z powodów przedstawionych w komentarzu João Pinto. Ale nie powstrzymam cię przed zrobieniem tego. :-)

Nie tylko wykonuj kopię zapasową / sbin / shutdown, ale także przygotuj plan odzyskiwania na wypadek, gdyby spowodował jakiekolwiek problemy. Nie rób tego na przykład na serwerze, do którego nie możesz się dostać. I przetestować plan naprawczy wcześniej, przy założeniu, że system nie uruchamia się w ogóle (będzie uruchomić oczywiście - Przetestowałem go - ale proszę być po bezpiecznej stronie).

Stefano Palazzo
źródło
0

Myślę, że powinno być inne rozwiązanie, serwery powinny mieć politykę ssh, aby wyłączyć zamykanie i inicjować 0 przez ssh, lub musi być wyświetlone specjalne okno dialogowe na konsoli jak w Windows, aby wprowadzić „dlaczego” i specjalne „hasło zamknięcia” . W tym celu przycisk zasilania powinien być chroniony hasłem na serwerze.

W tej chwili używamy „fizycznego przełącznika kluczykowego = 4Euro” zamiast przycisku.


źródło
0

Chcę wyłączyć shutdownpolecenie.

cp / sbin / shutdown / sbin / shutdown-backup

rm / sbin / shutdown

dzieje się tak dlatego, że jeśli ktoś próbuje użyć tego polecenia, to też nie może

teraz nikt nie będzie mógł używać polecenia zamykania.

wyświetli komunikat, że komenda nie została znaleziona, zainstaluj ją.

vim /etc/bash.bashrc

Dodaj wiersz na końcu bash.bashrc

alias shutdown = "echo 'Nie możesz używać tego polecenia'"

jeśli chcesz to z powrotem (włączone). po prostu skopiuj to z powrotem

cp / sbin / shutdown-backup / sbin / shutdown

Dishank Jindal
źródło