
25. března jsme otevřeli registraci na , to je hra pro milovníky a znalce operačního systému Linux. Něco málo statistik: na hru se zaregistrovalo 1117 lidí, přičemž 317 našlo alespoň jeden klíč, 241 úspěšně zvládlo úkol prvního kola, 123 druhého a 70 prošlo třetím kolem. Dnes naše hra skončila a gratulujeme našim vítězům!
- První místo obsadil Alexander Telydekov.
Alexander o sobě říká, že je typický sysadmin. Žije ve Volgogradu a již dvacet let spravuje různé unixové systémy. Měl možnost pracovat u internetových poskytovatelů, v bance a u systémového integrátora. Nyní pracuje na dálku pro malou firmu a zabývá se cloudovou infrastrukturou pro velkého zahraničního zákazníka. Rád čte a poslouchá hudbu. O hře Alexander řekl, že mu celkově líbila, rád má takové úkoly. V jedné z firem při pohovoru řešil něco podobného jako Hackerrank, bylo to zajímavé. - Druhé místo - Roman Suslov.
Roman je z Moskvy. Je mu 37 let. Pracuje jako Linux/Unix inženýr ve společnosti „Infosystémy Jet“. V práci se věnuje správě a troubleshooting Linux/Unix systémů + SAN. Má různé zájmy: linuxové systémy, programování, reverzní inženýrství, informační bezpečnost, Arduino. O hře Roman poznamenal, že mu celkově líbila. „Trochu jsem si procvičil mozkové závity a odvrátil se od šedé každodenní reality. 🙂 Rád bych viděl více úkolů, protože když jsem se dostal do tematu, hra už skončila.“ - Třetí - alex3d.
Alex žije v Moskvě a zabývá se vývojem software. „Děkuji za soutěž, bylo zajímavé otestovat své dovednosti v google-fu.“
Také v žebříčku 10 nejlepších hráčů:
- Yevgeniy Saldayev
- Markel Mohnachevsky
- Konstantin Konosov
- Pavel Sergeev
- Vladimir Bovaev
- Ivan Bubnov
- Pavlo Klets
Chápeme, že existuje mnoho způsobů, jak řešit všechny naše úkoly, níže popisujeme některé z možných řešení.
1. První etapa
Nazvali jsme ji „Opravdu jsi admin?“, protože úkol byl poměrně jednoduchý - opravit teplý lampový servis.
1.1. Zajímavá fakta:
Dva hráči našli první klíč za prvních 15 minut hry a během první hodiny jsme měli tři lídry, kteří zvládli úkol.
1.2. Úkol
Nastoupil jsi do firmy, kde bylo dlouho bez kvalifikovaného specialisty na informační technologie. Než začneš pořádat věci, je třeba vyřešit naléhavý problém, který brání chodu kanceláře.
Údržbářka zavadila mopem o napájecí kabel serverového skříně. Napájení bylo obnoveno, ale velmi důležitá webová stránka přesto nefunguje. Webová stránka je důležitá, protože společnost se příliš nezabývá informační bezpečností, a lze tam na hlavní stránce najít otevřeně heslo správce počítače ředitele.
Nedávno bylo heslo změněno, ale nové všichni zapomněli, ředitel nemůže pracovat. Šíří se fámy, že v tomto stroji byly ještě klíče, které by nám mohly pomoci při dešifrování zálohy účetních dokumentů.
Všichni očekávají rychlé řešení problému!
1.3. Řešení
1. Nejdříve je třeba změnit heslo root na virtuálním stroji, abychom získali přístup. Při spuštění si všimneme, že se jedná o Ubuntu 16.04 Server.
Pro resetování hesla root restartujeme stroj, při startu, v momentu zobrazení menu grub, přejdeme na úpravu položky Ubuntu tlačítkem „e“. Upravit řádek linux, přidáváme na konec init=\/bin\/bash. Načítáme pomocí Ctrl+x, dostaneme bash. Přimontujeme kořen s rw, změníme heslo:
$ mount -o remount,rw \/dev\/mapper\/ubuntu--vg-root
$ passwdNezapomínáme na sync, restartujeme.
2. Ve vyhlášce se uvádí, že nám nefunguje webový server, podíváme se:
$ curl localhost
Not Found
The requested URL \/ was not found on this server.
Apache\/2.4.18 To znamená, že Apache je spuštěn, ale odpovídá kódem 404. Podíváme se na konfiguraci:
$ vim \/etc\/apache2\/sites-enabled\/000-default.confZde se nachází klíč — StevenPaulSteveJobs.
Zkontrolujeme cestu /usr/share/WordPress — taková neexistuje, ale existuje /usr/share/wordpress. Opravit konfiguraci a restartovat apache.
$ systemctl restart apache23. Zkusíme to znovu, dostaneme chybu:
Warning: mysqli_real_connect(): (HY000\/2002): Connection refused in \/usr\/share\/wordpress\/wp-includes\/wp-db.php on line 1488Databáze není spuštěna?
$ systemctl status mysql
Active: active (running) O co jde? Je nutné to prozkoumat. K tomu je třeba získat přístup do MySQL, jak to udělat, je popsáno v . Jeden z bodů dokumentace nám doporučuje přidat volbu skip-grant-tables v /etc/mysql/mysql.conf.d/mysqld.cnf. Také zde je klíč — AugustaAdaKingByron.
Opravujeme práva uživateli 'wp'@'localhost'. Spouštíme MySQL, zpřístupňujeme jej v síti tím, že v konfiguraci zakomentujeme volbu skip-networking.
4. Po provedených krocích se webový server spouští, ale stránka stále nefunguje, protože
Upozornění: require_once( /usr/share/wordpress/wp-content/themes/twentysixteen/footer.php): otevření streamu selhalo: Přístup odepřen v /usr/share/wordpress/wp-includes/template.php na řádku 562Upravujeme oprávnění k souboru.
$ chmod 644 /usr/share/wordpress/wp-content/themes/twentysixteen/footer.php
Aktualizujeme stránku, přecházíme na web a hledáme klíč — BjarneStroustrup! Našli jsme všechny tři klíče, náš ředitel může pracovat, dešifrovali jsme účetní soubory. Všichni jsou šťastní a před tebou je spousta práce na zajištění infrastruktury, záloh a bezpečnosti ve firmě.
2. Druhá fáze
Bylo třeba vyřešit úkol ohledně sběru analytiky. Analytiku má rádo každý — kdo a odkud a v jakých počtech chodí. Vymysleli jsme situaci, se kterou se mohou inženýři v životě setkat v různých podobách.
2.1. Zajímavá fakta
Jeden z našich hráčů zadal správný klíč během prvních 10 minut hry, a za první hodinu jsme měli lídra, který úkol zvládl.
2.2. Úkol
Přijdeš do práce do firmy, manažeři tě požádají, abys zjistil, komu byly zasílány e-maily z Afriky. Je potřeba sestavit top-21 adres příjemců. První písmena adres příjemců jsou klíč. Jenže: poštovní server, přes který byly e-maily odeslány, se nenačítá. Všichni očekávají rychlé řešení!
2.3. Řešení
1. Server se nenačítá kvůli neexistujícímu oddílu swap v fstab, při bootování se systém snaží připojit a padá. Jak se spustit?
Stahujeme obraz, stáhli jsme CentOS 7, spouštíme z Live CD/DVD (Troubleshooting -> Rescue), montujeme systém, opravujeme /etc/fstab. Hned nacházíme první klíč — GottfriedWilhelm11646Leibniz!
Vytváříme swap:
$ lvcreate -n swap centos -L 256M
$ sync && reboot2. Jako obvykle není žádné heslo, musíme změnit heslo root na virtuálním stroji. To jsme již provedli v prvním úkolu. Změníme a úspěšně se přihlásíme na server, ale ten okamžitě znovu restartuje. Server se restartuje tak rychle, že nemáme čas se podívat na všechny logy pozorně. Jak pochopit, co se děje?
Znovu se bootujeme z livecd, pečlivě zkoumáme systémové logy a pro jistotu nahlédneme do cronu, jelikož je taková periodičnost. Tam nalézáme problém a druhý klíč — Alan1912MathisonTuring!
Je třeba /etc/crontab odstranit nebo zakomentovat řádek echo b > /proc/sysrq-trigger.
3. Po načtení serveru můžeme splnit úkol manažerů: „Jaké jsou adresy Afriky?“ Tyto informace jsou obecně veřejně dostupné. Můžete je najít na internetu pomocí pojmů „ip address africa“, „geoip database“. Pro řešení úkolu můžete použít volně dostupné databáze pro distribuci adres (geoip). Jako referenci jsme použili databázi , dostupnou na licenci Creative Commons Attribution-ShareAlike 4.0.
Zkusíme vyřešit náš úkol pouze pomocí systémových utilit Linuxu, ale bylo by možné ho řešit mnoha způsoby: pomocí textových filtračních utilit a pomocí skriptů v různých programovacích jazycích.
Nejdříve získáme páry „IP odesílatele — příjemce“ z poštovního protokolu /var/log/maillog (vytvoříme tabulku emailových příjemců — IP odesílatele). To lze provést následujícím příkazem:
$ 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.txtA než pokračujeme ke sestavení databáze adres v Africe, podívejme se na top IP adresy odesílatelů.
$ 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
Mezi všemi adresáty jasně vynikají tři první příjemci z topu podle počtu zpráv. Pokud grepnete IP adresy odesílatelů, které posílaly na adresy z tohoto top-3, můžete si všimnout jasného přebytku určitých sítí:
$ 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 165Většina sítí 105/8, 41/8, 196/8, 197/8 je vyčleněna AFRINIC — jeden z pěti regionálních internetových registrátorů, kteří provádějí distribuční správu internetových zdrojů. AFRINIC rozděluje adresní prostor na území Afriky. A 41/8 patří zcela AFRINIC.
https://www.nic.ru/whois/?searchWord=105.0.0.0
https://www.nic.ru/whois/?searchWord=41.0.0.0
Tím pádem je odpověď na úkol vlastně přímo v samotném protokolu.
$ 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.ruV této fázi získáme řetězec „LinuxBenedictTorvadst“.
Správný klíč: „LinusBenedictTorvalds“.
Získaný řetězec obsahuje překlep ve srovnání se správným klíčem v posledních 3 znacích. To je způsobeno tím, že vybrané sítě nejsou zcela přiděleny africkým zemím a také tím, jak jsou e-maily rozděleny podle IP adres v našich protokolech.
Při dostatečném upřesnění největších sítí přidělených africkým zemím lze získat přesnou odpověď.:
$ 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 Úkol lze vyřešit také jinak.
Stáhneme MaxMind, rozbalíme a následující tři příkazy také vyřeší náš úkol.
$ 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
Ať už tak či onak, nakonec jsme spočítali statistiku a manažeři získali potřebná data pro svou práci!
3. Třetí etapa
Třetí etapa je jaksi podobná první — také je třeba opravit teplý lampový servis, ale vše je složitější než v prvním úkolu.
3.1. Zajímavá fakta
Během prvních 15 minut nalezli tři hráči první klíč, a 2 hodiny a 20 minut po začátku etapy se náš vítěz s úkolem vypořádal.
3.2. Úkol
Přijal jsi práci ve společnosti, kde jsou všechny firemní dokumenty uloženy na interním serveru Wiki. Minulý rok technik objednal 3 nové disky pro server, mimo jeden stávající, argumentoval tím, že pro zajištění odolnosti systému je třeba disky dávat do určitých polí. Bohužel, několik týdnů po jejich instalaci technik odjel na dovolenou do Indie a nevrátil se.
Několik let server fungoval bez výpadků, ale před pár dny byla síť společnosti napadena. Podle pokynů pracovníci ostrahy vytáhli disky ze serveru a poslali je tobě. Při přepravě byl jeden disk nenávratně ztracen.
Je třeba obnovit funkčnost Wiki, přičemž nejvíce mě zajímá obsah stránek wiki. Nějaký kus textu, který byl na jedné z těchto stránek, je heslem k serveru 1C a je naléhavě potřeba pro jeho odblokování.
Kromě toho byly někde na stránkách wiki nebo na jiném místě hesla k serveru logů a serveru videodohledu, která je také žádoucí obnovit, bez nichž je vyšetřování události nemožné. Jak vždy, čekáme na operativní řešení problému!
3.3. Řešení
1. Pokoušíme se bootovat postupně z těch disků, které máme, a všude dostáváme stejnou zprávu:
No bootable medium found! System halted
Musíme se z něčeho bootovat. Opět nám pomáhá bootování z Live CD/DVD (Troubleshooting -> Rescue). Při bootování se snažíme najít bootovací oddíl, nenacházíme, dostáváme se do shellu. Snažíme se prozkoumat, co a jak s disky. Je známo, že jich je tři. Nástrojů pro to je více v 7. verzi CentOS, kde jsou příkazy blkid nebo lsblk, které nám ukazují všechny informace o discích.
Co a jak děláme:
$ ls /dev/sd*Hned je vidět, že
/dev/sdb1 - ext4
/dev/sdb2 - часть lvm
/dev/sda1 и /dev/sdc1 - части рейда
/dev/sda2 и /dev/sdc2 - про них ничего не известно на текущий моментPřipojujeme sdb1, vidíme, že to je bootovací oddíl CentOS 6.
$ mkdir /mnt/sdb1 && mount /dev/sdb1 /mnt/sdb1Zřejmě jdeme do oddílu grub a najdeme tam první klíč — James191955Gosling v neobvyklém souboru.
2. Studujeme pvs a lvs, protože pracujeme s LVM. Vidíme, že by měly být 2 fyzické volume, jeden se nenachází a hlásí ztracený uid. Vidíme, že by měly být 2 logické volume: root a swap, přičemž root je částečně ztracen (atribut P u volume). Nelze ho připojit, což je škoda! Je pro nás velmi důležitý.
Ještě jsou zde 2 disky, podíváme se na ně, shromáždíme a připojíme:
$ mdadm --examine --verbose --scan
$ mdadm --assemble --verbose --scan
$ mkdir /mnt/md127 && mount /dev/md127 /mnt/md127 Pohled, je vidět, že to je bootovací oddíl CentOS 6 a duplicita toho, co už máme na /dev/sdb1, a zde opět stejný klíč — DennisBMacAlistairCRitchie!
Pohled na to, jak je shromážděno /dev/md127.
$ mdadm --detail /dev/md127
Vidíme, že to mělo být shromážděno ze 4 disků, shromážděno ze dvou /dev/sda1 a /dev/sdc1, měly být čísly 2 a 4 v systému. Předpokládáme, že je možné shromáždit také /dev/sda2 a /dev/sdc2 Zde by měl být RAID10, i když jsou i jiné možnosti. Shromáždíme:
$ mdadm --create --verbose /dev/md0 --assume-clean --level=10 --raid-devices=4 missing /dev/sda2 missing /dev/sdc2
Pohled na blkid, pvs, lvs. Zjistíme, že jsme shromáždili fyzické volume, které nám dříve chybělo.
Okamžitě opravíme lvroot, přimontujeme ho, ale nejprve aktivujeme VG:
$ vgchange -a y
$ mkdir /mnt/lvroot && mount /dev/mapper/vg_c6m1-lv_root /mnt/lvroot
A tam je všechno, včetně klíče v domovském adresáři root — /root/sweet.
3. Snažíme se oživit náš server, aby se normálně spustil. Všechny logické svazky z našeho /dev/md0 (kde jsme všechno našli) přesuneme do /dev/sdb2, kde server původně fungoval.
$ pvmove /dev/md0 /dev/sdb2
$ vgreduce vg_c6m1 /dev/md0Vypneme server, odstraníme 1. a 3. disky, necháme druhý, nabootujeme z Live CD/DVD do režimu Rescue. Najdeme zaváděcí oddíl, obnovíme zaváděč v grub:
root (hd0,0)
setup (hd0)
Odstraníme zaváděcí disk a úspěšně nabootujeme, ale web nefunguje.
4. Existují dva způsoby, jak spustit web: nastavit Apache od nuly nebo použít již přednastavený nginx s php-fpm:
$ /etc/init.d/nginx start
$ /etc/init.d/php-fpm start
Nakonec je potřeba spustit MySQL:
$ /etc/init.d/mysqld start Nepouští se, a hádanka je skryta v /var/log/mysql. Jakmile vyřešíte problém s MySQL, web poběží, na hlavní stránce bude klíč — RichardGCCMatthewGNUStallman! Nyní máme přístup do 1C a zaměstnanci si budou moci vybrat mzdu. A ty máš jako vždy před sebou hodně práce na nastavení infrastruktury a bezpečnosti ve firmě.
Také se můžeme znovu podělit o seznam knih, které nám a našim účastníkům pomáhaly připravit se na hru: .
Děkujeme, že jste byli s námi! Sledujte oznámení o dalších hrách!
Zdroj: habr.com
