Jak wyłączyć przerażające polecenia terminala?
Korzystałem z SSH, aby uzyskać dostęp do zdalnego serwera Ubuntu bez dostępu do fizycznego serwera. Myślałem, że piszę „ shutdown
” na serwerze NoSQL działającym w systemie operacyjnym Ubuntu, ale tak naprawdę powiedziałem serwerowi Ubuntu, aby się zamknął. Następnie musiałem powiedzieć administratorowi serwera, co zrobiłem, aby mógł dla mnie uruchomić serwer fizyczny. To było zawstydzające!
Jak mogę temu zapobiec?
rm
których ma gorsze skutki uboczne niżshutdown
. Konkluzja: nie ma sposobu, aby zapobiec wystąpieniu złych rzeczy, jeśli będziesz uruchamiać losowe polecenia jako root.Odpowiedzi:
Standardowa odpowiedź brzmi: „nie loguj się jako root”. Wszystkie polecenia uruchamiane jako root są przerażające. Jeśli nie jest to opcja, możesz wstawić do swojego polecenia aliasy,
.bashrc
aby wyłączyć polecenia, które uważasz za szczególnie przerażające. Na przykład:Następnie, jeśli wpiszesz polecenie shutdown, pojawi się następujący komunikat:
( Upewnij się, że Twój
.bashrc
załadowaniu pierwsze, zanim spróbujesz to na serwerze produkcyjnym)Wyjście z bieżącej
ssh
sesji i ponowne zalogowanie się lub użycie. ~/.bashrc
powinno załadować / uruchomić .bashrc. Być może spróbuj uruchomićrm
bez żadnych argumentów, aby upewnić się, że Twój serwer nie wyłączył się automatycznie.bashrc
podczas logowania lub podobnie.Pamiętaj, że jeśli martwisz się głównie zatrzymaniem i zamknięciem, możesz rozważyć zainstalowanie Molly-Guard , co spowoduje, że wpiszesz nazwę hosta przed wyłączeniem komputera. Jest to bardziej przydatne, jeśli regularnie zamykasz całe systemy operacyjne w linii poleceń, ale chcesz się upewnić, że zamykasz właściwy.
Możesz również przetestować, wypróbuj to za pomocą mniej przerażającego polecenia, takiego jak wylogowanie lub wyjście.
źródło
source
jest aliasem.
i nie jest obsługiwany przez wszystkie powłoki.~/.bash_profile
źródło.bashrc
, które nie jest standardowym zachowaniem i w większości systemów,.bashrc
nie jest odczytywane podczas logowania przez ssh, więc nie będzie to miało znaczenia. O wiele lepiej jest dodać aliasy do~/.profile
lub~/.bash_profile
zamiast tego.sudo
istnieje z jakiegoś powodu - użyj go. Po zakończeniu wykonywania polecenia (w tym przypadku interaktywnego interfejsu CLI) następuje powrót do powłoki na poziomie użytkownika, a nie do powłoki root. Istnieje bardzo niewiele godnych powodów, aby znaleźć się w powłoce root. (Dziwię się, że to już nie jest odpowiedź ...)Mimo, że nie będzie muppet, który wykorzystuje
sudo
do wszystkiego . Zrozum, co robisz i zrozum, dlaczego to nie wymaga uprawnień roota.Dodatkowo możesz rozróżnić monit o powłoki root / użytkownika. To również sprawia, że bardziej oczywiste jest, że wróciłeś do powłoki, a nie „ inny CLI ”. Mój jest bardzo kolorowy i ma wiele przydatnych informacji (takich jak nazwa hosta), co sprawia, że bardzo łatwo jest wiedzieć, na którym hoście polecenie zostanie wykonane, a także ułatwia przeglądanie historii i lokalizowanie podpowiedzi - root powłoka używa domyślnego monitu.
Jest to bardziej odpowiednie do użycia na „ swoim ” koncie, ale jeśli poważnie podchodzisz do bezpieczeństwa / administrowania systemem, nie będziesz udostępniać haseł / kont i nie będziesz siedział w powłoce root bez pełnej świadomości.
Jak ludzie powtarzali w kółko, „ aliasing poleceń w celu stworzenia bezpiecznego środowiska to zły pomysł ”. Będziesz czuć się komfortowo w swoim bezpiecznym środowisku, wpisując te „przerażające” polecenia tam, gdzie nie powinieneś. Pewnego dnia zmienisz pracę lub zalogujesz się na nowej maszynie, a potem rozlegnie się huk „ Whoopsy, nie chciałem, przepraszam ”…
źródło
sudo
twoja kolej po kawę.sudo shutdown
? Jeśli wykona to na niewłaściwym komputerze, nadal będzie to katastrofa.sudo
to polecenie powłoki, nie ma ono nic wspólnego z bazą danych.sudo shutdown
, ponieważ zakładam, żesudo
nie jest poleceniem NoSQL. Brak bycia w powłoce root całkowicie rozwiązałby ten problem i był bardzo dobrym pomysłem. Więc uważnie spojrzał na monit przed uruchomieniem ważnych poleceń.Pakiet „Molly-Guard” (przynajmniej w systemach pochodnych Debiana) zainstaluje opakowanie wokół zamykania, zatrzymywania, wyłączania i ponownego uruchamiania. Jeśli wykryje, że terminal jest zdalny, wyświetli monit o podanie nazwy hosta. Jeśli nie pasuje, polecenie jest anulowane.
źródło
rm -rf /
?set -u
może w niektórych przypadkach pomóc, na przykład podczas pisaniarm -rf /$SOME_VARIABLE_WHICH_I_THOUGHT_EXISTS_BUT_DOESNT
.--no-preserve-root
których nie można wpisać przypadkowo.Zaakceptowałem odpowiedź, którą bardzo lubię, jednak jeśli ktoś inny czyta i chce prostszej odpowiedzi, oto moja.
Znajdź plik .bashrc i wstaw jako ostatni wiersz:
Następnie, gdy wpiszesz polecenie shutdown, otrzymasz coś takiego
~bash: notforuse is not a command
To może być głupie, ale jest proste i działa. Doceniam odpowiedzi z lepszymi sposobami na to!
źródło
rm
trollowaniem ludzi -alias rm='echo "You can't use rm!" #'
notforuse
na ścieżce kiedykolwiek zostanie wydane prawidłowe polecenie .~/.SaveMyReputation
i dodaj jako ostatni wiersz.bashrc
linii jako[ -f ~/.SaveMyReputation ] && source ~/,SaveMyReputation
. Możesz w końcu dodać dodatkową linięecho "#Scaring command protected shell, comment the last line of .bashrc and log again to have a full working shell"
do tego pliku. Przynajmniej ten plik aliasu możesz zabrać ze sobą na inny komputer (tak powinno być.bash_aliases
, ale w tym „przestarzałym” przypadku lepiej jest użyć innej nazwy).alias shutdown=shutdown-disabled-by-an-alias
. (To rozwiązuje tylko trzeci i najbardziej drobny problem, na który zwrócił uwagę @DavidRicherby.) Chociaż następna osoba prawdopodobnie prawdopodobnie zajmie tylko 2 sekundy, od przejścianotforuse is not a command
do uruchomieniatype -a shutdown
i znalezienia aliasu, a następnie wpisania wsudo \shutdown
celu wyłączenia rozszerzenia aliasu. (Zakładając, że aliasysudo
do,sudo='sudo '
więc rozwija aliasy w pierwszym argrze).Dla
shutdown
(reboot
,halt
i pokrewne): Mam kopię z pytają mnie, czy jestem pewien (a to i tak nic nie robi). Przechowuję takie skrypty w/usr/local/sbin
. W Debianie ma to priorytet inne/sbin
(jest to pierwszy katalog PATH).Skrypty systemowe wykorzystują pełną ścieżkę, więc taki hack uniemożliwia mi zatrzymanie zdalnego serwera zamiast lokalnego komputera (złe zachowanie z Awesome WM), ale nie ma innego pośredniego efektu, i nadal mogę ich używać jako / sbin / shutdown, gdy naprawdę jest potrzebny .
źródło
shutdown
krytyczny system, który nie ma włamania.Plik Sudoers pozwala na znacznie dokładniejszy poziom szczegółowości niż tylko * 'może używać sudo' *, w szczególności możesz użyć aliasów poleceń, aby utworzyć białe listy grup poleceń, do których ograniczony jest dany użytkownik lub grupa. Pracowałem ze zdalnymi serwerami, które były ograniczone do dostępu ssh i zezwalały na sudo bez hasła (wymagaliśmy kluczy ssh chronionych hasłem). Jest kilka dobrych powodów, aby to zrobić, ale wiąże się to z niebezpieczeństwami, więc użyliśmy aliasów poleceń, aby umożliwić nieograniczony dostęp do rzeczy, które muszą zrobić (ponowne uruchomienie serwerów itp.) Bez przyznawania im uprawnień do rzeczy, których nie zrobili.
Istnieje również składnia, która mówi „nie można uruchomić tego polecenia” . Można go obejść, więc nie należy go używać jako prawdziwego środka bezpieczeństwa, ale działałoby w opisanym scenariuszu.
Człowiek sudoers ma kilka dobrych przykładów, jak to wszystko skonfigurować.
Oczywiście wymaga to użycia sudo, ale powinno to być oczywiste.
źródło
Być może padłeś ofiarą nowej głupoty Ubuntu.
Ubuntu posiadało normalne, klasyczne
shutdown
polecenie, które wymaga obowiązkowego argumentu czasu.Oto, co dzieje się na Ubuntu 12, jeśli piszę
shutdown
, nawet jako zwykły użytkownik:Następnie
Teraz jest Ubuntu 16.10. Nie jestem rootem:
Bez żadnych argumentów planuje zamknięcie systemu na 60 sekund później, a nawet jeśli nie jesteś rootem - tylko konto z uprawnieniami administratora.
Obwiniaj kanoniczny.
źródło
/sbin/shutdown
jestsystemd-sysv
domyślnie dostarczany przez pakiet , więc nie jest to głupota Ubuntu, tosystemd
głupota, i nie pochodzi ona od Ubuntu, ale przynajmniej od Debiana, który z kolei wydaje się przejmować całysystemd
ruch od Red Hata. Obwiniając winę, obwiniaj właściwy byt - nie tylko ten, którego nie lubisz.Do wyłączenia służy molly-guard. Wystarczy go zainstalować, a gdy spróbujesz zamknąć system za pomocą ssh, pojawi się monit o wpisanie nazwy hosta.
Do usuwania plików istnieją rozwiązania takie jak libtrash, który emuluje kosz za pośrednictwem
LD_PRELOAD
biblioteki.I możesz przetestować pliki, które zmieniasz / usuwasz / ... za pomocą programu może . To całkiem fajne podczas testowania czegoś.
źródło
maybe
sprawa wydaje się być uszkodzony przez wzorem: stubbing niektóre syscalli bez-ops ma zamiar rozbić każdą nietrywialne program, który opiera się na tych syscalli do osiągnięcia sukcesu.Spróbuj tego: gdy używasz zdalnej powłoki, za każdym razem, gdy masz zamiar wpisać klawisz „return”, zatrzymaj się na 5 sekund, przesuwając palcem po klawiszu „return” i ponownie przeczytaj polecenie, które masz zamiar wysłać. Czy to jest w porządku? Jesteś pewny?
Wydaje się to trudne, ale z drugiej strony nie powinniśmy spędzać dużo czasu na zdalnych powłokach. Powinniśmy znaleźć wszystkie sposoby na zautomatyzowanie naszych prac konserwacyjnych, aby rzadko, jeśli w ogóle, logowaliśmy się na zdalnym serwerze.
źródło
shutdown
, zatrzymałem się na 5 sekund, ponownie przeczytałem polecenie (na głos!) I jestem pewien, że było poprawne. Następnie naciśnij klawisz Enter, a polecenie zostało właśnie wykonane. Obawiam się, że nie wyłączało to przerażających poleceń. Spróbuję z tym unoszeniem palca, może odległość była zbyt mała / duża.