Dzisiejszy blogpost napisaliśmy pół żartem, pół serio, bo przecież wiadomo, że dobremu adminowi żadna komenda niestraszna, bo wie jak się nimi posługiwać. Są jednak polecenia przy których każdy powinien sprawdzić trzy razy czy nie popełnia strrrasznego błędu. Z okazji Halloween przygotowaliśmy dla Was zestawienie narzędzi i komend, na widok których najbardziej doświadczeni admini lekko drżą, ewentualnie żartują z zimną kroplą potu na karku.
Pogrom rm
Pewnie pierwsze, co przychodzi Ci do głowy, to rm -rf / – komenda, która kiedyś faktycznie siała pogrom, bo usuwała rootfs, czyli korzeń drzewa systemowego. W najnowszych wersjach systemów Linux, komenda rm dostała dodatkowe zabezpieczenie przed pomyłkami. Jeśli próbujemy ją wykonać, dostaniemy ostrzeżenie o katastrofalnych skutkach. Dzięki temu możesz czuć się trochę bezpieczniej, ale pamiętaj, że dwa razy sprawdzamy, a raz usuwamy.
To ostrzeżenie nie występuje we wszystkich dystrybucjach Linuxa, dlatego nie polecamy sprawdzania tej komendy w akcji na produkcji.
Trzy siódemki gorsze niż 666
Właściciel może czytać, pisać i wykonywać, grupa też, a wszyscy pozostali… Oni w sumie też mogą wszystko.
Takie użycie CHMOD zawsze przeraża adminów, a jeszcze bardziej przerażające jest to, że inni nie widzą w nim nic złego. Użycie chmod 777 na pliku winno być karane chłostą i wiecznym wygnaniem do /dev/null (o czym później). Wykonanie powyższej komendy nadaje prawa do czytania, zapisu oraz wykonywania pliku jego właścicielowi, grupie do niego przypisanej oraz… wszystkim innym! Programiści często tłumaczą użycie komendy łatwością w operowaniu na pliku i unikaniem problemów z prawami dostępu. Niestety takie działanie prowadzi do poważnej luki w bezpieczeństwie aplikacji.
Ponury Kosiarz
…czyli znane Ci pewnie dobrze i tłumaczące się samo przez się – kill. Polecenie służy do zabijania procesów w systemie. Jest ono szczególnie bezwzględne przy użyciu opcji -9. Nieumiejętne wykonanie komendy może prowadzić do problemów z interakcją z samym systemem. Jedynym ratunkiem może być wtedy restart serwera.
Samo wykonanie komendy kill nie jest takie straszne, ponieważ wysyła tylko sygnał SIGTERM do procesu i pozwala mu spokojnie zakończyć działanie. Informuje też procesy pochodne (tzw. dzieci), że nadszedł ich czas. Gdy jednak zmodyfikujemy nieco wysyłany sygnał (kill -9 czyli bezwzględny SIGKILL) proces zostanie uśmiercony w jednym momencie, a jego dzieci zostaną osierocone. A z sierocińca prosta droga do powstania zombie… ale do nich jeszcze wrócimy 😉
Otchłań /dev/null
/dev/null to tak zwana czarna dziura systemu. Cokolwiek tam wyślesz lub przekierujesz, zniknie na zawsze. Jest przydatne, gdy nie chcemy żeby wynik odpalonego skryptu został wyświetlony.
Deamonologia
W Linuxie spotkasz niejednego deamona. Lecz nie lękaj się, bo Tux jest z Tobą! Daemony to procesy działające w tle, które odpowiadają za usługi na serwerze. Przykładowym deamonem jest sshd, które pozwala na połączenie się do serwera przy pomocy protokołu ssh.
Brains… Brains…
Jeżeli natkniesz się na zombie to nie panikuj, w końcu to Halloween 😉 Jak wiesz z filmów, ciężko się z nimi dogadać… Nie można ich po prostu zabić, ponieważ już nie żyją. Żeby pozbyć się takiego zombie, musisz poskarżyć się jego rodzicowi, czyli wysłać sygnał SIGCHLD. Nadrzędny proces po otrzymaniu tego sygnału powinien wysłać sygnał WAIT do zombie i po prawidłowym odczytaniu od niego danych, martwy proces może wreszcie spocząć w pokoju. W wypadku gdy zombie został osierocony, to opiekę nad nim przejmuje proces init, który regularnie sprawdza czy nie ma jakichś niedobitków.
Kilka zombie to jeszcze nie problem. Kłopoty zaczynają się, gdy pojawia się ich nagły przyrost i proces init nie wyrabia z ich dobijaniem. Może to doprowadzić do wyczerpania się puli PID, przez co nowe procesy nie będą mogły się tworzyć. Bo chociaż każdy zombie zużywa tylko niewielką ilość pamięci, to jeśli jest ich więcej, mogą doprowadzić do spowolnienia działania systemu.
Bomba widelcowa
…czyli po prostu fork bomb. Jeśli zastanawiałeś się, nad naszym GIFem halloweenowym, to teraz już wiesz, skąd wziął się pomysł na niego 🙂 Fork bomb to polecenie bashowe, które w jednym momencie zajmuje wszystkie dostępne zasoby obliczeniowe, przez co uniemożliwia działanie systemu. Fork wziął się od forkowania procesów, co oznacza tworzenie ich kopii. Bomb to podkreślenie szybkiej ekspansji procesu. Komenda definiuje funkcję o nazwie :, która wywołuje się rekursywnie, dwukrotnie podczas wykonywania. Jedno z wywołań odbywa się na pierwszym planie, równocześnie drugie dzieje się w tle. Oto treść komendy::
(){:|:&};:
W wypadku jej wykonania, jeżeli nie chcemy rebootować serwera, potrzebna jest szybka reakcja. Jednym z rozwiązań jest zabicie wszystkich procesów których właścicielem jest użytkownik odpalający bombę: killall -u <user>. Można też zabić grupę procesów, do której należą procesy fork bomby: kill -9 — -PGID.
Backup Schrodingera
Wykonujesz regularnie backup i dzięki temu śpisz spokojnie. A co gdyby okazało się, że wykonana kopia jest uszkodzona i w krytycznej sytuacji okaże się bezużyteczna?
Pamiętaj o regularnej weryfikacji posiadanych kopii zapasowych. Tylko w ten sposób ustrzeżesz się przed posiadaniem “backupu Schrodingera”.
Kill process or sacrifice a child
Brzmi demonicznie, czyż nie? W rzeczywistości to objaw działania OOM Killera (Out Of Memory Killer). To mechanizm, który stanowi naturalną ochronę systemu przed wyczerpaniem pamięci. Standardowo, kernel pozwala procesom w systemie alokować więcej pamięci, niż w rzeczywistości jest dostępne, w nadziei, że te procesy nigdy jej realnie nie skonsumują. Problem pojawia się, gdy któryś z procesów jest na drodze do wchłonięcia całej dostępnej pamięci, a ponadto chętnie by zagryzł dodatkowym gigabajtem RAMu. Wtedy do akcji wkracza OOMKiller, skutecznie przekonując taki proces, że nie powinien czynić zła. Jak widzisz, nie każdy bohater nosi pelerynę 😉
Jeśli nie rm to może dd?
Przyjmijmy, że chcesz wyczyścić stary dysk przed oddaniem go serwerowni. Zapisując go kilkukrotnie zerami, bo w sumie i tak nic ważnego na nim nie było. Jak do tego podejść najrozsądniej?
Dla ułatwienia przyjmijmy, że Twój dysk systemowy to sda, a dysk, którego chcesz się pozbyć widoczny jest jako sdb.
DD ratuje dzień! No to zaczynamy:
if=/dev/null of=/dev/sda [Enter]
Ups…
[Crtl+C][Crtl+C][Crtl+C][Crtl+C]
Ups… Tak, teraz początek Twojego dysku systemowego jest już wyzerowany. dd bywa bardzo szybkie. Dlatego wszelkie polecenia wpisuj z rozwagą. Lepiej trzy razy przeczytać, niż raz odzyskiwać.
Mamy nadzieję, że ta straszna lekcja nauczyła Cię czegoś nowego. Życzymy przerażająco dobrej zabawy Halloweenowej i mamy nadzieję, że Twoje serwery nie zabawią się dziś w cukierek albo psikus 😉