Linux Quest. Felicitări câștigătorilor și spuneți-ne despre soluțiile sarcinilor

Linux Quest. Felicitări câștigătorilor și spuneți-ne despre soluțiile sarcinilor

Pe 25 martie am deschis înscrierile pentru Linux Quest, acesta este un Joc pentru iubitorii și experții sistemului de operare Linux. Câteva statistici: 1117 persoane s-au înscris pentru joc, 317 dintre ei au găsit cel puțin o cheie, 241 au finalizat cu succes sarcina primei etape, 123 au finalizat a doua etapă și 70 au trecut de a treia etapă. Astăzi jocul nostru s-a încheiat și îi felicităm pe câștigătorii noștri!

  • Alexander Teldekov a ocupat primul loc.
    Alexander și-a spus că este cel mai tipic administrator de sistem. Trăiește în Volgograd și administrează diverse sisteme asemănătoare Unix de aproximativ douăzeci de ani. Am reușit să lucrez în furnizori de internet, o bancă și un integrator de sisteme. Acum lucrează de la distanță într-o companie mică, lucrând la infrastructura cloud pentru un client străin mare. Îi place să citească și să asculte muzică. Despre Joc, Alexander a spus că i-a plăcut jocul în ansamblu, îi plac astfel de sarcini. În timpul unui interviu la una dintre companiile pe care am făcut ceva similar cu Hackerrank, a fost interesant.
  • Locul II - Roman Suslov.
    Un roman de la Moscova. Are 37 de ani. Lucrează ca inginer Linux/Unix la Jet Infosystems. La serviciu, trebuie să administrez și să depanez sistemele Linux/Unix + SAN. Interesele sunt variate: sisteme Linux, programare, inginerie inversă, securitatea informațiilor, Arduino. Despre joc Roman a remarcat că i-a plăcut jocul în general. „Mi-am întins puțin creierul și am luat o pauză de la viața gri de zi cu zi a muncii de zi cu zi. 🙂 Mi-ar plăcea să am mai multe sarcini, altfel înainte de a avea timp să iau un gust, jocul se terminase deja.”
  • Al treilea - alex3d.
    Alex locuiește la Moscova și lucrează în dezvoltarea de software. „Mulțumesc pentru concurs, a fost interesant să-mi testez abilitățile de google-fu.”

De asemenea, în clasamentul celor mai buni 10 jucători:

  • Evghenii Saldayev
  • Markel Mohnachevsky
  • Constantin Konosov
  • Pavel Sergheev
  • Vladimir Bovaev
  • Ivan Bubnov
  • Pavlo Klets

Înțelegem că există multe opțiuni pentru rezolvarea tuturor problemelor noastre; unele dintre soluțiile posibile sunt descrise mai jos.

1. Prima etapă

L-am numit „Ești cu adevărat un administrator?”, deoarece sarcina era destul de simplă - să repari un serviciu de lampă caldă.

1.1. Fapte interesante:

Doi jucători au găsit prima cheie în primele 15 minute de joc, iar în prima oră am avut trei lideri care au finalizat sarcina.

1.2. Exercițiu

Te-ai dus să lucrezi într-o companie în care de mult nu a existat un specialist competent în tehnologia informației. Înainte de a începe să puneți lucrurile în ordine, trebuie să rezolvați problema de ardere care blochează activitatea biroului.

Doamna de curățenie a prins cablul de alimentare al dulapului serverului cu un mop. Alimentarea a fost restabilită, dar un site foarte important încă nu funcționează. Site-ul web este important pentru că firma nu este foarte preocupată de securitatea informațiilor, iar pe pagina principală a acesteia găsiți în text clar parola de administrator pentru computerul CEO-ului.

Zilele trecute parola a fost schimbată, dar toată lumea a uitat-o ​​pe cea nouă, directorul nu poate lucra. Există zvonuri că pe această mașină existau mai multe chei care ne-ar putea ajuta să descifrăm copia de rezervă a documentelor contabile.

Toată lumea se așteaptă la o rezolvare promptă a problemei!

1.3. Soluție

1. În primul rând, trebuie să schimbați parola de root pe mașina virtuală pentru a obține acces la ea. La pornire, observăm că acesta este Ubuntu 16.04 Server.

Pentru a reseta parola de root, repornim mașina, la încărcare, în momentul în care este afișat meniul grub, mergeți la editarea articolului Ubuntu cu butonul „e”. Editați linia linux, adăugați-o la sfârșit init=/bin/bash. Încărcăm prin Ctrl+x, obținem un bash. Remontați rădăcina cu rw, schimbați parola:

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

Nu uitați de sincronizare, reporniți.

2. Condiția spune că serverul nostru web nu funcționează, uite:

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

Adică, de fapt, Apache rulează, dar răspunde cu codul 404. Să ne uităm la configurație:

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

Există și o cheie aici - StevenPaulSteveJobs.

Verificarea traseului /usr/share/WordPress - nu există așa ceva, dar există /usr/share/wordpress. Editați configurația și reporniți Apache.

$ systemctl restart apache2

3. Încercați din nou, primim eroarea:

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

Baza de date nu rulează?

$ systemctl status mysql
Active: active (running)

Ce s-a întâmplat? Trebuie să ne dăm seama. Pentru a face acest lucru, trebuie să obțineți acces la MySQL, așa cum este descris în documentație. Unul dintre punctele de documentare recomandă să înregistrăm opțiunea skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf. Există și o cheie aici - AugustaAdaKingByron.

Corectarea drepturilor utilizatorului 'wp'@'localhost'. Lansăm MySQL, îl facem accesibil prin rețea, comentând opțiunea din config skip-networking.

4. După acești pași, serverul web pornește, dar site-ul tot nu funcționează pentru că

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

Edităm drepturile asupra fișierului.

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

Reîmprospătăm pagina, mergem pe site și găsim cheia - BjarneStroustrup! Am găsit toate cele trei chei, directorul nostru poate lucra, am decriptat fișierele contabile. Toată lumea este fericită și aveți multă muncă în față pentru a configura infrastructura, backup-urile și securitatea în companie.

2. Etapa a doua

Era necesar să se rezolve problema culegerii analitice. Toată lumea iubește analiza - cine o folosește, unde și în ce cantități. Am venit cu un caz pe care toți inginerii îl pot întâlni într-o formă sau alta în viață.

2.1. Fapte interesante

Unul dintre jucătorii noștri a introdus cheia corectă în primele 10 minute de joc, iar în prima oră am avut un lider care a finalizat sarcina.

2.2. Exercițiu

Te-ai dus să lucrezi la companie, managerii au venit la tine și te-au rugat să găsești cui i s-au trimis scrisori din Africa. Trebuie să construim primele 21 de adrese de destinatari pe baza acestora. Primele litere ale adreselor destinatarilor sunt cheia. Un lucru: serverul de mail prin care au fost trimise scrisorile nu se incarca. Toată lumea se așteaptă la o rezolvare promptă a problemei!

2.3. Soluție

1. Serverul nu pornește din cauza unei partiții swap inexistente în fstab, la încărcare, sistemul încearcă să o monteze și se blochează. Cum să pornesc?

Descarcă imaginea, am descărcat CentOS 7, am pornit de pe Live CD/DVD (Depanare -> Rescue), am montat sistemul, editam /etc/fstab. Găsim imediat prima cheie - GottfriedWilhelm11646Leibniz!

Creați schimb:

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

2. Ca întotdeauna, nu există nicio parolă, trebuie să schimbați parola de root pe mașina virtuală. Am făcut asta deja în prima sarcină. Ne schimbăm și ne conectăm cu succes la server, dar acesta intră imediat în repornire. Serverul este supraîncărcat cu o viteză atât de mare încât nici măcar nu ai timp să te uiți la toate jurnalele cu atenție. Cum să înțelegi ce se întâmplă?

Din nou pornim de pe livecd, studiem cu atenție jurnalele de sistem și, pentru orice eventualitate, ne uităm în cron, deoarece o astfel de periodicitate. Acolo găsim problema și a doua cheie - Alan1912MathisonTuring!

Nevoie în /etc/crontab ștergeți sau comentați linia echo b > /proc/sysrq-trigger.

3. După care serverul s-a încărcat și puteți finaliza sarcina managerilor: „Care sunt adresele în Africa?” Aceste informații sunt în general disponibile publicului. Puteți găsi aceste informații pe Internet folosind expresiile „adresă IP Africa”, „bază de date geoip”. Pentru a rezolva problema, puteți utiliza baze de date de distribuție a adreselor disponibile gratuit (geoip). Am folosit baza de date ca standard MaxMind GeoLite2, disponibil sub o licență Creative Commons Attribution-ShareAlike 4.0.

Să încercăm să ne rezolvăm problema folosind doar utilitare de sistem Linux, dar, în general, poate fi rezolvată într-un număr imens de moduri: folosind utilitare de filtrare a textului și folosind scripturi în diferite limbaje de programare.

Pentru început, vom obține pur și simplu perechile „IP expeditor-destinatar” din jurnalul de e-mail /var/log/maillog (să construim un tabel cu destinatarii de e-mail - IP-ul expeditorului). Acest lucru se poate face cu următoarea comandă:

$ 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

Și înainte de a continua cu compilarea unei baze de date cu adrese africane, să aruncăm o privire la cele mai importante adrese IP ale expeditorilor.

$ 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]

Dintre toate, primii trei destinatari din top se remarcă clar ca număr de litere. Dacă grepează adresele IP ale expeditorilor care au trimis la adrese din acest top 3, vei observa o predominare clară a anumitor rețele:

$ 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

Majoritatea rețelelor 105/8, 41/8, 196/8,197/8 sunt alocate AFRINIC - unul dintre cei cinci registratori regionali de Internet care distribuie resurse de Internet. AFRINIC distribuie spațiu de adrese în toată Africa. Și 41/8 se referă complet la AFRINIC.

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

Astfel, răspunsul la problemă se află, de fapt, în jurnalul în sine.

$ 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]

În această etapă obținem șirul „LinuxBenedictTorvadst”.

Cheia corectă: „LinusBenedictTorvalds”.

Șirul rezultat conține o greșeală de scriere în legătură cu cheia corectă din ultimele 3 caractere. Acest lucru se datorează faptului că rețelele pe care le-am selectat nu sunt în întregime dedicate țărilor africane și modului în care e-mailurile sunt distribuite prin adrese IP din jurnalul nostru.

Cu o specificare suficientă a celor mai mari rețele alocate țărilor africane, se poate obține un răspuns precis:

$ 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]

Problema poate fi rezolvată și în alt mod.
Descărcați MaxMind, despachetați-l și următoarele trei comenzi ne rezolvă și problema.

$ 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

Într-un fel sau altul, până la urmă am calculat statisticile, iar managerii au primit datele de care aveau nevoie pentru a lucra!

3. Etapa a treia

A treia etapă este oarecum similară cu prima - trebuie să reparați și serviciul lămpii calde, dar totul este mai complicat decât în ​​prima sarcină.

3.1. Fapte interesante

În primele 15 minute, trei jucători au găsit prima cheie; la 2 ore și 20 de minute după începerea etapei, câștigătorul nostru a finalizat sarcina.

3.2. Exercițiu

Ai mers să lucrezi pentru o companie în care toate documentele companiei sunt stocate pe un server Wiki intern. Anul trecut, un inginer a comandat 3 noi discuri pentru server în plus față de unul existent, argumentând că pentru ca sistemul să fie tolerant la erori, discurile trebuiau plasate într-un fel de matrice. Din păcate, la câteva săptămâni după instalarea lor, inginerul a plecat în vacanță în India și nu s-a mai întors.

Serverul a funcționat fără erori timp de câțiva ani, dar acum câteva zile rețeaua companiei a fost piratată. Conform instrucțiunilor, personalul de securitate a scos discurile de pe server și vi le-a trimis. În timpul transportului, un disc a fost pierdut iremediabil.

Trebuie să restabilim funcționalitatea Wiki; în primul rând, ne interesează conținutul paginilor wiki. O anumită bucată de text care se afla pe una dintre paginile acestui wiki este parola pentru serverul 1C și este necesară urgent pentru a o debloca.

În plus, undeva pe paginile wiki sau în alt loc erau parole pentru serverul de jurnal și serverul de supraveghere video, care ar fi de dorit să fie recuperate; fără ele, investigarea incidentului este imposibilă. Ca întotdeauna, ne așteptăm la o rezolvare promptă a problemei!

3.3. Soluție

1. Încercăm să pornim unul câte unul de pe discurile pe care le avem și peste tot primim același mesaj:

No bootable medium found! System halted 

Trebuie să pornești de la ceva. Pornirea de pe un Live CD/DVD (Depanare -> Salvare) ajută din nou. La încărcare, încercăm să găsim partiția de boot, nu o găsim, ajungem în shell. Încercăm să studiem ce și cum să facem cu discurile. Se știe că sunt trei. Există mai multe instrumente pentru aceasta în a 7-a versiune a CentOS, unde există comenzi blkid sau lsblk, care ne arată toate informațiile despre discuri.

Cum și ce facem:

$ ls /dev/sd*

Este imediat evident că

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

Montam sdb1, este clar că aceasta este partiția de pornire a CentOS 6.

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

Evident, mergem la secțiunea grub și găsim acolo prima cheie - James191955Gosling într-un fișier neobișnuit.

2. Studiem pvs și lvs, deoarece lucrăm cu LVM. Vedem ca ar trebui sa fie 2 volume fizice, unul nu este localizat si se plange de un uid pierdut. Vedem că ar trebui să existe 2 volume logice: root și swap, în timp ce root este parțial pierdut (atributul P al volumului). Nu se poate monta, ceea ce este păcat! Avem mare nevoie de el.

Mai sunt 2 discuri, ne uităm la ele, le asamblam și le montem:

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

Ne uităm, putem vedea că aceasta este partiția de pornire a CentOS 6 și o copie a ceea ce este deja activat /dev/sdb1, și aici din nou aceeași cheie - DennisBMacAlistairCRitchie!
Să vedem cum este asamblat /dev/md127.

$ mdadm --detail /dev/md127

Vedem că ar fi trebuit asamblat din 4 discuri, dar a fost asamblat din două /dev/sda1 и /dev/sdc1, ar fi trebuit să fie numerele 2 și 4 în sistem. Presupunem ca de la /dev/sda2 и /dev/sdc2 De asemenea, puteți colecta o matrice. Nu este clar de ce nu există metadate despre ele, dar aceasta este pe conștiința administratorului, care se află undeva în Goa. Presupunem că ar trebui să existe RAID10, deși există opțiuni. Colectăm:

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

Ne uităm la blkid, pvs, lvs. Descoperim că am adunat un volum fizic care anterior ne lipsea.

lvroot a fost reparat imediat, îl montem, dar mai întâi activăm VG:

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

Și totul este acolo, inclusiv cheia din directorul principal rădăcină - /root/sweet.

3. Încă încercăm să reînviam serverul nostru, astfel încât să pornească normal. Toate volumele logice de la noi /dev/md0 (unde am găsit totul) trage-l la /dev/sdb2, unde a funcționat inițial întregul server.

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

Oprim serverul, scoatem discurile 1 și 3, îl lăsăm pe cel de-al doilea, pornim de pe Live CD/DVD în Rescue. Găsiți partiția de boot și restaurați bootloader-ul în grub:

root (hd0,0)
setup (hd0)

Smulgem discul de pornire și încărcăm cu succes, dar site-ul nu funcționează.

4. Există două opțiuni pentru a lansa un site web: configurați Apache de la zero sau utilizați nginx cu php-fpm deja configurat în prealabil:

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

În cele din urmă, trebuie să porniți MySQL:

$ /etc/init.d/mysqld start

Nu va începe, iar răspunsul constă în /var/log/mysql. De îndată ce rezolvați problema cu MySQL, site-ul va funcționa, pe pagina principală va fi o cheie - RichardGCCMatthewGNUStallman! Acum avem acces la 1C, iar angajații își vor putea primi salariile. Și, ca întotdeauna, aveți multă muncă în față pentru a stabili infrastructura și securitatea în companie.

De asemenea, putem împărtăși încă o dată o listă de cărți care ne-au ajutat pe noi și pe participanții noștri să ne pregătim pentru joc: linux.mail.ru/books.

Vă mulțumim că sunteți alături de noi! Rămâneți pe fază pentru anunțurile următoarelor jocuri!

Sursa: www.habr.com

Adauga un comentariu