Linux Quest. Sveikiname nugalėtojus ir papasakokite apie užduočių sprendimus

Linux Quest. Sveikiname nugalėtojus ir papasakokite apie užduočių sprendimus

Kovo 25 dieną pradėjome registraciją Linux Quest, tai žaidimas, skirtas Linux operacinės sistemos mėgėjams ir ekspertams. Šiek tiek statistikos: žaidimui užsiregistravo 1117 žmonių, iš jų 317 rado bent vieną raktą, 241 sėkmingai atliko pirmojo etapo užduotį, 123 – antrąjį ir 70 – trečiąjį. Šiandien mūsų žaidimas baigėsi ir sveikiname nugalėtojus!

  • Pirmąją vietą užėmė Aleksandras Teldekovas.
    Aleksandras sau pasakė, kad yra tipiškiausias sistemos administratorius. Gyvena Volgograde, jau apie dvidešimt metų administruoja įvairias Unix tipo sistemas. Pavyko dirbti interneto tiekėjams, banke, sistemų integratoriumi. Dabar jis dirba nuotoliniu būdu nedidelėje įmonėje, kurdamas debesų infrastruktūrą dideliam užsienio klientui. Mėgsta skaityti ir klausytis muzikos. Apie žaidimą Aleksandras sakė, kad jam patiko žaidimas kaip visuma, jam patinka tokios užduotys. Per interviu vienoje iš įmonių padariau kažką panašaus į „Hackerrank“, buvo įdomu.
  • Antroji vieta – Romanas Suslovas.
    Romanas iš Maskvos. Jam 37 metai. Dirba Linux/Unix inžinieriumi Jet Infosystems. Darbe turiu administruoti ir šalinti Linux/Unix sistemas + SAN. Pomėgiai yra įvairūs: Linux sistemos, programavimas, atvirkštinė inžinerija, informacijos sauga, Arduino. Apie žaidimą Romanas pažymėjo, kad apskritai jam patiko žaidimas. „Šiek tiek patempiau smegenis ir pailsėjau nuo pilkos kasdienio darbo kasdienybės. 🙂 Norėčiau turėti daugiau užduočių, antraip nespėjau jo paragauti, žaidimas jau buvo pasibaigęs.
  • Trečias - alex3d.
    Aleksas gyvena Maskvoje ir dirba programinės įrangos kūrimo srityje. „Ačiū už konkursą, buvo įdomu išbandyti savo Google-fu įgūdžius.

Taip pat 10 geriausių žaidėjų reitinge:

  • Jevgenijus Saldajevas
  • Markelis Mokhnačevskis
  • Konstantinas Konosovas
  • Pavelas Sergejevas
  • Vladimiras Bovajevas
  • Ivanas Bubnovas
  • Pavlo Kletsas

Suprantame, kad yra daug galimybių išspręsti visas mūsų problemas; kai kurie galimi sprendimai yra aprašyti toliau.

1. Pirmas etapas

Mes tai pavadinome „Ar tu tikrai administratorius?“, nes užduotis buvo gana paprasta - sutvarkyti šiltos lempos paslaugą.

1.1. Įdomūs faktai:

Du žaidėjai pirmąjį raktą rado per pirmąsias 15 žaidimo minučių, o per pirmąją valandą turėjome tris lyderius, kurie atliko užduotį.

1.2. Pratimas

Išėjote dirbti į įmonę, kurioje ilgą laiką nebuvo kompetentingo informacinių technologijų specialisto. Prieš pradėdami tvarkyti reikalus, turite išspręsti degančią problemą, kuri trukdo biuro darbui.

Valytoja šluoste pagavo serverio spintos maitinimo laidą. Maitinimas buvo atkurtas, bet labai svarbi svetainė vis dar neveikia. Svetainė svarbi tuo, kad įmonė nelabai rūpinasi informacijos saugumu, o pagrindiniame jos puslapyje aiškiu tekstu galima rasti generalinio direktoriaus kompiuterio administratoriaus slaptažodį.

Anądien slaptažodis buvo pakeistas, bet visi pamiršo naują, direktorius negali dirbti. Sklando gandai, kad šiame aparate buvo ir daugiau raktų, kurie galėtų padėti mums iššifruoti buhalterinės apskaitos dokumentų atsarginę kopiją.

Visi tikisi greito problemos sprendimo!

1.3. Sprendimas

1. Visų pirma, norėdami pasiekti virtualią mašiną, turite pakeisti root slaptažodį. Pradėdami pastebime, kad tai yra Ubuntu 16.04 serveris.

Norėdami iš naujo nustatyti pagrindinį slaptažodį, iš naujo paleidžiame mašiną, įkeldami, tuo metu, kai rodomas grub meniu, eikite redaguoti Ubuntu elementą mygtuku „e“. Redaguokite linux eilutę, pridėkite ją prie pabaigos init=/bin/bash. Įkeliame per Ctrl+x, gauname bash. Iš naujo prijunkite šaknį su rw, pakeiskite slaptažodį:

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

Nepamirškite apie sinchronizavimą, paleiskite iš naujo.

2. Sąlyga sako, kad mūsų žiniatinklio serveris neveikia, žiūrėkite:

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

Tai yra, iš tikrųjų „Apache“ veikia, bet atsako kodu 404. Pažvelkime į konfigūraciją:

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

Čia taip pat yra raktas – StevenPaulSteveJobs.

Tikrinamas kelias /usr/share/WordPress – tokio dalyko nėra, bet yra /usr/share/wordpress. Redaguokite konfigūraciją ir iš naujo paleiskite „Apache“.

$ systemctl restart apache2

3. Bandykite dar kartą, gauname klaidą:

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

Duomenų bazė neveikia?

$ systemctl status mysql
Active: active (running)

Kas nutiko? Turime tai išsiaiškinti. Norėdami tai padaryti, turite gauti prieigą prie MySQL, kaip aprašyta dokumentacija. Viename iš dokumentacijos punktų rekomenduojame užregistruoti parinktį skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf. Čia taip pat yra raktas – AugustaAdaKingByron.

Naudotojo teisių taisymas 'wp'@'localhost'. Paleidžiame MySQL, padarome jį pasiekiamą tinkle, komentuodami konfigūracijos parinktį skip-networking.

4. Atlikus šiuos veiksmus, žiniatinklio serveris paleidžiamas, bet svetainė vis tiek neveikia, nes

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

Redaguojame teises į failą.

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

Mes atnaujiname puslapį, einame į svetainę ir randame raktą - BjarneStroustrup! Suradome visus tris raktus, mūsų direktorius gali dirbti, iššifravome apskaitos bylas. Visi yra patenkinti, o jūsų laukia daug darbo kuriant infrastruktūrą, atsargines kopijas ir saugumą įmonėje.

2. Antrasis etapas

Reikėjo išspręsti analitikos rinkimo problemą. Analitiką mėgsta visi – kas ją naudoja, kur ir kokiais kiekiais. Mes sugalvojome atvejį, su kuriuo gyvenime vienaip ar kitaip gali susidurti visi inžinieriai.

2.1. Įdomūs faktai

Vienas iš mūsų žaidėjų įvedė teisingą raktą per pirmąsias 10 žaidimo minučių, o per pirmąją valandą turėjome lyderį, kuris atliko užduotį.

2.2. Pratimas

Nuėjai dirbti į įmonę, pas tave atėjo vadybininkai ir prašė surasti, kam buvo išsiųsti laiškai iš Afrikos. Remdamiesi jais turime sukurti 21 populiariausią gavėjų adresą. Pirmosios gavėjų adresų raidės yra raktas. Vienas dalykas: pašto serveris, per kurį buvo išsiųsti laiškai, neįsikelia. Visi tikisi greito problemos sprendimo!

2.3. Sprendimas

1. Serveris neįsikrauna dėl neegzistuojančio swap skaidinio fstab, kraunant sistema bando jį prijungti ir sugenda. Kaip paleisti?

Atsisiųskite vaizdą, atsisiuntėme CentOS 7, paleiskite iš Live CD / DVD (Trikčių šalinimas -> Gelbėjimas), prijunkite sistemą, redaguokite /etc/fstab. Iš karto randame pirmąjį raktą - GottfriedWilhelm11646Leibniz!

Sukurti apsikeitimo sandorį:

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

2. Kaip visada, slaptažodžio nėra, reikia pakeisti root slaptažodį virtualioje mašinoje. Tai jau padarėme pirmoje užduotyje. Mes keičiame ir sėkmingai prisijungiame prie serverio, tačiau jis iškart paleidžiamas iš naujo. Serveris perkrautas tokiu greičiu, kad net nespėji atidžiai peržiūrėti visų žurnalų. Kaip suprasti, kas vyksta?

Vėl paleidžiame iš livecd, atidžiai išnagrinėjame sistemos žurnalus ir, tik tuo atveju, žiūrime į cron, nes toks periodiškumas. Ten randame problemą ir antrą raktą – Alan1912MathisonTuring!

Reikalingas /etc/crontab ištrinti arba pakomentuoti eilutę echo b > /proc/sysrq-trigger.

3. Po to serveris buvo įkeltas ir jūs galite atlikti vadybininkų užduotį: "Kokie adresai yra Afrikoje?" Ši informacija paprastai yra prieinama visuomenei. Šią informaciją galite rasti internete naudodami frazes „ip adresas afrika“, „geoip duomenų bazė“. Norėdami išspręsti problemą, galite naudoti laisvai prieinamas adresų paskirstymo duomenų bazes (geoip). Duomenų bazę naudojome kaip standartą MaxMind GeoLite2, prieinama pagal Creative Commons Attribution-ShareAlike 4.0 licenciją.

Pabandykime išspręsti savo problemą naudodamiesi tik „Linux“ sistemos komunalinėmis programomis, tačiau apskritai ją galima išspręsti labai daugybe būdų: naudojant teksto filtravimo priemones ir naudojant scenarijus įvairiomis programavimo kalbomis.

Pirmiausia iš pašto žurnalo gausime „siuntėjo ir gavėjo IP“ poras /var/log/maillog (sudarykime el. pašto gavėjų lentelę – siuntėjo IP). Tai galima padaryti naudojant šią komandą:

$ 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

Ir prieš tęsdami Afrikos adresų duomenų bazės sudarymą, pažvelkime į populiariausius siuntėjų IP adresus.

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

Tarp visų jų raidžių skaičiumi aiškiai išsiskiria pirmieji trys gavėjai iš viršaus. Jei sugrąžinsite siuntėjų, kurie siuntė adresus iš šio top 3, IP adresus, pastebėsite aiškią tam tikrų tinklų dominavimą:

$ 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

Dauguma tinklų 105/8, 41/8, 196/8,197/8 yra priskirti AFRINIC – vienam iš penkių regioninių interneto registratorių, platinančių interneto išteklius. AFRINIC platina adresų erdvę visoje Afrikoje. Ir 41/8 reiškia AFRINIC visiškai.

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

Taigi atsakymas į problemą iš tikrųjų yra pačiame žurnale.

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

Šiame etape gauname eilutę „LinuxBenedictTorvadst“.

Teisingas raktas: „LinusBenedictTorvalds“.

Gautoje eilutėje yra rašybos klaida, susijusi su teisingu raktu paskutiniuose 3 simboliuose. Taip yra dėl to, kad mūsų pasirinkti tinklai nėra visiškai skirti Afrikos šalims ir dėl to, kaip el. laiškai platinami pagal IP adresus mūsų žurnale.

Pakankamai nurodant didžiausius Afrikos šalims skirtus tinklus, galima gauti tikslų atsakymą:

$ 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ą galima išspręsti ir kitu būdu.
Atsisiųskite „MaxMind“, išpakuokite jį ir kitos trys komandos taip pat išspręs mūsų 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

Vienaip ar kitaip, galiausiai suskaičiavome statistiką, ir vadovai gavo darbui reikalingus duomenis!

3. Trečias etapas

Trečias etapas yra šiek tiek panašus į pirmąjį - taip pat reikia sutvarkyti šiltų lempų servisą, tačiau viskas yra sudėtingiau nei pirmoje užduotyje.

3.1. Įdomūs faktai

Per pirmąsias 15 minučių trys žaidėjai rado pirmąjį raktą, praėjus 2 valandoms ir 20 minučių nuo etapo pradžios mūsų nugalėtojas atliko užduotį.

3.2. Pratimas

Išėjote dirbti į įmonę, kurioje visi įmonės dokumentai yra saugomi vidiniame Wiki serveryje. Praėjusiais metais inžinierius užsakė 3 naujus diskus serveriui, be vieno esamo, motyvuodamas tuo, kad dėl sistemos gedimų tolerancijos diskus reikia sudėti į kažkokius masyvus. Deja, praėjus kelioms savaitėms po jų įrengimo, inžinierius išvyko atostogų į Indiją ir negrįžo.

Kelerius metus serveris veikė be gedimų, tačiau prieš porą dienų buvo įsilaužta į įmonės tinklą. Pagal instrukcijas apsaugos darbuotojai iš serverio išėmė diskus ir atsiuntė jums. Transportavimo metu vienas diskas buvo negrįžtamai prarastas.

Turime atkurti Wiki funkcionalumą, visų pirma mus domina viki puslapių turinys. Tam tikra teksto dalis, kuri buvo viename iš šio wiki puslapių, yra 1C serverio slaptažodis ir yra skubiai reikalingas norint jį atrakinti.

Be to, kažkur wiki puslapiuose ar kitur buvo žurnalo serverio ir vaizdo stebėjimo serverio slaptažodžiai, kuriuos taip pat būtų pageidautina atkurti, be jų įvykio tyrimas neįmanomas. Kaip visada, tikimės greito problemos sprendimo!

3.3. Sprendimas

1. Bandome paleisti po vieną iš turimų diskų ir visur gauname tą patį pranešimą:

No bootable medium found! System halted 

Reikia nuo kažko paleisti. Paleidimas iš tiesioginio CD / DVD (Trikčių šalinimas -> Gelbėjimas) vėl padeda. Įkeldami bandome rasti įkrovos skaidinį, jo nerandame, patenkame į apvalkalą. Bandome ištirti, ką ir kaip daryti su diskais. Yra žinoma, kad jų yra trys. Tam yra daugiau įrankių 7-oje CentOS versijoje, kur yra komandos blkid arba lsblk, kuriame rodoma visa informacija apie diskus.

Kaip ir ką mes darome:

$ ls /dev/sd*

Iš karto akivaizdu, kad

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

Mes prijungiame sdb1, aišku, kad tai yra „CentOS 6“ įkrovos skaidinys.

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

Akivaizdu, kad einame į grub skyrių ir ten randame pirmąjį raktą - James191955Gosling neįprastame faile.

2. Studijuojame pvs ir lvs, kadangi dirbame su LVM. Matome, kad turėtų būti 2 fiziniai tomai, vienas nerandamas ir skundžiasi prarastu uid. Matome, kad turėtų būti 2 loginiai tomai: root ir swap, o šaknis iš dalies prarasta (tūrio P atributas). Neįmanoma montuoti, gaila! Mums jo tikrai reikia.

Yra dar 2 diskai, juos apžiūrime, surenkame ir montuojame:

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

Mes žiūrime, matome, kad tai yra „CentOS 6“ įkrovos skaidinys ir to, kas jau yra, dublikatas /dev/sdb1, o čia vėl tas pats raktas – DennisBMacAlistairCRitchie!
Pažiūrėkime, kaip jis surinktas /dev/md127.

$ mdadm --detail /dev/md127

Matome, kad jis turėjo būti surinktas iš 4 diskų, bet jis buvo surinktas iš dviejų /dev/sda1 и /dev/sdc1, sistemoje jie turėjo būti 2 ir 4 numeriai. Manome, kad nuo /dev/sda2 и /dev/sdc2 Taip pat galite rinkti masyvą. Neaišku, kodėl apie juos nėra metaduomenų, bet tai ant administratoriaus, kuris yra kažkur Goa, sąžinė. Manome, kad turėtų būti RAID10, nors yra ir parinkčių. Mes renkame:

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

Mes žiūrime į blkid, pvs, lvs. Atrandame, kad surinkome fizinį tūrį, kurio mums anksčiau trūko.

lvroot buvo nedelsiant suremontuotas, mes jį montuojame, bet pirmiausia suaktyvinkite VG:

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

Ir viskas yra, įskaitant raktą pagrindiniame pagrindiniame kataloge - /root/sweet.

3. Vis dar bandome atgaivinti savo serverį, kad jis pradėtų normaliai. Visi logiški tomai iš mūsų /dev/md0 (kur mes viską radome) nuvilkite į /dev/sdb2, kur iš pradžių dirbo visas serveris.

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

Išjungiame serverį, išimame 1 ir 3 diskus, paliekame antrąjį, paleidžiame iš Live CD/DVD į Rescue. Raskite įkrovos skaidinį ir atkurkite įkrovos įkroviklį grub:

root (hd0,0)
setup (hd0)

Nuplėšiame įkrovos diską ir sėkmingai įkeliame, bet svetainė neveikia.

4. Yra dvi galimybės paleisti svetainę: sukonfigūruoti „Apache“ nuo nulio arba naudoti „nginx“ su iš anksto sukonfigūruotu php-fpm:

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

Galiausiai turite paleisti MySQL:

$ /etc/init.d/mysqld start

Jis neprasidės, o atsakymas slypi /var/log/mysql. Kai tik išspręsite problemą su MySQL, svetainė veiks, pagrindiniame puslapyje bus raktas - RichardGCCMatthewGNUStallman! Dabar turime prieigą prie 1C, o darbuotojai galės gauti atlyginimus. Ir, kaip visada, jūsų laukia daug darbo kuriant infrastruktūrą ir saugumą įmonėje.

Taip pat dar kartą galime pasidalinti knygų, kurios padėjo mums ir mūsų dalyviams pasiruošti žaidimui, sąrašu: linux.mail.ru/books.

Ačiū, kad esate su mumis! Sekite naujienas apie kitus žaidimus!

Šaltinis: www.habr.com

Добавить комментарий