Poszukiwanie Linuksa. Gratulujemy zwycięzcom i opowiadamy o rozwiązaniach zadań

Poszukiwanie Linuksa. Gratulujemy zwycięzcom i opowiadamy o rozwiązaniach zadań

25 marca uruchomiliśmy zapisy na Poszukiwanie Linuksa, jest to gra dla miłośników i ekspertów systemu operacyjnego Linux. Trochę statystyk: Do gry zarejestrowało się 1117 osób, 317 z nich znalazło przynajmniej jeden klucz, 241 pomyślnie wykonało zadanie pierwszego etapu, 123 przeszło drugi etap, a 70 przeszło trzeci. Dziś nasza gra dobiegła końca i gratulujemy zwycięzcom!

  • Pierwsze miejsce zajął Aleksander Teldekow.
    Alexander mówił sobie, że jest najbardziej typowym administratorem systemu. Mieszka w Wołgogradzie, od około dwudziestu lat administruje różnymi systemami uniksowymi. Udało mi się pracować u dostawców Internetu, banku i integratora systemów. Teraz pracuje zdalnie w małej firmie, pracując nad infrastrukturą chmurową dla dużego klienta zagranicznego. Uwielbia czytać i słuchać muzyki. O grze Aleksander powiedział, że podoba mu się gra jako całość, uwielbia takie zadania. Podczas rozmowy kwalifikacyjnej w jednej z firm zrobiłem coś na wzór Hackerranka, było ciekawie.
  • Drugie miejsce – Roman Susłow.
    Powieść z Moskwy. Ma 37 lat. Pracuje jako inżynier Linux/Unix w Jet Infosystems. W pracy muszę administrować i rozwiązywać problemy z systemami Linux/Unix + SAN. Zainteresowania są zróżnicowane: systemy Linux, programowanie, inżynieria wsteczna, bezpieczeństwo informacji, Arduino. O grze Roman zauważył, że gra ogólnie mu się podobała. „Trochę rozciągnąłem mózg i odpocząłem od szarej codzienności codziennej pracy. 🙂 Chciałbym mieć więcej zadań, bo inaczej zanim zdążyłem tego posmakować, gra już się skończyła.”
  • Po trzecie – alex3d.
    Alex mieszka w Moskwie i pracuje przy tworzeniu oprogramowania. „Dziękuję za konkurs. Ciekawie było przetestować moje umiejętności korzystania z Google-fu.”

Również w rankingu 10 najlepszych zawodników:

  • Jewgienij Saldajew
  • Markel Mochnaczewski
  • Konstanty Konosow
  • Paweł Siergiejew
  • Włodzimierz Bowajew
  • Iwan Bubnow
  • Paweł Klet

Rozumiemy, że istnieje wiele możliwości rozwiązania wszystkich naszych problemów; niektóre z możliwych rozwiązań opisano poniżej.

1. Pierwszy etap

Nazwaliśmy to „Czy naprawdę jesteś administratorem?”, Ponieważ zadanie było dość proste - naprawić usługę ciepłej lampy.

1.1. Ciekawe fakty:

Dwóch graczy znalazło pierwszy klucz w pierwszych 15 minutach gry, a już w ciągu pierwszej godziny mieliśmy trzech liderów, którzy wykonali zadanie.

1.2. Ćwiczenia

Rozpocząłeś pracę w firmie, w której przez długi czas nie było kompetentnego specjalisty ds. technologii informatycznych. Zanim zaczniesz porządkować, musisz rozwiązać palący problem, który blokuje pracę biura.

Sprzątaczka chwyciła mopem kabel zasilający szafę serwerową. Zasilanie zostało przywrócone, ale bardzo ważna strona internetowa nadal nie działa. Strona internetowa jest ważna, ponieważ firma nie przywiązuje dużej wagi do bezpieczeństwa informacji, a na jej stronie głównej znajduje się jawnym tekstem hasło administratora do komputera dyrektora generalnego.

Któregoś dnia hasło zostało zmienione, ale wszyscy zapomnieli nowego, dyrektor nie może pracować. Krążą pogłoski, że w tej maszynie znajdowało się więcej kluczy, które mogłyby nam pomóc w rozszyfrowaniu kopii zapasowej dokumentów księgowych.

Każdy oczekuje szybkiego rozwiązania problemu!

1.3. Rozwiązanie

1. Przede wszystkim musisz zmienić hasło roota na maszynie wirtualnej, aby uzyskać do niej dostęp. Podczas uruchamiania zauważamy, że jest to serwer Ubuntu 16.04.

Aby zresetować hasło roota, ponownie uruchamiamy maszynę, podczas ładowania, w momencie wyświetlenia menu Gruba, przejdź do edycji elementu Ubuntu za pomocą przycisku „e”. Edytuj linię Linux, dodaj ją na końcu init=/bin/bash. Ładujemy poprzez Ctrl+x, dostajemy bash. Zamontuj ponownie root za pomocą rw, zmień hasło:

$ mount -o remount,rw /dev/mapper/ubuntu--vg-root
$ passwd

Nie zapomnij o synchronizacji, uruchom ponownie.

2. Warunek mówi, że nasz serwer WWW nie działa, spójrz:

$ curl localhost
Not Found
The requested URL / was not found on this server.
Apache/2.4.18 

Oznacza to, że Apache działa, ale odpowiada kodem 404. Spójrzmy na konfigurację:

$ vim /etc/apache2/sites-enabled/000-default.conf

Tu też jest klucz – StevenPaulSteveJobs.

Sprawdzanie ścieżki /usr/share/WordPress - nie ma czegoś takiego, ale jest /usr/share/wordpress. Edytuj konfigurację i uruchom ponownie Apache.

$ systemctl restart apache2

3. Spróbuj ponownie, pojawia się błąd:

Warning: mysqli_real_connect(): (HY000/2002): Connection refused in /usr/share/wordpress/wp-includes/wp-db.php on line 1488

Baza danych nie działa?

$ systemctl status mysql
Active: active (running)

O co chodzi? Musimy to rozgryźć. Aby to zrobić, musisz uzyskać dostęp do MySQL, jak opisano w dokumentacja. Jeden z punktów dokumentacji zaleca zarejestrowanie opcji skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf. Jest tu także klucz - AugustaAdaKingByron.

Korygowanie uprawnień użytkownika 'wp'@'localhost'. Uruchamiamy MySQL, udostępniamy go przez sieć, komentując opcję w konfiguracji skip-networking.

4. Po wykonaniu tych kroków serwer WWW uruchamia się, ale strona nadal nie działa, ponieważ

Warning: require_once(/usr/share/wordpress/wp-content/themes/twentysixteen/footer.php): failed to open stream: Permission denied in /usr/share/wordpress/wp-includes/template.php on line 562

Edytujemy prawa do pliku.

$ chmod 644 /usr/share/wordpress/wp-content/themes/twentysixteen/footer.php

Odświeżamy stronę, wchodzimy na stronę i znajdujemy klucz - BjarneStroustrup! Znaleźliśmy wszystkie trzy klucze, nasz dyrektor może pracować, odszyfrowaliśmy pliki księgowe. Wszyscy są zadowoleni, a przed Tobą mnóstwo pracy związanej z konfiguracją infrastruktury, kopiami zapasowymi i bezpieczeństwem w firmie.

2. Drugi etap

Należało rozwiązać problem gromadzenia danych analitycznych. Analitykę kocha każdy – kto, gdzie i w jakich ilościach z niej korzysta. Wymyśliliśmy przypadek, z którym w tej czy innej formie może zetknąć się każdy inżynier.

2.1. Interesujące fakty

Jeden z naszych graczy wpisał właściwy klucz w ciągu pierwszych 10 minut gry i już po pierwszej godzinie mieliśmy lidera, który wykonał zadanie.

2.2. Ćwiczenia

Poszedłeś do pracy w firmie, przyszli do ciebie menedżerowie i poprosili, żebyś dowiedział się, do kogo wysyłano listy z Afryki. Na ich podstawie musimy zbudować 21 najpopularniejszych adresów odbiorców. Kluczem są pierwsze litery adresów odbiorców. Jedna rzecz: serwer pocztowy, przez który zostały wysłane listy, nie ładuje się. Każdy oczekuje szybkiego rozwiązania problemu!

2.3. Rozwiązanie

1. Serwer nie uruchamia się z powodu nieistniejącej partycji wymiany w fstab, podczas ładowania system próbuje ją zamontować i ulega awarii. Jak uruchomić?

Pobierz obraz, pobraliśmy CentOS 7, uruchom komputer z Live CD/DVD (Rozwiązywanie problemów -> Ratunek), zamontuj system, edytuj /etc/fstab. Natychmiast znajdujemy pierwszy klucz - GottfriedWilhelm11646Leibniz!

Utwórz zamianę:

$ lvcreate -n swap centos -L 256M
$ sync && reboot

2. Jak zawsze nie ma hasła, musisz zmienić hasło roota na maszynie wirtualnej. Zrobiliśmy to już w pierwszym zadaniu. Zmieniamy i pomyślnie logujemy się na serwer, ale on natychmiast uruchamia się ponownie. Serwer jest przeciążony do takiej prędkości, że nawet nie masz czasu dokładnie przejrzeć wszystkich logów. Jak zrozumieć, co się dzieje?

Ponownie uruchamiamy z livecd, dokładnie przestudiujemy logi systemowe i na wszelki wypadek zaglądamy do cron, bo taka częstotliwość. Tam znajdujemy problem i drugi klucz - Alan1912MathisonTuring!

Potrzebne w /etc/crontab usuń lub skomentuj linię echo b > /proc/sysrq-trigger.

3. Po załadowaniu serwera możesz wykonać zadanie menadżerów: „Jakie są adresy w Afryce?” Informacje te są powszechnie dostępne. Informacje te można znaleźć w Internecie za pomocą wyrażeń „adres IP afryka”, „baza danych geoip”. Aby rozwiązać ten problem, można skorzystać z ogólnodostępnych baz danych dystrybucji adresów (geoip). Standardowo korzystaliśmy z bazy danych MaxMind GeoLite2, dostępny na licencji Creative Commons Uznanie autorstwa – Na tych samych warunkach 4.0.

Spróbujmy rozwiązać nasz problem, używając wyłącznie narzędzi systemu Linux, ale ogólnie można go rozwiązać na wiele sposobów: używając narzędzi do filtrowania tekstu i używając skryptów w różnych językach programowania.

Na początek po prostu pobierzemy pary „adres IP nadawcy i odbiorcy” z dziennika poczty /var/log/maillog (zbudujmy tabelę odbiorców e-maili - IP nadawcy). Można to zrobić za pomocą następującego polecenia:

$ cat /var/log/maillog | fgrep -e ' connect from' -e 'status=sent' | sed 's/[]<>[]/ /g' | awk '/connect from/ {ip=$11} /status=sent/ {print $10" "ip}' > log1.txt

Zanim będziemy kontynuować tworzenie bazy adresów afrykańskich, przyjrzyjmy się najpopularniejszym adresom IP nadawców.

$ cat log1.txt | cut -d' ' -f1 | sort | uniq -c | sort -r | head -n 40
5206 [email protected]
4165 [email protected]
3739 [email protected]
3405 [email protected]
3346 [email protected]

Spośród nich wszystkich pod względem liczby listów wyraźnie wyróżnia się trzech pierwszych odbiorców z góry. Jeśli przeanalizujesz adresy IP nadawców, którzy wysyłali wiadomości na adresy z tej pierwszej trójki, zauważysz wyraźną przewagę niektórych sieci:

$ cat log1.txt | fgrep '[email protected]' | cut -d' ' -f2 | sort | cut -d'.' -f1 | uniq -c | sort -r | head
831 105
806 41
782 197
664 196
542 154
503 102
266 156
165 45
150 160
108 165

Większość sieci 105/8, 41/8, 196/8,197/8 przydzielona jest AFRINIC – jednemu z pięciu regionalnych rejestratorów internetowych zajmujących się dystrybucją zasobów Internetu. AFRINIC dystrybuuje przestrzeń adresową w całej Afryce. A 41/8 całkowicie odnosi się do AFRINIC.

https://www.nic.ru/whois/?searchWord=105.0.0.0 
https://www.nic.ru/whois/?searchWord=41.0.0.0

Zatem odpowiedź na problem znajduje się w samym dzienniku.

$ cat log1.txt | fgrep -e '105.' -e '41.' -e '196.' -e '197.' -e '154.' -e '102.' | awk '{print $1}' | sort | uniq -c | sort -r | head -n 21
4209 [email protected]
3313 [email protected]
2704 [email protected]
2215 [email protected]
1774 [email protected]
1448 [email protected]
1233 [email protected]
958 [email protected]
862 [email protected]
762 [email protected]
632 [email protected]
539 [email protected]
531 [email protected]
431 [email protected]
380 [email protected]
357 [email protected]
348 [email protected]
312 [email protected]
289 [email protected]
282 [email protected]
274 [email protected]

Na tym etapie otrzymujemy ciąg „LinuxBenedictTorvadst”.

Prawidłowy klucz: „LinusBenedictTorvalds”.

Wynikowy ciąg zawiera literówkę dotyczącą prawidłowego klucza w ostatnich 3 znakach. Wynika to z faktu, że wybrane przez nas sieci nie są w całości dedykowane krajom afrykańskim oraz ze sposobu dystrybucji wiadomości e-mail pomiędzy adresami IP w naszym logu.

Przy wystarczającym określeniu największych sieci przypisanych do krajów Afryki można uzyskać precyzyjną odpowiedź:

$ cat log1.txt | fgrep -e' '105.{30..255}. -e' '41. -e' '196.{64..47}. -e' '196.{248..132}. -e' '197.{160..31}. -e' '154.{127..255}. -e' '102.{70..255}. -e' '156.{155..255}. | awk '{print $1}' | sort | uniq -c | sort -r | head -n 21
3350 [email protected]
2662 [email protected]
2105 [email protected]
1724 [email protected]
1376 [email protected]
1092 [email protected]
849 [email protected]
712 [email protected]
584 [email protected]
463 [email protected]
365 [email protected]
269 [email protected]
225 [email protected]
168 [email protected]
142 [email protected]
111 [email protected]
 96 [email protected]
 78 [email protected]
 56 [email protected]
 56 [email protected]
 40 [email protected]

Problem można rozwiązać także w inny sposób.
Pobierz MaxMind, rozpakuj go, a kolejne trzy polecenia również rozwiązują nasz problem.

$ cat GeoLite2-Country-Locations-ru.csv | grep "Африка" | cut -d',' -f1 > africaIds.txt
$ grep -Ff africaIds.txt GeoLite2-Country-Blocks-IPv4.csv | cut -d',' -f1 > africaNetworks.txt
$ grepcidr -f africaNetworks.txt log1.txt | cut -d' ' -f1 | sort | uniq -c | sort -r | head -n21

Tak czy inaczej, w końcu obliczyliśmy statystyki, a menedżerowie otrzymali dane potrzebne do pracy!

3. Trzeci etap

Trzeci etap jest nieco podobny do pierwszego - musisz także naprawić serwis ciepłej lampy, ale wszystko jest bardziej skomplikowane niż w pierwszym zadaniu.

3.1. Interesujące fakty

W ciągu pierwszych 15 minut trzech zawodników znalazło pierwszy klucz, a po 2 godzinach i 20 minutach od rozpoczęcia etapu nasz zwycięzca wykonał zadanie.

3.2. Ćwiczenia

Rozpocząłeś pracę w firmie, w której wszystkie dokumenty firmowe są przechowywane na wewnętrznym serwerze Wiki. W zeszłym roku inżynier zamówił dla serwera 3 nowe dyski oprócz jednego już istniejącego, argumentując, że aby system był odporny na awarie, dyski należy umieścić w pewnego rodzaju macierzach. Niestety, kilka tygodni po ich montażu inżynier wyjechał na wakacje do Indii i już nie wrócił.

Serwer działał bezawaryjnie przez kilka lat, jednak kilka dni temu doszło do włamania do sieci firmowej. Zgodnie z instrukcją ochrona usunęła dyski z serwera i wysłała je do Ciebie. Podczas transportu jeden dysk zaginął bezpowrotnie.

Musimy przywrócić funkcjonalność Wiki, przede wszystkim interesuje nas zawartość stron wiki. Pewien fragment tekstu, który znajdował się na jednej ze stron tej wiki, jest hasłem do serwera 1C i jest pilnie potrzebny do jego odblokowania.

Ponadto gdzieś na stronach wiki lub w innym miejscu znajdowały się hasła do serwera logów i serwera monitoringu wideo, które również warto byłoby odzyskać, bez nich dochodzenie w sprawie zdarzenia jest niemożliwe. Jak zawsze oczekujemy szybkiego rozwiązania problemu!

3.3. Rozwiązanie

1. Próbujemy uruchamiać po kolei z dysków jakie mamy i wszędzie pojawia się ten sam komunikat:

No bootable medium found! System halted 

Musisz z czegoś uruchomić system. Uruchamianie z Live CD/DVD (Rozwiązywanie problemów -> Rescue) znów pomaga. Podczas ładowania próbujemy znaleźć partycję rozruchową, nie możemy jej znaleźć, lądujemy w powłoce. Próbujemy zbadać, co i jak zrobić z dyskami. Wiadomo, że jest ich trzech. Więcej narzędzi do tego jest w 7. wersji CentOS, gdzie znajdują się polecenia blkid lub lsblk, które pokazują nam wszystkie informacje o dyskach.

Jak i co robimy:

$ ls /dev/sd*

Od razu widać, że

/dev/sdb1 - ext4
/dev/sdb2 - часть lvm
/dev/sda1 и /dev/sdc1 - части рейда
/dev/sda2 и /dev/sdc2 - про них ничего не известно на текущий момент

Montujemy sdb1, jasne jest, że jest to partycja rozruchowa CentOS 6.

$ mkdir /mnt/sdb1 && mount /dev/sdb1 /mnt/sdb1

Oczywiście idziemy do sekcji grub i znajdujemy tam pierwszy klucz - James191955Gosling w nietypowym pliku.

2. Badamy pv i lvs, ponieważ współpracujemy z LVM. Widzimy, że powinny być 2 woluminy fizyczne, jeden nie jest zlokalizowany i narzeka na utratę płynu. Widzimy, że powinny istnieć 2 woluminy logiczne: root i swap, podczas gdy root jest częściowo utracony (atrybut P woluminu). Nie ma możliwości montażu, a szkoda! Naprawdę go potrzebujemy.

Są jeszcze 2 dyski, patrzymy na nie, montujemy i montujemy:

$ mdadm --examine --verbose --scan
$ mdadm --assemble --verbose --scan
$ mkdir /mnt/md127 && mount /dev/md127  /mnt/md127 

Patrzymy, widzimy, że jest to partycja rozruchowa CentOS 6 i duplikat tego, co już jest włączone /dev/sdb1, a tu znowu ten sam klucz - DennisBMacAlistairCRitchie!
Zobaczmy jak to jest zmontowane /dev/md127.

$ mdadm --detail /dev/md127

Widzimy, że powinien był zostać złożony z 4 dysków, ale został złożony z dwóch /dev/sda1 и /dev/sdc1, powinny one mieć numery 2 i 4 w systemie. Zakładamy, że od /dev/sda2 и /dev/sdc2 Możesz także zebrać tablicę. Nie jest jasne, dlaczego nie ma na ich temat metadanych, ale leży to na sumieniu administratora, który przebywa gdzieś na Goa. Zakładamy, że powinien być RAID10, chociaż istnieją opcje. Zbieramy:

$ mdadm --create --verbose /dev/md0 --assume-clean --level=10 --raid-devices=4 missing /dev/sda2 missing /dev/sdc2

Patrzymy na blkid, pvs, lvs. Odkrywamy, że zebraliśmy fizyczną objętość, której wcześniej brakowało.

lvroot został natychmiast naprawiony, montujemy go, ale najpierw aktywujemy VG:

$ vgchange -a y
$ mkdir /mnt/lvroot && mount /dev/mapper/vg_c6m1-lv_root /mnt/lvroot 

I wszystko tam jest, łącznie z kluczem w głównym katalogu domowym - /root/sweet.

3. Wciąż próbujemy ożywić nasz serwer, aby uruchamiał się normalnie. Wszystkie woluminy logiczne z naszego /dev/md0 (gdzie wszystko znaleźliśmy) przeciągnij go do /dev/sdb2, gdzie początkowo działał cały serwer.

$ pvmove /dev/md0 /dev/sdb2
$ vgreduce vg_c6m1 /dev/md0

Wyłączamy serwer, usuwamy dyski 1 i 3, zostawiamy drugi, uruchamiamy z Live CD/DVD w Rescue. Znajdź partycję rozruchową i przywróć program ładujący w Grub:

root (hd0,0)
setup (hd0)

Odrywamy dysk rozruchowy i ładujemy pomyślnie, ale strona nie działa.

4. Istnieją dwie możliwości uruchomienia strony internetowej: skonfiguruj Apache od zera lub użyj nginx z wcześniej skonfigurowanym php-fpm:

$ /etc/init.d/nginx start
$ /etc/init.d/php-fpm start

Na koniec musisz uruchomić MySQL:

$ /etc/init.d/mysqld start

Nie uruchomi się, a odpowiedź leży w środku /var/log/mysql. Jak tylko rozwiążesz problem z MySQL, strona będzie działać, na stronie głównej pojawi się klucz - RichardGCCMatthewGNUStallman! Teraz mamy dostęp do 1C, a pracownicy będą mogli otrzymywać wynagrodzenia. I jak zawsze przed Tobą mnóstwo pracy związanej z zapewnieniem infrastruktury i bezpieczeństwa w firmie.

Możemy także po raz kolejny podzielić się listą książek, które pomogły nam i naszym uczestnikom przygotować się do gry: linux.mail.ru/books.

Dziękujemy, że jesteście z nami! Czekajcie na zapowiedzi kolejnych meczów!

Źródło: www.habr.com

Dodaj komentarz