
25. marca smo odprli prijave za , to je igra za ljubitelje in poznavalce operacijskega sistema LinuxNekaj statistike: v igro se je prijavilo 1117 ljudi, od katerih jih je 317 našlo vsaj en ključ, 241 jih je uspešno zaključilo prvo fazo, 123 drugo in 70 tretjo. Danes se je naša igra končala in čestitamo našim zmagovalcem!
- Alexander Teldekov je zasedel prvo mesto.
Aleksander je zase rekel, da je najbolj tipičen sistemski administrator. Živi v Volgogradu, že približno dvajset let upravlja različne sisteme, podobne Unixu. Uspelo mi je delati pri internetnih ponudnikih, banki in sistemskem integratorju. Zdaj dela na daljavo v majhnem podjetju, kjer dela na infrastrukturi v oblaku za velikega tujega naročnika. Rad bere in posluša glasbo. O igri je Aleksander povedal, da mu je igra kot celota všeč, obožuje takšne naloge. Med intervjujem v enem od podjetij sem naredil nekaj podobnega kot Hackerrank, bilo je zanimivo. - Drugo mesto - Roman Suslov.
Roman je iz Moskve. Star je 37 let. Dela. Linux/Unix inženir pri Infosystems Jet. Moje delo vključuje administracijo in odpravljanje težav. LinuxUnix sistemi + SAN. Interesi so raznoliki: LinuxSistemi, programiranje, obratni inženiring, informacijska varnost, Arduino. Roman je povedal, da mu je igra na splošno všeč. »Spravil sem si misli v ritem in si oddahnil od vsakodnevnega dela. 🙂 Želel bi si več izzivov, saj je bila igra že končana, preden sem se lahko poglobil v dogajanje.« - Tretji - alex3d.
Alex živi v Moskvi in se ukvarja z razvojem programske opreme. "Hvala za tekmovanje, zanimivo je bilo preizkusiti moje znanje google-fu."
Tudi na lestvici 10 najboljših igralcev:
- Jevgenij Saldajev
- Markel Mohnačevski
- Konstantin Konosov
- Pavel Sergejev
- Vladimir Bovaev
- Ivan Bubnov
- Pavlo Klets
Zavedamo se, da obstaja veliko možnosti za rešitev vseh naših težav; nekatere možne rešitve so opisane spodaj.
1. Prva faza
Poimenovali smo jo “Ste res admin?”, saj je bila naloga precej preprosta - popraviti servis tople svetilke.
1.1. Zanimiva dejstva:
Prvi ključ sta dva igralca našla v prvih 15 minutah igre, v prvi uri pa smo imeli tri vodje, ki so opravili nalogo.
1.2. telovadba
Zaposlili ste se v podjetju, kjer dolgo ni bilo kompetentnega strokovnjaka za informatiko. Preden začnete urejati stvari, morate rešiti pereč problem, ki ovira delo pisarne.
Čistilka je z krpo ujela napajalni kabel strežniške omare. Napajanje je bilo ponovno vzpostavljeno, vendar zelo pomembno spletno mesto še vedno ne deluje. Spletna stran je pomembna, ker se podjetje ne ukvarja preveč z informacijsko varnostjo, na njeni glavni strani pa lahko v čistem besedilu najdete skrbniško geslo za računalnik direktorja.
Pred dnevi je bilo geslo spremenjeno, a so vsi pozabili novo, direktor ne more delati. Obstajajo govorice, da je bilo na tem stroju več ključev, ki bi nam lahko pomagali dešifrirati varnostno kopijo računovodskih dokumentov.
Vsi pričakujejo hitro rešitev problema!
1.3. Rešitev
1. Najprej morate spremeniti geslo uporabnika root na virtualnem računalniku, da dobite dostop do njega. Ko ga zaženete, boste opazili, da Ubuntu 16.04 strežnik.
Za ponastavitev gesla root znova zaženite računalnik. Ko se ob zagonu prikaže meni grub, pojdite na urejanje elementa. Ubuntu Pritisnite gumb "e". Uredite vrstico "linux" in jo dodajte na konec. init=/bin/bash. Naložimo preko Ctrl+x, dobimo bash. Ponovno namestite root z rw, spremenite geslo:
$ mount -o remount,rw /dev/mapper/ubuntu--vg-root
$ passwdNe pozabite na sinhronizacijo, znova zaženite.
2. Pogoj pravi, da naš spletni strežnik ne deluje, poglejte:
$ curl localhost
Not Found
The requested URL / was not found on this server.
Apache/2.4.18 To pomeni, da Apache dejansko deluje, vendar se odzove s kodo 404. Poglejmo konfiguracijo:
$ vim /etc/apache2/sites-enabled/000-default.confTudi tukaj je ključ - StevenPaulSteveJobs.
Preverjanje poti /usr/share/WordPress - tega ni, ampak obstaja /usr/share/wordpress. Uredite konfiguracijo in znova zaženite Apache.
$ systemctl restart apache23. Poskusite znova, dobimo napako:
Warning: mysqli_real_connect(): (HY000/2002): Connection refused in /usr/share/wordpress/wp-includes/wp-db.php on line 1488Baza podatkov se ne izvaja?
$ systemctl status mysql
Active: active (running) Kaj je narobe? Moramo ugotoviti. Če želite to narediti, morate pridobiti dostop do MySQL, kot je opisano v . Ena od točk dokumentacije priporoča, da registriramo možnost skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf. Tu je tudi ključ - AugustaAdaKingByron.
Popravek uporabniških pravic 'wp'@'localhost'. Zaženemo MySQL, omogočimo dostop do njega prek omrežja in komentiramo možnost v konfiguraciji skip-networking.
4. Po teh korakih se spletni strežnik zažene, vendar spletno mesto še vedno ne deluje, ker
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 562Urejamo pravice do datoteke.
$ chmod 644 /usr/share/wordpress/wp-content/themes/twentysixteen/footer.php
Osvežimo stran, gremo na spletno mesto in najdemo ključ - BjarneStroustrup! Našli smo vse tri ključe, naš direktor lahko dela, dešifrirali smo računovodske datoteke. Vsi so zadovoljni, vas pa čaka veliko dela za vzpostavitev infrastrukture, varnostnih kopij in varnosti v podjetju.
2. Druga stopnja
Treba je bilo rešiti problem zbiranja analitike. Vsi imajo radi analitiko – kdo jo uporablja, kje in v kakšnih količinah. Prišli smo do primera, s katerim se lahko v življenju tako ali drugače srečajo vsi inženirji.
2.1. Zanimiva dejstva
Eden od naših igralcev je v prvih 10 minutah igre vnesel pravilen ključ, v prvi uri pa smo imeli vodjo, ki je opravil nalogo.
2.2. telovadba
Odšli ste v službo v podjetje, k vam so prišli menedžerji in vas prosili, da ugotovite, komu so bila poslana pisma iz Afrike. Na podlagi njih moramo zgraditi 21 najboljših naslovov prejemnikov. Ključne so prve črke naslovov prejemnikov. Ena stvar: poštni strežnik, prek katerega so bila pisma poslana, se ne naloži. Vsi pričakujejo hitro rešitev problema!
2.3. Rešitev
1. Strežnik se ne zažene zaradi neobstoječe izmenjalne particije v fstabu, pri nalaganju jo sistem poskuša priklopiti in se zruši. Kako zagnati?
Ko smo prenesli sliko, smo jo prenesli CentOS 7, zagon z Live CD/DVD (Odpravljanje težav -> Reševanje), priklop sistema, urejanje /etc/fstab. Takoj najdemo prvi ključ - GottfriedWilhelm11646Leibniz!
Ustvari zamenjavo:
$ lvcreate -n swap centos -L 256M
$ sync && reboot2. Kot vedno ni gesla, spremeniti morate korensko geslo na virtualnem računalniku. To smo naredili že pri prvi nalogi. Spremenimo in se uspešno prijavimo na strežnik, vendar gre takoj v ponovni zagon. Strežnik je preobremenjen s tako hitrostjo, da sploh nimate časa natančno pregledati vseh dnevnikov. Kako razumeti, kaj se dogaja?
Spet se zaženemo iz livecd-ja, natančno preučimo sistemske dnevnike in za vsak slučaj pogledamo v cron, saj je takšna periodičnost. Tam najdemo problem in drugi ključ - Alan1912MathisonTuring!
Potreben v /etc/crontab izbrišite ali komentirajte vrstico echo b > /proc/sysrq-trigger.
3. Po tem se je strežnik naložil in lahko dokončate nalogo upraviteljev: "Kakšni so naslovi v Afriki?" Te informacije so na splošno dostopne javnosti. Te informacije lahko najdete na internetu z besednimi zvezami "ip naslov afrika", "geoip baza podatkov". Za rešitev težave lahko uporabite prosto dostopne baze podatkov za distribucijo naslovov (geoip). Bazo podatkov smo uporabili kot standard , ki je na voljo pod licenco Creative Commons Attribution-ShareAlike 4.0.
Poskusimo rešiti naš problem samo s sistemskimi pripomočki. Linux, vendar ga je na splošno mogoče rešiti na ogromno načinov: s pomočjo pripomočkov za filtriranje besedila in s pomočjo skript v različnih programskih jezikih.
Za začetek bomo preprosto dobili pare "IP pošiljatelja-prejemnika" iz poštnega dnevnika /var/log/maillog (sestavimo tabelo prejemnikov elektronske pošte – IP pošiljatelja). To lahko storite z naslednjim ukazom:
$ 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.txtIn preden nadaljujemo s sestavljanjem baze podatkov o afriških naslovih, si poglejmo glavne naslove IP 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 po številu pisem izrazito izstopajo prvi trije prejemniki z vrha. Če grep naslove IP pošiljateljev, ki so pošiljali na naslove iz teh prvih 3, boste opazili očitno prevlado določenih 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 165Večina omrežij 105/8, 41/8, 196/8,197/8 je dodeljenih AFRINIC-u - enemu od petih regionalnih internetnih registrarjev, ki distribuirajo internetne vire. AFRINIC distribuira naslovni prostor po vsej Afriki. In 41/8 se v celoti nanaša na AFRINIC.
https://www.nic.ru/whois/?searchWord=105.0.0.0
https://www.nic.ru/whois/?searchWord=41.0.0.0
Tako je odgovor na problem pravzaprav v dnevniku samem.
$ 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.ruNa tej stopnji dobimo vrstico "LinuxBenedikt Torvadst«.
Pravilni ključ: "LinusBenedictTorvalds".
Nastali niz vsebuje tipkarsko napako v zvezi s pravilnim ključem v zadnjih 3 znakih. To je posledica dejstva, da omrežja, ki smo jih izbrali, niso v celoti namenjena afriškim državam, in načina, kako se e-poštna sporočila distribuirajo po naslovih IP v našem dnevniku.
Z zadostno specifikacijo največjih omrežij, dodeljenih afriškim državam, je mogoče dobiti 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 Problem je mogoče rešiti tudi drugače.
Prenesite MaxMind, ga razpakirajte in naslednji trije ukazi prav tako rešijo 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
Tako ali drugače smo na koncu izračunali statistiko, menedžerji pa dobili podatke, ki so jih potrebovali za delo!
3. Tretja stopnja
Tretja stopnja je nekoliko podobna prvi - popraviti morate tudi servis tople svetilke, vendar je vse bolj zapleteno kot pri prvi nalogi.
3.1. Zanimiva dejstva
V prvih 15 minutah so trije igralci našli prvi ključ, 2 uri in 20 minut po začetku etape je naš zmagovalec nalogo opravil.
3.2. telovadba
Zaposlili ste se v podjetju, kjer so vsi dokumenti podjetja shranjeni na internem strežniku Wiki. Lansko leto je inženir naročil 3 nove diske za strežnik poleg enega obstoječega, pri čemer je trdil, da morajo biti diski postavljeni v nekakšna polja, da bo sistem odporen na napake. Na žalost je inženir nekaj tednov po njihovi namestitvi odšel na počitnice v Indijo in se ni vrnil.
Strežnik je nekaj let deloval brez napak, pred nekaj dnevi pa je prišlo do vdora v omrežje podjetja. Varnostno osebje je diske po navodilih odstranilo s strežnika in vam jih poslalo. Med transportom je bil en disk nepovratno izgubljen.
Povrniti moramo funkcionalnost Wikija, najprej nas zanima vsebina wiki strani. Določen del besedila, ki je bil na eni od strani tega wikija, je geslo za strežnik 1C in je nujno potreben za njegovo odklepanje.
Poleg tega sta bila nekje na wiki straneh ali drugje gesli za strežnik dnevnika in strežnik za videonadzor, ki bi ju prav tako bilo zaželeno obnoviti, brez njiju je preiskava incidenta nemogoča. Kot vedno pričakujemo hitro rešitev problema!
3.3. Rešitev
1. Poskušamo se zagnati enega za drugim z diskov, ki jih imamo in povsod prejmemo isto sporočilo:
No bootable medium found! System halted
Moram se zagnati z nečesa. Spet pomaga zagon z Live CD/DVD (Odpravljanje težav -> Reševanje). Pri zagonu poskušam najti zagonsko particijo, vendar ne deluje in končam v lupini. Poskušam ugotoviti, kaj se dogaja z diski. Vem, da so trije. V različici 7 je za to več orodij. CentOS, kjer so ekipe blkid ali lsblk, ki nam prikažejo vse podatke o diskih.
Kako in kaj delamo:
$ ls /dev/sd*Takoj je očitno, da
/dev/sdb1 - ext4
/dev/sdb2 - часть lvm
/dev/sda1 и /dev/sdc1 - части рейда
/dev/sda2 и /dev/sdc2 - про них ничего не известно на текущий моментPriklopimo sdb1, jasno je, da je to zagonska particija. CentOS 6.
$ mkdir /mnt/sdb1 && mount /dev/sdb1 /mnt/sdb1Očitno gremo v razdelek grub in tam najdemo prvi ključ - James191955Gosling v nenavadni datoteki.
2. Preučujemo pvs in lvs, saj delamo z LVM. Vidimo, da bi morala obstajati 2 fizična nosilca, eden ni lociran in se pritožuje zaradi izgubljenega uid-a. Vidimo, da bi morala obstajati 2 logična nosilca: root in swap, medtem ko je root delno izgubljen (atribut P nosilca). Montaža ni mogoča, kar je škoda! Res ga potrebujemo.
Obstajata še 2 diska, pogledamo jih, sestavimo in montiramo:
$ mdadm --examine --verbose --scan
$ mdadm --assemble --verbose --scan
$ mkdir /mnt/md127 && mount /dev/md127 /mnt/md127 Poglejmo, jasno je, da je to zagonska particija. CentOS 6 in dvojnik tega, kar je že na /dev/sdb1, in tukaj spet isti ključ - DennisBMacAlistairCRitchie!
Poglejmo, kako je sestavljen /dev/md127.
$ mdadm --detail /dev/md127
Vidimo, da bi moral biti sestavljen iz 4 diskov, vendar je bil sestavljen iz dveh /dev/sda1 и /dev/sdc1, morali bi biti številki 2 in 4 v sistemu. Predvidevamo, da iz /dev/sda2 и /dev/sdc2 Zberete lahko tudi niz. Ni jasno, zakaj na njih ni metapodatkov, vendar je to na vesti admina, ki je nekje v Goi. Predvidevamo, da bi moral biti RAID10, čeprav obstajajo možnosti. Zbiramo:
$ mdadm --create --verbose /dev/md0 --assume-clean --level=10 --raid-devices=4 missing /dev/sda2 missing /dev/sdc2
Gledamo blkid, pvs, lvs. Ugotovimo, da smo zbrali fizično količino, ki nam je prej manjkala.
lvroot je bil takoj popravljen, priklopimo ga, vendar najprej aktiviramo VG:
$ vgchange -a y
$ mkdir /mnt/lvroot && mount /dev/mapper/vg_c6m1-lv_root /mnt/lvroot
In vse je tam, vključno s ključem v korenskem domačem imeniku - /root/sweet.
3. Še vedno poskušamo oživiti naš strežnik, da bi se normalno zagnal. Vsi logični zvezki iz našega /dev/md0 (kjer smo našli vse) povlecite /dev/sdb2, kjer je sprva deloval celoten strežnik.
$ pvmove /dev/md0 /dev/sdb2
$ vgreduce vg_c6m1 /dev/md0Izklopimo strežnik, odstranimo diska 1 in 3, pustimo drugega, zaženemo se z Live CD/DVD v Rescue. Poiščite zagonsko particijo in obnovite zagonski nalagalnik v grub:
root (hd0,0)
setup (hd0)
Odtrgamo zagonsko disketo in se uspešno naložimo, vendar stran ne deluje.
4. Obstajata dve možnosti za zagon spletnega mesta: konfigurirajte Apache iz nič ali uporabite nginx z že vnaprej konfiguriranim php-fpm:
$ /etc/init.d/nginx start
$ /etc/init.d/php-fpm start
Končno morate zagnati MySQL:
$ /etc/init.d/mysqld start Ne zažene, odgovor pa se skriva v /var/log/mysql. Takoj ko rešite težavo z MySQL, bo spletno mesto delovalo, na glavni strani bo ključ - RichardGCCMatthewGNUStallman! Zdaj imamo dostop do 1C in zaposleni bodo lahko prejeli svoje plače. In kot vedno, vas čaka veliko dela za vzpostavitev infrastrukture in varnosti v podjetju.
Ponovno lahko delimo tudi seznam knjig, ki so nam in našim udeležencem pomagale pri pripravi na igro: .
Hvala, ker ste z nami! Spremljajte napovedi naslednjih iger!
Vir: www.habr.com
