Linux Quest. Čestitamo pobjednicima i javite nam rješenja zadataka

Linux Quest. Čestitamo pobjednicima i javite nam rješenja zadataka

25. ožujka otvorili smo prijave za Linux Quest, ovo je igra za ljubitelje i stručnjake za operativni sustav Linux. Malo statistike: 1117 ljudi se registriralo za igru, njih 317 je pronašlo barem jedan ključ, 241 je uspješno riješio zadatak prve faze, 123 je završilo drugu fazu i 70 je prošlo treću fazu. Danas je naša igra završila i čestitamo našim pobjednicima!

  • Alexander Teldekov osvojio je prvo mjesto.
    Aleksandar je za sebe rekao da je najtipičniji sistem administrator. Živi u Volgogradu, već dvadesetak godina administrira razne Unix-like sustave. Uspio sam raditi u internet provajderima, banci i sistemskom integratoru. Sada radi na daljinu u maloj tvrtki, radi na cloud infrastrukturi za velikog inozemnog kupca. Voli čitati i slušati glazbu. O Igri, Alexander je rekao da mu se igra u cjelini svidjela, voli takve zadatke. Tijekom intervjua u jednoj od tvrtki napravio sam nešto slično Hackerranku, bilo je zanimljivo.
  • Drugo mjesto - Roman Suslov.
    Roman iz Moskve. Ima 37 godina. Radi kao Linux/Unix inženjer u Jet Infosystems. Na poslu moram administrirati i rješavati probleme Linux/Unix sustava + SAN. Interesi su različiti: Linux sustavi, programiranje, obrnuti inženjering, informacijska sigurnost, Arduino. O igri Roman je primijetio da mu se igra općenito svidjela. “Malo sam protegnuo mozak i odmorio se od sive svakodnevice radne svakodnevice. 🙂 Želio bih imati više zadataka, inače prije nego što sam stigao osjetiti okus, igra je već bila gotova.”
  • Treći - alex3d.
    Alex živi u Moskvi i radi u razvoju softvera. “Hvala vam na natjecanju, bilo je zanimljivo testirati moje google-fu vještine.”

Također u poretku 10 najboljih igrača:

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

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

1. Prva faza

Nazvali smo ga “Jeste li stvarno admin?”, budući da je zadatak bio vrlo jednostavan - popraviti servis tople lampe.

1.1. Zanimljivosti:

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

1.2. Vježbajte

Otišli ste raditi u tvrtku u kojoj dugo nije bilo kompetentnog stručnjaka za informatiku. Prije nego krenete s dovođenjem u red, morate riješiti gorući problem koji koči rad ureda.

Čistačica je krpom uhvatila strujni kabel ormarića za servere. Struja je ponovno uspostavljena, ali vrlo važna web stranica još uvijek ne radi. Web stranica je važna jer tvrtka nije previše zabrinuta za informacijsku sigurnost, a na glavnoj stranici ove stranice u čistom tekstu možete pronaći administratorsku lozinku za računalo direktora.

Neki dan je promijenjena lozinka, ali svi su zaboravili novu, direktor ne može raditi. Postoje glasine da je na ovom stroju bilo više ključeva koji bi nam mogli pomoći dešifrirati sigurnosnu kopiju računovodstvenih dokumenata.

Svi očekuju brzo rješenje problema!

1.3. Rješenje

1. Prije svega, trebate promijeniti root lozinku na virtualnom računalu kako biste mu pristupili. Prilikom pokretanja primjećujemo da je ovo Ubuntu 16.04 poslužitelj.

Za resetiranje root lozinke, ponovno pokrećemo stroj, prilikom učitavanja, u trenutku kada se prikaže grub izbornik, idite na uređivanje Ubuntu stavke pomoću gumba "e". Uredite liniju linux, dodajte je na kraj init=/bin/bash. Učitavamo preko Ctrl+x, dobivamo bash. Ponovno montirajte root s rw, promijenite lozinku:

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

Ne zaboravite na sinkronizaciju, ponovno pokrenite.

2. Uvjet kaže da naš web poslužitelj ne radi, pogledajte:

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

To jest, zapravo, Apache radi, ali odgovara kodom 404. Pogledajmo konfiguraciju:

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

I ovdje postoji ključ - StevenPaulSteveJobs.

Provjera staze /usr/share/WordPress - ne postoji, ali postoji /usr/share/wordpress. Uredite konfiguraciju i ponovno pokrenite Apache.

$ systemctl restart apache2

3. Pokušajte ponovno, dobivamo pogreš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)

Što je bilo? Moramo to shvatiti. Da biste to učinili, morate dobiti pristup MySQL-u, kao što je opisano u dokumentacija. Jedna od točaka dokumentacije preporučuje da registriramo opciju skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf. Ovdje također postoji ključ - AugustaAdaKingByron.

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

4. Nakon ovih koraka, web poslužitelj 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 datoteku.

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

Osvježavamo stranicu, odlazimo na stranicu i pronalazimo ključ - BjarneStroustrup! Našli smo sva tri ključa, naš direktor može raditi, dešifrirali smo računovodstvene datoteke. Svi su zadovoljni, a pred vama je puno posla oko postavljanja infrastrukture, backupa i sigurnosti u tvrtki.

2. Druga faza

Trebalo je riješiti problem prikupljanja analitike. Svi vole analitiku – tko je koristi, gdje i u kojim količinama. Smislili smo slučaj s kojim se svi inženjeri mogu susresti na ovaj ili onaj način u životu.

2.1. Zanimljivosti

Jedan od naših igrača upisao je točan ključ u prvih 10 minuta igre, au prvih sat vremena imali smo voditelja koji je izvršio zadatak.

2.2. Vježbajte

Otišli ste raditi u tvrtku, došli su vam menadžeri i zamolili vas da pronađete kome se šalju pisma iz Afrike. Na temelju njih moramo izgraditi 21 najbolju adresu primatelja. Prva slova adresa primatelja su ključna. Jedna stvar: poslužitelj pošte preko kojeg su poslana pisma se ne učitava. Svi očekuju brzo rješenje problema!

2.3. Rješenje

1. Poslužitelj se ne diže zbog nepostojeće swap particije u fstabu, prilikom učitavanja sustav ga pokušava montirati i ruši se. Kako pokrenuti?

Preuzmite sliku, preuzeli smo CentOS 7, dignite se s Live CD/DVD (Rješavanje problema -> Spašavanje), montirajte sustav, uredite /etc/fstab. Odmah nalazimo prvi ključ - GottfriedWilhelm11646Leibniz!

Kreiraj zamjenu:

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

2. Kao i uvijek, nema lozinke, trebate promijeniti root lozinku na virtualnom računalu. To smo već radili u prvom zadatku. Promijenimo i uspješno se prijavimo na server, ali on odmah ide u ponovno pokretanje. Poslužitelj je preopterećen takvom brzinom da nemate vremena niti pažljivo pregledati sve zapise. Kako razumjeti što se događa?

Opet se dižemo s livecd-a, pažljivo proučavamo zapisnike sustava i, za svaki slučaj, gledamo u cron, jer takva periodičnost. Tu nalazimo problem i drugi ključ - Alan1912MathisonTuring!

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

3. Nakon čega se poslužitelj učitao i možete dovršiti zadatak upravitelja: "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 afrika", "geoip baza podataka". Da biste riješili problem, možete koristiti besplatno dostupne baze podataka za distribuciju adresa (geoip). Koristili smo bazu podataka kao standard MaxMind GeoLite2, dostupno pod licencom Creative Commons Attribution-ShareAlike 4.0.

Pokušajmo riješiti naš problem koristeći samo pomoćne programe sustava Linux, 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 u različitim programskim jezicima.

Za početak, jednostavno ćemo dobiti parove "IP adresa pošiljatelja i primatelja" iz dnevnika pošte /var/log/maillog (izgradimo tablicu primatelja e-pošte - IP pošiljatelja). To se može učiniti sljedećom 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 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 primatelja s vrha jasno se izdvajaju po broju pisama. Ako grepate IP adrese pošiljatelja koji su slali 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 internetskih registara koji distribuiraju internetske resurse. AFRINIC distribuira adresni prostor diljem 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, zapravo, 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 dobivamo niz "LinuxBenedictTorvadst".

Ispravan ključ: "LinusBenedictTorvalds".

Rezultirajući niz sadrži tipfeler u odnosu na točan ključ u zadnja 3 znaka. To je zbog činjenice da mreže koje smo odabrali nisu u potpunosti posvećene afričkim zemljama i zbog načina na koji se e-pošta distribuira prema IP adresama u našem dnevniku.

Uz dostatnu 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.
Skinite 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 svjetiljke, ali sve je kompliciranije 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 faze naš pobjednik je izvršio zadatak.

3.2. Vježbajte

Otišli ste raditi za tvrtku u kojoj su svi dokumenti tvrtke pohranjeni na internom Wiki poslužitelju. Prošle je godine jedan inženjer naručio 3 nova diska za poslužitelj uz jedan postojeći, tvrdeći da je za sustav tolerantan na pogreške diskove potrebno smjestiti u neku vrstu polja. Nažalost, nekoliko tjedana nakon njihove instalacije, inženjer je otišao na odmor u Indiju i nije se vratio.

Poslužitelj je radio bez kvarova nekoliko godina, ali prije nekoliko dana mreža tvrtke je hakirana. Sukladno uputama, zaštitari su uklonili diskove sa servera i poslali Vam ih. Tijekom transporta jedan disk je nepovratno izgubljen.

Moramo vratiti funkcionalnost Wikija, prije svega nas zanima sadržaj wiki stranica. Određeni dio teksta koji je bio na jednoj od stranica ovog wikija je lozinka za 1C poslužitelj i hitno je potreban za njegovo otključavanje.

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

3.3. Rješenje

1. Pokušavamo se dignuti jedan po jedan s diskova koje imamo i posvuda dobivamo istu poruku:

No bootable medium found! System halted 

Morate se dignuti s nečega. Dizanje s Live CD/DVD-a (Rješavanje problema -> Spašavanje) ponovno pomaže. Prilikom učitavanja pokušavamo pronaći boot particiju, ne možemo je pronaći, završimo u ljusci. Pokušavamo proučiti što i kako s diskovima. Poznato je da ih je troje. Postoji više alata za to u 7. verziji CentOS-a, gdje postoje naredbe blkid ili lsblk, koji nam pokazuju sve podatke o diskovima.

Kako i što radimo:

$ ls /dev/sd*

Odmah se vidi da

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

Montiramo sdb1, jasno je da je ovo boot particija CentOS 6.

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

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

2. Proučavamo pvs i lvs, budući da radimo s LVM. Vidimo da bi trebala postojati 2 fizička volumena, jedan nije lociran i žali se na izgubljeni uid. Vidimo da bi trebala postojati 2 logička volumena: root i swap, dok je root djelomično izgubljen (P atribut volumena). Nije moguće montirati, što je šteta! Stvarno nam treba.

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 

Pogledamo, 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!
Pogledajmo kako se sastavlja /dev/md127.

$ mdadm --detail /dev/md127

Vidimo da je trebao biti sastavljen od 4 diska, ali je sastavljen od dva /dev/sda1 и /dev/sdc1, trebali su biti brojevi 2 i 4 u sustavu. Pretpostavljamo da iz /dev/sda2 и /dev/sdc2 Također možete sakupiti niz. Nije jasno zašto na njima nema metapodataka, ali to je na savjesti admina, koji je negdje u Goi. Pretpostavljamo da bi trebao postojati RAID10, iako ima opcija. Sakupljamo:

$ 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 prije 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 oživjeti naš server kako bi se normalno pokrenuo. Svi logični svesci iz našeg /dev/md0 (gdje smo sve pronašli) drag it to /dev/sdb2, gdje je u početku radio cijeli server.

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

Isključujemo poslužitelj, uklanjamo diskove 1 i 3, ostavljamo drugi, dižemo se s Live CD/DVD-a u Rescue. Pronađite boot particiju 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 s php-fpm već konfiguriranim unaprijed:

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

Na kraju morate pokrenuti MySQL:

$ /etc/init.d/mysqld start

Neće se pokrenuti, a odgovor je u tome /var/log/mysql. Čim riješite problem s MySQL-om, stranica će raditi, na glavnoj stranici će biti ključ - RichardGCCMatthewGNUStallman! Sada imamo pristup 1C, a zaposlenici će moći primati svoje plaće. I kao i uvijek, pred vama je puno posla oko uspostavljanja infrastrukture i sigurnosti u tvrtki.

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

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

Izvor: www.habr.com

Dodajte komentar