Linux Quest. Čestitamo pobjednicima i pričamo o rješenjima zadataka

Linux Quest. Čestitamo pobjednicima i pričamo o rješenjima zadataka

25. ožujka otvorili smo registraciju za Linux Quest, to je igra za ljubitelje i poznavatelje operativnog sustava Linux. Malo statistike: 1117 osoba se registriralo za igru, od kojih je 317 našlo barem jedan ključ, 241 je uspješno obavilo zadatak prve faze, 123 - druge, a 70 je prošlo treću fazu. Danas je naša igra završila i čestitamo našim pobjednicima!

  • Prvo mjesto osvojio je Aleksandar Teldekov.
    Aleksandar je rekao o sebi da je najtipičniji sysadmin. Živi u Volgogradu, raznim Unix-like sustavima se bavi već dvadeset godina. Radio je u internetskim davateljima, banci, sistemskoj integraciji. Sada radi na daljinu u maloj firmi, bavi se oblačnom infrastrukturom za velikog stranog klijenta. Voli čitati, slušati glazbu. O igri Aleksandar je rekao da mu se sveukupno svidjela, voli takve zadatke. U jednoj od kompanija na razgovoru za posao bavio se sličnim stvarima kao na Hackerranku, bilo je zanimljivo.
  • Drugo mjesto — Roman Suslov.
    Roman dolazi iz Moskve. Ima 37 godina. Radi kao Linux/Unix inženjer u kompaniji 'Infosustavi Jet'. Zbog posla se mora baviti administracijom i rješavanjem problema Linux/Unix sustava + SAN. Interesi su mu raznoliki: Linux sustavi, programiranje, reverse engineering, informatička sigurnost, Arduino. O igri Roman je istaknuo da mu se sveukupno svidjela. „Malo sam razgibao svoje moždane vijuge i odmaknuo se od sivih svakodnevnih poslova. 🙂 Željelo bi se više zadataka, jer nisam ni uspio zagristi u okus, a igra je već završila“.
  • Treće — alex3d.
    Aleks živi u Moskvi i bavi se razvojem softvera. „Hvala na natjecanju, bilo je zanimljivo provjeriti svoje vještine google-fu.“

Također na popisu 10 najboljih igrača:

  • Yevgeniy Saldayev
  • Markel Mohnačevski
  • Konstantin Konosov
  • Pavel Sergejev
  • Vladimir Bovaev
  • Ivan Bubnov
  • Pavlo Klets

Razumijemo da postoji puno mogućih rješenja naših zadataka, u nastavku su opisani neki od mogućih načina rješavanja.

1. Prva faza

Nazvali smo je „Jesi li ti sigurno admin?“, jer je zadatak bio prilično jednostavan — popraviti topli lampe servis.

1.1. Zanimljive činjenice:

Dvojica igrača pronašli su prvi ključ u prvih 15 minuta igre, a u prvom satu pojavila su se tri vođe koji su obavili zadatak.

1.2. Zadatak

Počeo si rad u kompaniji u kojoj dugo nije bilo stručnjaka za informacione tehnologije. Prije nego što počneš da uvodiš red, treba riješiti hitan problem koji onemogućava rad u kancelariji.

Čistačica je zakačila kabl servera dok je čistila. Napajanje je vraćeno, ali veoma važan veb sajt i dalje ne radi. Veb sajt je važan jer kompanija nije mnogo zabrinuta za informacionu bezbednost, a na početnoj stranici otvoreno se može pronaći administratorska lozinka za računar direktora.

Pre nekoliko dana lozinka je promenjena, a novu su svi zaboravili, direktor ne može da radi. Postoje glasine da su na ovom računaru postojale još neke lozinke koje nam mogu pomoći u dešifrovanju rezervne kopije računovodstvenih dokumenata.

Svi očekuju hitno rešenje problema!

1.3. Rešenje

1. Prvo što treba uraditi je promeniti root lozinku na virtuelnoj mašini kako bismo dobili pristup. Kada pokrenemo, primetimo da je ovo Ubuntu 16.04 Server.

Da resetujemo root lozinku, restartujemo mašinu, a prilikom pokretanja, kada se prikaže grub meni, prelazimo na uređivanje stavke Ubuntu pritiskom na dugme „e“. Uređujemo liniju linux, dodajemo na kraj init=/bin/bash. Učitajte pomoću Ctrl+x i dobijamo bash. Montiramo root sa rw, menjamo lozinku:

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

Ne zaboravite sync, restartujte.

2. U uslovima piše da nam veb server ne radi, proveravamo:

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

Dakle, Apache je pokrenut, ali odgovara sa kodom 404. Gledamo konfiguraciju:

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

Ovdje se nalaze ključevi — StevenPaulSteveJobs.

Proveravamo putanju /usr/share/WordPress — takva ne postoji, ali postoji /usr/share/wordpress. Menjamo konfiguraciju i restartujemo Apache.

$ systemctl restart apache2

3. Pokušavamo ponovo, dobijamo grešku:

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

Da li je Baza podataka isključena?

$ systemctl status mysql
Active: active (running)

U čemu je zapravo problem? Moramo to da istražimo. Da bismo to uradili, trebamo pristupiti MySQL, kako je opisano u dokumentaciju. Jedna od tačaka dokumentacije preporučuje da navedemo opciju skip-grant-tables u /etc/mysql/mysql.conf.d/mysqld.cnf. Ovdje se takođe nalazi ključevi — AugustaAdaKingByron.

Menjamo prava korisniku 'wp'@'localhost'. Pokrećemo MySQL, omogućavamo mu pristup preko mreže, komentarišući opciju u konfiguraciji skip-networking.

4. Nakon izvršenih radnji, veb server se pokreće, ali sajt i dalje ne radi, jer

Upozorenje: require_once( /usr/share/wordpress/wp-content/themes/twentysixteen/footer.php): nije uspjelo otvoriti stream: Dozvola odbijena u /usr/share/wordpress/wp-includes/template.php na liniji 562

Postavljamo dozvole na datoteku.

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

Ažuriramo stranicu, ulazimo na web stranicu i nalazimo ključ — BjarneStroustrup! Pronašli smo sva tri ključa, naš direktor može raditi, dešifrirali smo datoteke računovodstva. Svi su sretni, a pred tobom je puno posla na postavljanju infrastrukture, sigurnosnih kopija i sigurnosti u tvrtki.

2. Druga faza

Trebalo je riješiti zadatak o prikupljanju analitike. Analitiku svi vole — tko, odakle i u kojim količinama dolaze. Smislili smo slučaj s kojim se svi inženjeri mogu susresti kroz svoj rad.

2.1. Zanimljive činjenice

Jedan od naših igrača unio je pravilni ključ u prvih 10 minuta igre, a u prvom satu imali smo vođu koji je uspješno završio zadatak.

2.2. Zadak

Počinješ raditi u tvrtki, dolaze ti menadžeri i traže da pronađeš kome su slana pisma iz Afrike. Trebaš sastaviti top-21 adresa primatelja. Prva slova adresa primatelja su ključ. Jedno ali: poštanski poslužitelj putem kojeg su pisma slana ne reagira. Svi očekuju brzo rješenje problema!

2.3. Rješenje

1. Poslužitelj se ne pokreće zbog nepostojećeg swap odjeljka u fstab-u, prilikom pokretanja sustav pokušava montirati i pada. Kako se pokrenuti?

Preuzimamo sliku, preuzeli smo CentOS 7, pokrećemo s Live CD/DVD (Troubleshooting -> Rescue), montiramo sustav, uređujemo /etc/fstab. Odmah nalazimo prvi ključ — GottfriedWilhelm11646Leibniz!

Stvaramo swap:

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

2. Kao i uvijek, nema lozinke, potrebno je promijeniti root lozinku na virtualnoj mašini. To smo već radili u prvom zadatku. Mijenjamo i uspješno ulazimo na poslužitelj, ali se odmah ponovno pokreće. Poslužitelj se ponovo pokreće tako brzo da ne stignemo ni detaljno pogledati sve dnevnike. Kako razumjeti što se događa?

Ponovo se pokrećemo s livecd-a, pažljivo proučavamo dnevnike sustava i za svaki slučaj provjeravamo cron, s obzirom na takvu periodicnost. Tamo nalazimo problem i drugi ključ — Alan1912MathisonTuring!

Potrebno je u /etc/crontab izbrisati ili komentirati redak echo b > /proc/sysrq-trigger.

3. Nakon što se poslužitelj pokrenuo, možete izvršiti zadatak menadžera: „Koje su adrese Afrike?“ Ove informacije su, u načelu, javno dostupne. Ove informacije možete pronaći na internetu pretražujući pojmove „ip address africa“, „geoip database“. Za rješavanje zadatka možete koristiti slobodno dostupne baze podataka o distribuciji adresa (geoip). U našem slučaju koristili smo bazu podataka MaxMind GeoLite2, dostupnu prema licenci Creative Commons Attribution-ShareAlike 4.0.

Pokušat ćemo riješiti naš zadatak koristeći samo sistemske alate Linux, ali zapravo ga se može riješiti na mnogo načina: pomoću alata za filtriranje teksta i s pomoću skripti na raznim programskim jezicima.

Za početak, jednostavno ćemo dobiti parove „IP-pošiljatelj — primalac” iz poštanskog dnevnika /var/log/maillog (izradit ćemo tablicu email primalaca — IP pošiljatelja). To možete učiniti ovom naredbom:

$ 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 prije nego što nastavimo s izradom Baze podataka adresa Afrike, pogledajmo vrh IP adresa pošiljatelja.

$ 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

Među svim jasno se ističu tri prva primaoca s najviše poruka. Ako grep-ate IP adrese pošiljatelja koji su slali na adrese iz ove top-3, možete primijetiti očitu dominaciju određenih mreža:

$ 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 mreža 105/8, 41/8, 196/8, 197/8 dodijeljena je AFRINIC-u — jednom od pet regionalnih internet registara koji vrše distribuciju internetskih resursa. AFRINIC dodjeljuje adresni prostor na području Afrike. A 41/8 se u potpunosti odnosi na AFRINIC.

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

Dakle, odgovor na zadatak zapravo je u samom 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

U ovoj fazi dobijamo niz „LinuxBenedictTorvadst“.

Ispravan ključ: „LinusBenedictTorvalds“.

Dobijeni niz sadrži grešku u odnosu na pravi ključ u 3 krajnja simbola. To je zbog toga što odabrane mreže nisu u potpunosti dodijeljene zemljama Afrike i zbog načina na koji su e-mailovi raspoređeni po IP adresama u našem logu.

Uz dovoljno pojašnjenja najvećih mreža dodijeljenih zemljama Afrike, možemo dobiti tačan 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

Zadatak se također može riješiti na drugi način.
Preuzimamo MaxMind, raspakujemo i sljedeće tri komande također rješavaju naš problem.

$ 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

Na ovaj ili onaj način, na kraju smo izračunali statistiku i menadžeri su dobili potrebne podatke za rad!

3. Treća faza

Treća faza je donekle slična prvoj — također je potrebno popraviti topli lampni servis, ali je sve složenije nego u prvom zadatku.

3.1. Zanimljive činjenice

U prvih 15 minuta tri igrača su pronašla prvi ključ, a nakon 2 sata i 20 minuta od početka faze naš pobjednik je završio zadatak.

3.2. Zadatak

Počeli ste raditi u kompaniji gdje se svi dokumenti čuvaju na unutrašnjem Wiki serveru. Prošle godine inženjer je naručio 3 nova diska za server pored jednog postojećeg, argumentirajući to time da je potrebno staviti diskove u određene uređaje za otpornost sistema. Nažalost, nekoliko nedelja nakon njihove instalacije inženjer je otišao na odmor u Indiju i nije se vratio.

Server je nekoliko godina radio bez grešaka, ali prije nekoliko dana je mreža kompanije hackovana. Prema uputstvu, zaštitari su izvadili diskove iz servera i poslali ih vama. Tokom transporta, jedan disk je nepopravljivo izgubljen.

Potrebno je obnoviti funkcionalnost Wiki, prije svega je zanimljiv sadržaj wiki stranica. Dio teksta koji je bio na jednoj od stranica ove wikipedije je lozinka za 1C server i hitno nam je potreban za njegovo deblokiranje.

Osim toga, negdje na stranicama wikipedije ili na drugom mjestu su se nalazile lozinke za server logova i server videonadzora, koje također želimo obnoviti, jer bez njih istraživanje incidenta nije moguće. Kao i uvijek, očekujemo brzo rješavanje ovog problema!

3.3. Rješenje

1. Pokušavamo pokrenuti redom s onih diskova koje imamo i svugdje primamo istu poruku:

No bootable medium found! System halted 

Moramo se s nečim pokrenuti. Opet nas spašava pokretanje s Live CD/DVD (Troubleshooting -> Rescue). Tijekom pokretanja pokušavamo pronaći boot particiju, ne uspijevamo, ulazimo u shell. Pokušavamo istražiti što i kako s diskovima. Poznato je da ih ima tri. Alati za to su bolji u 7. verziji CentOS-a, gdje postoje komande blkid ili lsblk, koje nam prikazuju sve informacije o diskovima.

Što radimo:

$ ls /dev/sd*

Odmah se može vidjeti da

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

Montiramo sdb1, vidi se da je to boot particija CentOS 6.

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

Očito idemo u grub particiju i pronalazimo prvi ključ — James191955Gosling u neobičnoj datoteci.

2. Istražujemo pvs i lvs, budući da radimo s LVM. Vidimo da bi trebala biti 2 fizička volumena, jedan se ne pronalazi i žali se na izgubljeni uid. Vidimo da bi trebala biti 2 logična volumena: root i swap, pri čemu je root djelomično izgubljen (atribut P kod volumena). Ne možemo ga montirati, a šteta! Vrlo nam je potreban.

Imamo još 2 diska, gledamo ih, prikupljamo i montiramo:

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

Pogledamo, vidi se da je to boot particija CentOS 6 i duplikat onoga što već imamo /dev/sdb1, i ovdje opet isti ključ — DennisBMacAlistairCRitchie!
Gledamo kako je sastavljeno /dev/md127.

$ mdadm --detail /dev/md127

Vidimo da je trebao biti sastavljen od 4 diska, sastavljen je od dva /dev/sda1 i /dev/sdc1, trebali su biti brojevi 2 i 4 u sustavu. Pretpostavljamo da se /dev/sda2 i /dev/sdc2 može sastaviti i array. Nije jasno zašto na njima nema metapodataka, ali to je na savjesti administratora, koji je negdje na Goau. Pretpostavljamo da bi ovdje trebao biti RAID10, iako postoje opcije. Sastavljamo:

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

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

Odmah popravljamo lvroot, montiramo ga, no prethodno aktiviramo VG:

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

I tamo je sve, uključujući i ključ u home direktoriji root — /root/sweet.

3. Pokušavamo ipak oživjeti naš server kako bi se normalno pokrenuo. Svi logički volumeni s našeg /dev/md0 (gdje se sve našlo) prebacujemo u /dev/sdb2, gdje je izvorno sav radila cijela server.

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

Gasimo server, vadimo 1. i 3. disk, ostavljamo drugi, pokrećemo s Live CD/DVD u Rescue. Nalazimo boot particiju, obnavljamo boot loader u grub:

root (hd0,0)
setup (hd0)

Uzimamo boot disk i uspješno se pokrećemo, ali web stranica ne radi.

4. Postoji dva načina za pokretanje web stranice: konfigurirati Apache ispočetka ili koristiti unaprijed konfigurirani nginx s php-fpm:

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

Napokon, trebamo pokrenuti MySQL:

$ /etc/init.d/mysqld start

Ne pokreće se, a rješenje leži u /var/log/mysql. Čim riješite problem s MySQL, web stranica će raditi, na početnoj stranici će biti ključ — RichardGCCMatthewGNUStallman! Sada imamo pristup u 1C, a zaposlenici će moći dobiti plaću. A ti uvijek imaš puno posla s uspostavljanjem infrastrukture i sigurnosti u kompaniji.

Također možemo još jednom podijeliti popis knjiga koje su pomogle nama i našim sudionicima da se pripreme za igru: linux.mail.ru/books.

Hvala što ste bili s nama! Pratite najave sljedećih igara!

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster