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

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

25. marta otvorili smo registraciju za Linux Quest, ovo je igra za ljubitelje i stručnjake za Linux operativni sistem. Neke statistike: 1117 ljudi se prijavilo za igru, njih 317 je pronašlo barem jedan ključ, 241 je uspješno završilo zadatak prve faze, 123 - druge i 70 je prošlo treću fazu. Danas je naša utakmica došla do kraja i čestitamo našim pobjednicima!

  • Aleksandar Teldekov zauzeo je prvo mjesto.
    Aleksandar je za sebe rekao da je najtipičniji sistem administrator. Živi u Volgogradu, već dvadesetak godina administrira razne Unix-like sisteme. Uspio sam raditi u internet provajderima, banci i sistem integratoru. Sada radi na daljinu u maloj kompaniji, radeći na infrastrukturi oblaka za velikog stranog kupca. Voli da čita i sluša muziku. O igri, Aleksandar je rekao da mu se svidela igra u celini, voli takve zadatke. Tokom intervjua u jednoj od kompanija uradio sam nešto slično Hackerrank-u, bilo je zanimljivo.
  • Drugo mjesto - Roman Suslov.
    Roman iz Moskve. On ima 37 godina. Radi kao Linux/Unix inženjer u Jet Infosystems. Na poslu moram da administriram i rešavam probleme sa Linux/Unix sistemima + SAN. Interesi su različiti: Linux sistemi, programiranje, obrnuti inženjering, sigurnost informacija, Arduino. O igri Roman je istakao da mu se igra u celini dopala. “Malo sam protegnuo mozak i odmorio se od sive svakodnevice svakodnevnog rada. 🙂 Voleo bih da imam još zadataka, inače pre nego što sam stigao da probam, igra je već bila gotova.”
  • Treće - alex3d.
    Alex živi u Moskvi i radi u razvoju softvera. “Hvala na takmičenju, bilo je zanimljivo testirati svoje vještine google-fu.”

Također na rang listi 10 najboljih igrača:

  • Jevgenij Saldajev
  • Markel Mokhnachevsky
  • Konstantin Konosov
  • Pavel Sergeev
  • Vladimir Bovaev
  • Ivan Bubnov
  • Pavlo Klets

Razumijemo da postoji mnogo opcija za rješavanje svih naših problema; neka od mogućih rješenja su opisana u nastavku.

1. Prva faza

Nazvali smo to „Jesi li stvarno admin?“, jer je zadatak bio prilično jednostavan - popraviti servis tople lampe.

1.1. Zanimljivosti:

Dva igrača su pronašla prvi ključ u prvih 15 minuta igre, a u prvih sat vremena imali smo tri lidera koji su izvršili zadatak.

1.2. Vježbajte

Otišli ste da radite u kompaniji u kojoj dugo nije bilo kompetentnog stručnjaka za informacione tehnologije. Pre nego što počnete da dovodite stvari u red, morate da rešite gorući problem koji blokira rad kancelarije.

Čistačica je krpom uhvatila kabl za napajanje serverskog ormarića. Napajanje je vraćeno, ali veoma važna web stranica još uvijek ne radi. Web stranica je važna jer kompanija nije previše zabrinuta za sigurnost informacija, a na njenoj glavnoj stranici možete u čistom tekstu pronaći administratorsku lozinku za računar generalnog direktora.

Pre neki dan je promenjena lozinka, ali svi su zaboravili novu, direktor ne može da radi. Postoje glasine da je na ovoj mašini bilo više ključeva koji bi nam mogli pomoći da dešifrujemo rezervnu kopiju računovodstvenih dokumenata.

Svi očekuju brzo rješavanje problema!

1.3. Rješenje

1. Prije svega, morate promijeniti root lozinku na virtuelnoj mašini da biste joj pristupili. Prilikom pokretanja, primjećujemo da je ovo Ubuntu 16.04 Server.

Da resetujemo root lozinku, ponovo pokrećemo mašinu, prilikom učitavanja, u trenutku kada se prikaže grub meni, idite da uredite Ubuntu stavku pomoću dugmeta "e". Uredite liniju linuxa, dodajte je na kraj init=/bin/bash. Učitavamo preko Ctrl+x, dobijamo bash. Ponovo montirajte root sa rw, promijenite lozinku:

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

Ne zaboravite na sinhronizaciju, restartujte.

2. Uslov kaže da naš web server ne radi, pogledajte:

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

To je, u stvari, Apache radi, ali odgovara kodom 404. Pogledajmo konfiguraciju:

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

Tu je i ključ - StevenPaulSteveJobs.

Provjeravam put /usr/share/WordPress - Ne postoji to, ali postoji /usr/share/wordpress. Uredite konfiguraciju i ponovo pokrenite Apache.

$ systemctl restart apache2

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

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

Baza podataka ne radi?

$ systemctl status mysql
Active: active (running)

Sta je bilo? Moramo to shvatiti. Da biste to učinili, morate dobiti pristup MySQL-u, kao što je opisano u dokumentaciju. Jedna od tačaka dokumentacije preporučuje da registrujemo opciju skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf. Tu je i ključ - AugustaAdaKingByron.

Ispravljanje korisničkih prava 'wp'@'localhost'. Pokrećemo MySQL, činimo ga dostupnim preko mreže, komentarišući opciju u konfiguraciji skip-networking.

4. Nakon ovih koraka, web server se pokreće, ali stranica i dalje ne radi jer

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

Uređujemo prava na fajl.

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

Osvježavamo stranicu, idemo na stranicu i pronalazimo ključ - BjarneStroustrup! Pronašli smo sva tri ključa, naš direktor može da radi, dešifrovali smo računovodstvene fajlove. Svi su zadovoljni, a pred vama je puno posla na postavljanju infrastrukture, rezervnih kopija i sigurnosti u kompaniji.

2. Druga faza

Bilo je potrebno riješiti problem prikupljanja analitike. Svi vole analitiku – ko je koristi, gde i u kojim količinama. Došli smo do slučaja s kojim se svi inženjeri mogu susresti u ovom ili onom obliku u životu.

2.1. Zanimljivosti

Jedan od naših igrača je u prvih 10 minuta igre unio tačan ključ, a u prvih sat vremena imali smo vođu koji je izvršio zadatak.

2.2. Vježbajte

Otišli ste da radite u kompaniji, dolazili su vam menadžeri i tražili da pronađete kome su poslana pisma iz Afrike. Moramo da napravimo top 21 adresu primaoca na osnovu njih. Prva slova adresa primaoca su ključna. Jedna stvar: mail server preko kojeg su poslana pisma se ne učitava. Svi očekuju brzo rješavanje problema!

2.3. Rješenje

1. Server se ne pokreće zbog nepostojeće swap particije u fstab-u; prilikom učitavanja, sistem pokušava da ga montira i ruši. Kako pokrenuti?

Preuzmi sliku, preuzeli smo CentOS 7, pokreni se sa Live CD/DVD-a (Rješavanje problema -> Rescue), montiraj sistem, uredi /etc/fstab. Odmah nalazimo prvi ključ - GottfriedWilhelm11646Leibniz!

Kreiraj zamjenu:

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

2. Kao i uvek, nema lozinke, potrebno je da promenite root lozinku na virtuelnoj mašini. To smo već uradili u prvom zadatku. Mijenjamo se i uspješno se prijavljujemo na server, ali on odmah ide u restart. Server je preopterećen takvom brzinom da nemate vremena ni da pažljivo pregledate sve zapise. Kako razumjeti šta se dešava?

Ponovo dižemo sa livecd-a, pažljivo proučavamo sistemske logove i, za svaki slučaj, gledamo u cron, pošto je takva periodičnost. Tu nalazimo problem i drugi ključ - Alan1912MathisonTuring!

Treba u /etc/crontab izbrišite ili komentarišite liniju echo b > /proc/sysrq-trigger.

3. Nakon toga se server učitao i možete završiti zadatak menadžera: "Koje su adrese u Africi?" Ove informacije su općenito dostupne javnosti. Ove informacije možete pronaći na Internetu koristeći izraze “ip adresa afrička”, “geoip baza podataka”. Da biste riješili problem, možete koristiti slobodno dostupne baze podataka za distribuciju adresa (geoip). Koristili smo bazu podataka kao standard MaxMind GeoLite2, dostupno pod licencom Creative Commons Attribution-Dijeli pod istim uvjetima 4.0.

Pokušajmo riješiti naš problem koristeći samo Linux sistemske uslužne programe, ali općenito se može riješiti na veliki broj načina: korištenjem uslužnih programa za filtriranje teksta i korištenjem skripti na različitim programskim jezicima.

Za početak, jednostavno ćemo dobiti parove "pošiljalac-primalac" iz dnevnika pošte /var/log/maillog (napravimo tabelu primalaca e-pošte - IP pošiljaoca). Ovo se može uraditi sljedećom komandom:

$ 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 sa sastavljanjem baze podataka afričkih adresa, pogledajmo glavne IP adrese pošiljatelja.

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

Među svima njima, prva tri primaoca sa vrha jasno se ističu po broju pisama. Ako proučite IP adrese pošiljalaca koji su poslali na adrese iz ove top 3, primijetit ćete jasnu prevlast određenih mreža:

$ 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

Većina mreža 105/8, 41/8, 196/8,197/8 dodijeljena je AFRINIC-u - jednom od pet regionalnih Internet registratora koji distribuiraju Internet resurse. AFRINIC distribuira adresni prostor širom 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 problem je, u stvari, 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 [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]

U ovoj fazi dobijamo string “LinuxBenedictTorvadst”.

Ispravan ključ: "LinusBenedictTorvalds".

Rezultirajući niz sadrži grešku u kucanju u odnosu na tačan ključ u posljednja 3 znaka. To je zbog činjenice da mreže koje smo odabrali nisu u potpunosti posvećene afričkim zemljama i načinu na koji se emailovi distribuiraju po IP adresama u našem dnevniku.

Uz dovoljnu specifikaciju najvećih mreža dodijeljenih afričkim zemljama, može se dobiti precizan 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 [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 se može riješiti i na drugi način.
Preuzmite MaxMind, raspakirajte ga i sljedeće tri naredbe također rješavaju naš 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

Na ovaj ili onaj način, na kraju smo izračunali statistiku, a menadžeri su dobili podatke koji su im bili potrebni za rad!

3. Treća faza

Treća faza je donekle slična prvoj - također morate popraviti servis tople lampe, ali sve je složenije nego u prvom zadatku.

3.1. Zanimljivosti

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

3.2. Vježbajte

Išli ste da radite za kompaniju u kojoj su svi dokumenti kompanije pohranjeni na internom Wiki serveru. Prošle godine, inženjer je naručio 3 nova diska za server pored jednog postojećeg, tvrdeći da je potrebno da diskovi budu postavljeni u neku vrstu nizova da bi sistem bio otporan na greške. Nažalost, nekoliko sedmica nakon njihove instalacije, inženjer je otišao na odmor u Indiju i nije se vratio.

Server je radio bez kvarova nekoliko godina, ali je prije nekoliko dana hakovana mreža kompanije. Prema uputstvu, zaštitari su skinuli diskove sa servera i poslali vam ih. Tokom transporta, jedan disk je nepovratno izgubljen.

Moramo vratiti funkcionalnost Wiki-ja; prije svega nas zanima sadržaj wiki stranica. Određeni dio teksta koji se nalazio na jednoj od stranica ovog wikija je lozinka za 1C server i hitno je potreban za njegovo otključavanje.

Osim toga, negdje na wiki stranicama ili na drugom mjestu bile su lozinke za log server i server za video nadzor, koje bi također bilo poželjno oporaviti, bez njih je istraga incidenta nemoguća. Kao i uvijek, očekujemo brzo rješavanje problema!

3.3. Rješenje

1. Pokušavamo da dižemo jedan po jedan sa diskova koje imamo i svuda dobijamo istu poruku:

No bootable medium found! System halted 

Morate se pokrenuti sa nečega. Dizanje sa Live CD/DVD-a (Rješavanje problema -> Rescue) ponovo pomaže. Prilikom učitavanja pokušavamo pronaći particiju za pokretanje, ne možemo je pronaći, završavamo u ljusci. Pokušavamo proučiti šta i kako raditi s diskovima. Poznato je da ih ima tri. Za to postoji više alata u 7. verziji CentOS-a, gdje postoje komande blkid ili lsblk, koji nam pokazuju sve informacije o diskovima.

Kako i šta radimo:

$ ls /dev/sd*

To je odmah vidljivo

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

Montiramo sdb1, jasno je da je ovo particija za pokretanje CentOS-a 6.

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

Očigledno, idemo u odjeljak grub i tamo nalazimo prvi ključ - James191955Gosling u neobičnoj datoteci.

2. Proučavamo pvs i lvs, pošto radimo sa LVM-om. Vidimo da bi trebala biti 2 fizička volumena, jedan nije lociran i žali se na izgubljen uid. Vidimo da treba da postoje 2 logička volumena: root i swap, dok je root djelomično izgubljen (P atribut volumena). Nije moguće montirati, što je šteta! On nam je zaista potreban.

Postoje još 2 diska, gledamo ih, sastavljamo i montiramo:

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

Gledamo, vidimo da je ovo particija za pokretanje CentOS-a 6 i duplikat onoga što je već na /dev/sdb1, i ovdje opet isti ključ - DennisBMacAlistairCRitchie!
Da vidimo kako je sastavljeno /dev/md127.

$ mdadm --detail /dev/md127

Vidimo da je trebalo sklopiti od 4 diska, ali je sastavljen od dva /dev/sda1 и /dev/sdc1, trebali su biti brojevi 2 i 4 u sistemu. Pretpostavljamo da od /dev/sda2 и /dev/sdc2 Također možete prikupiti niz. Nije jasno zašto na njima nema metapodataka, ali ovo je na savjesti admina, koji je negdje u Goi. Pretpostavljamo da bi trebao postojati RAID10, iako postoje opcije. prikupljamo:

$ 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 prikupili fizički volumen koji nam je ranije nedostajao.

lvroot je odmah popravljen, montiramo ga, ali prvo aktiviramo VG:

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

I sve je tu, uključujući ključ u osnovnom početnom direktoriju - /root/sweet.

3. Još uvijek pokušavamo da oživimo naš server kako bi se normalno pokrenuo. Svi logički tomovi iz naše /dev/md0 (gde smo našli sve) prevucite je /dev/sdb2, gdje je cijeli server u početku radio.

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

Isključujemo server, uklanjamo diskove 1 i 3, ostavljamo drugi, dižemo sa Live CD/DVD-a u Rescue. Pronađite particiju za pokretanje i vratite bootloader u grub:

root (hd0,0)
setup (hd0)

Otkidamo disk za pokretanje i uspješno učitavamo, ali stranica ne radi.

4. Postoje dvije opcije za pokretanje web stranice: konfigurirajte Apache od nule ili koristite nginx sa php-fpm koji je već konfiguriran unaprijed:

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

Konačno, morate pokrenuti MySQL:

$ /etc/init.d/mysqld start

Neće početi, a odgovor je u tome /var/log/mysql. Čim riješite problem sa MySQL-om, stranica će raditi, na glavnoj stranici će biti ključ - RichardGCCMatthewGNUStallman! Sada imamo pristup 1C, a zaposleni će moći da primaju svoje plate. I kao i uvijek, pred vama je puno posla na uspostavljanju infrastrukture i sigurnosti u kompaniji.

Također možemo još jednom podijeliti listu knjiga koje su pomogle nama i našim učesnicima da se pripremimo za utakmicu: linux.mail.ru/books.

Hvala vam što ste sa nama! Pratite najave narednih utakmica!

izvor: www.habr.com

Dodajte komentar