Linux Quest. Čestitamo nagrajencem in nam povejte rešitve nalog

Linux Quest. Čestitamo nagrajencem in nam povejte rešitve nalog

25. marca smo odprli prijave za Linux Quest, to je igra za ljubitelje in strokovnjake operacijskega sistema Linux. Nekaj ​​statistike: za igro se je prijavilo 1117 ljudi, 317 jih je našlo vsaj en ključ, 241 jih je uspešno opravilo nalogo prve stopnje, 123 - druge in 70 jih je opravilo tretjo stopnjo. 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 iz Moskve. Star je 37 let. Dela kot inženir za Linux/Unix pri Jet Infosystems. V službi moram skrbeti in odpravljati težave s sistemi Linux/Unix + SAN. Zanimanja so različna: Linux sistemi, programiranje, obratni inženiring, informacijska varnost, Arduino. O igri Roman je povedal, da mu je igra na splošno všeč. »Malo sem si pretegnila možgane in si oddahnila od sivega vsakdana službenega vsakdana. 🙂 Želel bi imeti več nalog, sicer pa je bilo igre že konec, še preden sem jo imel čas okusiti.”
  • 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 korensko geslo navideznega računalnika, da boste lahko dostopali do njega. Ob zagonu opazimo, da je to strežnik Ubuntu 16.04.

Za ponastavitev korenskega gesla znova zaženemo stroj, pri nalaganju, v trenutku, ko je prikazan meni grub, pojdite na urejanje elementa Ubuntu z gumbom "e". Uredite vrstico linux, dodajte jo 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
$ passwd

Ne 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.conf

Tudi 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 apache2

3. Poskusite znova, dobimo napako:

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

Baza 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 dokumentacijo. 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 562

Urejamo 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?

Prenesite sliko, prenesli smo CentOS 7, zaženite z Live CD/DVD (Odpravljanje težav -> Reševanje), namestite sistem, uredite /etc/fstab. Takoj najdemo prvi ključ - GottfriedWilhelm11646Leibniz!

Ustvari zamenjavo:

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

2. 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 MaxMind GeoLite2, ki je na voljo pod licenco Creative Commons Attribution-ShareAlike 4.0.

Poskusimo rešiti našo težavo samo s sistemskimi pripomočki Linux, na splošno pa jo je mogoče rešiti na veliko načinov: z uporabo pripomočkov za filtriranje besedila in s skripti 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.txt

In 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 [email protected]
4165 [email protected]
3739 [email protected]
3405 [email protected]
3346 [email protected]

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 '[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 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 [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]

Na tej stopnji dobimo niz "LinuxBenedictTorvadst".

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 [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 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 

Zagnati se morate iz nečesa. Zagon z Live CD/DVD (Troubleshooting -> Rescue) spet pomaga. Pri nalaganju poskušamo najti zagonsko particijo, vendar je ne najdemo in končamo v lupini. Poskušamo preučiti, kaj in kako narediti z diski. Znano je, da so trije. V 7. različici CentOS-a je več orodij za to, kjer so ukazi 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 - про них ничего не известно на текущий момент

Namestimo sdb1, jasno je, da je to zagonska particija CentOS 6.

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

Oč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 

Pogledamo in vidimo, da je to zagonska particija CentOS 6 in dvojnik tistega, 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/md0

Izklopimo 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: linux.mail.ru/knjige.

Hvala, ker ste z nami! Spremljajte napovedi naslednjih iger!

Vir: www.habr.com

Dodaj komentar