Linux Quest. Čestitamo zmagovalcem in predstavljamo rešitve nalog

Linux Quest. Čestitamo zmagovalcem in predstavljamo rešitve nalog

Na 25. marec smo odprli registracijo za Linux Quest, to je igra za ljubitelje in poznavalce operacijskega sistema Linux. Malo statistike: na igro se je registriralo 1117 ljudi, od katerih je 317 našlo vsaj eno ključno besedo, 241 jih je uspešno rešilo nalogo prvega nivoja, 123 drugega in 70 je zaključilo tretji nivo. Danes je naša igra prišla do konca, in čestitamo našim zmagovalcem!

  • Prvo mesto je zasedel Aleksander Teldikov.
    Aleksander je o sebi dejal, da je najbolj tipičen sistemski skrbnik. Živi v Volgogradu, različne Unix-like sisteme administrira že dvajset let. Uspešno je delal pri internetnih ponudnikih, v bankah in sistemskih integratorjih. Sedaj dela na daljavo v majhni firmi, kjer se ukvarja z oblačno infrastrukturo za velike tuje naročnike. Rad bere in posluša glasbo. O igri je Aleksander dejal, da mu je splošno bila všeč, obožuje takšne izzive. V eni od firm se je na razgovoru ukvarjal s podobnim kot Hackerrank, bilo je zanimivo.
  • Drugo mesto — Roman Suslov.
    Roman je iz Moskve. Star je 37 let. Dela kot Linux/Unix inženir v podjetju 'Infosysteme Jet'. Pri svojem delu se ukvarja z administracijo in odpravljanjem napak v Linux/Unix sistemih + SAN. Njegovi interesi so različni: Linux sistemi, programiranje, reverse engineering, informacijska varnost, Arduino. O igri je Roman opazil, da mu je na splošno bila všeč. 'Malce sem razgibal svoje misli in se odklopil od sive rutine vsakodnevnega dela. 🙂 Želel bi več nalog, ker nisem imel časa, da bi se resnično spustil v igro, ko je ta že končana.'
  • Tretje — alex3d.
    Alex živi v Moskvi in se ukvarja z razvojem programske opreme. 'Hvala za tekmovanje, bilo je zanimivo preveriti svoje sposobnosti googlanja.'

Prav tako v lestvici 10 najboljših igralcev:

  • Yevgeniy Saldayev
  • Markel Mohnachevskiy
  • Konstantin Konosov
  • Pavel Sergeev
  • Vladimir Bovaev
  • Ivan Bubnov
  • Pavlo Klets

Zavedamo se, da je možnosti reševanja naših nalog veliko, spodaj so opisani nekateri možni načini reševanja.

1. Prvi nivo

Poimenovali smo ga 'Ali si res skrbnik?', saj je bila naloga dokaj enostavna — popraviti topel, lampni servis.

1.1. Zanimivosti:

Dva igralca sta našla prvi ključ v prvih 15 minutah igre, v prvem uri pa imamo tri voditelje, ki so opravili nalogo.

1.2. Naloga

Začel si delati v podjetju, kjer dolgo časa ni bilo usposobljenega strokovnjaka za informacijske tehnologije. Preden začneš uvajati red, je treba rešiti nujno težavo, ki ovira delo pisarne.

Čistilka je z mopom zadela napajalni kabel strežnika. Napajanje je bilo obnovljeno, toda zelo pomembna spletna stran kljub temu ne deluje. Spletna stran je pomembna, ker podjetje ni posebej pozorno na informacijsko varnost, na glavni strani pa lahko v odprtem dostopu najdemo geslo administratorja računalnika direktorja.

Nedavno so spremenili geslo, novi pa so vsi pozabili, direktor ne more delati. Hoda govorice, da so na tej napravi bili še ključi, ki nam lahko pomagajo pri dešifriranju varnostne kopije računovodskih dokumentov.

Vsi čakajo na hitro rešitev problema!

1.3. Rešitev

1. Najprej je treba spremeniti geslo root na virtualni napravi, da pridobimo dostop do nje. Ob zagonu opazimo, da gre za Ubuntu 16.04 Server.

Za ponastavitev gesla root ponovno zaženemo napravo, ob nalaganju, v trenutku prikaza menija grub, preidemo v način urejanja točke Ubuntu z gumbom „e“. Uredimo vrsto linux in dodamo na konec init=/bin/bash. Zagnamo z Ctrl+x, pridobimo bash. Ponovno montiramo koren z rw, spremenimo geslo:

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

Ne pozabimo na sync, ponovno zaženemo.

2. V pogoju je navedeno, da naš spletni strežnik ne deluje, poglejmo:

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

Torej v resnici Apache teče, vendar odgovarja s kodo 404. Poglejmo konfiguracijo:

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

Tu je ključ - StevenPaulSteveJobs.

Preverimo pot /usr/share/WordPress — takšne ni, vendar obstaja /usr/share/wordpress. Popravimo konfiguracijo in znova zaženemo Apache.

$ systemctl restart apache2

3. Poskusimo znova, prejmemo napako:

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

Ali baza podatkov ni zagnana?

$ systemctl status mysql
Active: active (running)

Kaj je torej narobe? Treba bo raziskati. Za to je treba pridobiti dostop do MySQL, kako to storiti je opisano v dokumenti. Ena točka dokumentacije nam priporoča, da vnesemo možnost skip-grant-tables u /etc/mysql/mysql.conf.d/mysqld.cnf. Tudi tukaj najdemo ključ - AugustaAdaKingByron.

Popravimo pravice uporabniku 'wp'@'localhost'.Zaganjamo MySQL, omogočimo ga v omrežju, tako da v konfiguraciji komentiramo možnost skip-networking.

4. Po opravljenih dejanjih se spletni strežnik zažene, vendar spletna stran še vedno ne deluje, ker

Opozorilo: require_once(/usr/share/wordpress/wp-content/themes/twentysixteen/footer.php): ni možno odpreti toka: Dovoljenje zavrnjeno v /usr/share/wordpress/wp-includes/template.php na vrsti 562

Popravimo pravice do datoteke.

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

Osvežimo stran, vstopimo na spletno stran in poiščemo ključ — BjarneStroustrup! Našli smo vse tri ključe, naš direktor lahko dela, dešifrirali smo računovodske datoteke. Vsi so srečni, pred tabo pa je še veliko dela pri postavljanju infrastrukture, varnostnih kopij in varnosti v podjetju.

2. Druga faza

Treba je bilo rešiti nalogo o zbiranju analitike. Analitiko imajo vsi radi — kdo in od kod ter v kakšnih količinah prihajajo. Ustvarili smo situacijo, s katero se lahko vsi inženirji v življenju srečajo.

2.1. Zanimivosti

Eden naših igralcev je v prvih 10 minutah igre vtipkal pravilen ključ, v prvi uri pa se je pojavil vodja, ki je uspešno opravil nalogo.

2.2. Naloga

Začel si delati v podjetju, prišli so managerji in te prosili, da ugotoviš, komu so bila poslana sporočila iz Afrike. Potrebno je sestaviti top-21 naslovov prejemnikov iz njih. Prve črke naslovov prejemnikov so ključ. Edina težava: poštni strežnik, preko katerega so bila sporočila poslana, ne deluje. Vsi čakajo na hitro rešitev težave!

2.3. Rešitev

1. Strežnik ne deluje zaradi neobstoječe swap particije v fstab, med nalaganjem sistem poskuša to priključiti in pade. Kako se lahko naloži?

Prenesemo sliko, prenesli smo CentOS 7, nalagamo z Live CD/DVD (Težave -> Reševanje), priključimo sistem, popravimo /etc/fstab. Takoj najdemo prvi ključ — GottfriedWilhelm11646Leibniz!

Ustvarimo swap:

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

2. Kot vedno ni gesla, treba je spremeniti root geslo na virtualnem stroju. To smo že storili pri prvi nalogi. Spremenimo in uspešno pridemo do strežnika, vendar se takoj znova naloži. Strežnik se ponovno naloži s takšno hitrostjo, da nimamo časa podrobno pregledati vseh dnevnikov. Kako razumeti, kaj se dogaja?

Spet se naložimo z livecd, skrbno preučimo sistemske dnevnike in za vsak slučaj pogleda v cron, glede na to, da je tako pogosta. Tam najdemo težavo in drugi ključ — Alan1912MathisonTuring!

Treba je /etc/crontab izbrisati ali zakomentirati vrstico echo b > /proc/sysrq-trigger.

3. Ko se je strežnik zagnal, lahko izvedemo nalogo managerjev: „Kateri so naslovi Afrike?“ Te informacije so na splošno javno dostopne. Te informacije lahko najdemo na spletu s frazami „ip address africa“, „geoip database“. Za reševanje naloge lahko uporabimo javno dostopne baze razporeditve naslovov (geoip). Kot referenco smo uporabili BDP. MaxMind GeoLite2, dostopno pod licenco Creative Commons Attribution-ShareAlike 4.0.

Poskusimo rešiti našo nalogo, tako da uporabimo le sistemske pripomočke Linux, a sploh jo je mogoče rešiti na ogromno načinov: s pomočjo pripomočkov za filtriranje besedila in s pomočjo skriptov v različnih programskih jezikih.

Za začetek bomo preprosto dobili pare „IP-pošiljatelj — prejemnik“ iz poštnega dnevnika. /var/log/maillog (zgradili bomo tabelo prejemnikov e-pošte — IP pošiljatelja). To lahko storimo s to ukazno vrstico:

$ 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

In preden nadaljujemo z zbiranjem baze naslovov Afrike, si oglejmo vrh IP-naslovov pošiljateljev.

$ cat log1.txt | cut -d' ' -f1 | sort | uniq -c | sort -r | head -n 40
5206 L2JhbjAbM67GA99jg@mail.ru
4165 iHKTBkegOQa6fIALq@mail.ru
3739 nHkcBl7BdgXxijSYD7@mail.ru
3405 SMAzPJAzbl9vp4hAXo@mail.ru
3346 xILz6d7P@mail.ru

Med vsemi v cetverici se po številu sporočil jasno izstopajo trije prvi prejemniki iz vrha. Če grep-amo IP-naslove pošiljateljev, ki so pošiljali na naslove iz te trojke, lahko opazimo jasno prevlado nekaterih omrežij:

$ cat log1.txt | fgrep 'L2JhbjAbM67GA99jg@mail.ru' | 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

Večina omrežij 105/8, 41/8, 196/8, 197/8 pripada AFRINIC— enemu od petih regionalnih internet registratorjev, ki opravljajo razporeditev internetnih virov. AFRINIC razporeja naslovni prostor na območju Afrike. In 41/8 spada pod AFRINIC v celoti.

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

Tako je odgovor na nalogo v bistvu že v samem dnevniku.

$ 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 L2JhbjAbM67GA99jg@mail.ru
3313 iHKTBkegOQa6fIALq@mail.ru
2704 nHkcBl7BdgXxijSYD7@mail.ru
2215 uvRbp1O@mail.ru
1774 sPmMsmmFiV@mail.ru
1448 BtG3aHgQgCKuze2AKuRH@mail.ru
1233 eQpuuQ2uQdbwRL3@mail.ru
958 nJT5dpaBZ@mail.ru
862 ef4WbQiB@mail.ru
762 dQCqKL6eVminFfH7wLA@mail.ru
632 ifq6Rd1HxuCQOdO9@mail.ru
539 cFwm2ssypMmx1sA7@mail.ru
531 twtTnr4G@mail.ru
431 TSrczgYASrR11Hs3qCi@mail.ru
380 o3r3exc3OL@mail.ru
357 rzmjr2VAHK@mail.ru
348 vnPr6YjJ3ndw@mail.ru
312 anOjFXrwOtLP2Rl1Vcz6@mail.ru
289 dvny5zHmRW8fiT@mail.ru
282 sgg9jPxFDYvzw8Kr@mail.ru
274 tKSevzA7GntJ@mail.ru

V tej fazi prejemamo niz „LinuxBenedictTorvadst“.

Pravi ključ: „LinusBenedictTorvalds“.

Prejeti niz vsebuje tipkarsko napako glede na pravi ključ v zadnjih 3 simbolih. To je povezano z dejstvom, da izbrane mreže niso v celoti dodeljene afriškim državam in s tem, kako so e-poštni naslovi razporejeni po IP naslovih v našem dnevniku.

Ob zadostni natančnosti največjih mrež, dodeljenih afriškim državam, lahko pridobimo natančen odgovor.:

$ 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 L2JhbjAbM67GA99jg@mail.ru
2662 iHKTBkegOQa6fIALq@mail.ru
2105 nHkcBl7BdgXxijSYD7@mail.ru
1724 uvRbp1O@mail.ru
1376 sPmMsmmFiV@mail.ru
1092 BtG3aHgQgCKuze2AKuRH@mail.ru
849 eQpuuQ2uQdbwRL3@mail.ru
712 nJT5dpaBZ@mail.ru
584 ef4WbQiB@mail.ru
463 dQCqKL6eVminFfH7wLA@mail.ru
365 ifq6Rd1HxuCQOdO9@mail.ru
269 cFwm2ssypMmx1sA7@mail.ru
225 twtTnr4G@mail.ru
168 TSrczgYASrR11Hs3qCi@mail.ru
142 o3r3exc3OL@mail.ru
111 rzmjr2VAHK@mail.ru
 96 vnPr6YjJ3ndw@mail.ru
 78 anOjFXrwOtLP2Rl1Vcz6@mail.ru
 56 lHzWiB7ExvRtSbAcU9@mail.ru
 56 dvny5zHmRW8fiT@mail.ru
 40 sgg9jPxFDYvzw8Kr@mail.ru

Nalogo lahko rešimo tudi na drug način.
Prenesemo MaxMind, razpakiramo in naslednje tri ukaze prav tako rešijo našo nalogo.

$ cat GeoLite2-Country-Locations-ru.csv | grep "Afrika" | 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

S točno statistiko, ki smo jo na nek način izračunali, so menedžerji prejeli potrebne podatke za delo!

3. Tretja faza

Tretja faza je nekako podobna prvi — tudi popraviti topli lampni servis, a je vse težje kot pri prvem opravilu.

3.1. Zanimivosti

V prvih 15 minutah so trije igralci našli prvi ključ, po 2 urah in 20 minutah po začetku faze je naš zmagovalec opravil nalogo.

3.2. Naloga

Delal si v podjetju, kjer so vsi dokumenti shranjeni na notranjem Wiki strežniku. Lani je inženir naročil 3 nove diske za strežnik, poleg enega obstoječega, trdil je, da je za zanesljivost sistema potrebno diskov postaviti v določene nize. Na žalost, nekaj tednov po njihovi namestitvi je inženir odpotoval na počitnice v Indijo in se ni vrnil.

Več let je strežnik deloval brez težav, a je pred nekaj dnevi podjetje naletelo na hekerski napad. Po navodilih so varnostniki izvlekli diske iz strežnika in jih poslali tebi. Med prevozom pa je en disk nepopravljivo izgubljen.

Potrebno je obnoviti funkcionalnost Wiki, prvenstveno me zanima sadržaj stranica wikipedije. Neki deo teksta koji je bio na jednoj od stranica te wikipedije predstavlja lozinku za 1C server i hitno je potreban za njegovo otključavanje.

Pored toga, negde na stranicama wikipedije ili na drugom mestu su bile lozinke za server zapisa i server videonadzora, koje takođe treba obnoviti, bez njih je istraživanje incidenta nemoguće. Kao i uvek, očekujemo brzo rešenje ovog pitanja!

3.3. Rešenje

1. Pokušavamo da se pokrenemo redom sa onih diskova koje imamo i svuda dobijamo poruku:

No bootable medium found! System halted 

Moramo se od nečega pokrenuti. Ponovo pomaže pokretanje sa Live CD/DVD (Troubleshooting -> Rescue). Prilikom pokretanja pokušavamo da pronađemo boot particiju, ne nalazimo je, ulazimo u shell. Pokušavamo da istražimo šta i kako sa diskovima. Poznato je da ih ima tri. Alata za to ima više u 7. verziji CentOS-a, gde postoje komande blkid ili lsblk, koje nam pokazuju sve informacije o diskovima.

Kako i šta radimo:

$ ls /dev/sd*

Odmah je jasno da

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

Montiramo sdb1, vidimo da je to boot particija CentOS 6.

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

Očigledno idemo u grub particiju i nalazimo prvi ključ — James191955Gosling u neobičnoj datoteci.

2. Istražujemo pvs i lvs, budući da radimo sa LVM-om. Vidimo da bi trebalo da postoje 2 fizička volume, jedan se ne nalazi i javlja grešku zbog izgubljenog uid-a. Vidimo da bi trebalo da postoje 2 logička volume: root i swap, pri čemu je root delimično izgubljen (P atribut kod volume-a). Ne možemo ga montirati, što je šteta! Potreban nam je.

Imamo još 2 diska, pogledamo ih, sakupimo i montiramo:

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

Gledamo, jasno je da je to boot particija CentOS 6 i duplikat onoga što već imamo na /dev/sdb1, i opet isti ključ — DennisBMacAlistairCRitchie!
Gledamo kako je sastavljen /dev/md127.

$ mdadm --detail /dev/md127

Vidimo da je trebao da bude sastavljen od 4 diska, sastavio se od dva /dev/sda1 in /dev/sdc1, oni su trebali biti brojevi 2 i 4 u sistemu. Pretpostavljamo da se /dev/sda2 in /dev/sdc2 i to može sastaviti u niz. Nije jasno zašto nemaju metadata, ali to je na savesti admina koji je negde na Goj. Pretpostavljamo da ovde treba biti RAID10, iako postoje opcije. Skupljamo:

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

Gledamo blkid, pvs, lvs. Otkrivamo da smo sastavili fizički volume koji nam je ranije nedostajao.

Takoj povežemo lvroot, montiramo ga, ampak pred tem aktiviramo VG:

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

In tam je vse, vključno s ključem v domačem imeniku root — /root/sweet.

3. Poskušamo obuditi naš strežnik, da se normalno zažene. Vse logične volumne z našega /dev/md0 (kjer smo našli vse) premaknemo na /dev/sdb2, kjer je strežnik prvotno deloval.

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

Ugasi strežnik, odstranimo 1. in 3. disk, pustimo drugi, ter zaženemo z Live CD/DVD v Rescue. Najdemo zagon, obnovimo zagonski nalagalnik v grub:

root (hd0,0)
setup (hd0)

Odstranimo zagonski disk in uspešno naložimo, a stran ne deluje.

4. Imamo dve možnosti za zagon strani: nastaviti Apache od začetka ali uporabiti že vnaprej nastavljen nginx s php-fpm:

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

Nazadnje je treba zagnati MySQL:

$ /etc/init.d/mysqld start

Ne zažene se in rešitev je skrita v /var/log/mysql. Takoj ko odpravite težavo z MySQL, bo stran zaživela, na glavni strani bo ključ — RichardGCCMatthewGNUStallman! Zdaj imamo dostop do 1C in zaposleni bodo lahko prejeli plače. Ti pa imaš kot ponavadi veliko dela z vzpostavljanjem infrastrukture in varnosti v podjetju.

Poleg tega lahko še enkrat delimo seznam knjig, ki so nam in našim udeležencem pomagale pripraviti se na igro: linux.mail.ru/books.

Hvala, da ste bili z nami! Spremljajte napovedi naslednjih iger!

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster