Linux Quest. Gratulálunk a nyerteseknek, és beszámolunk a feladatok megoldásáról

Linux Quest. Gratulálunk a nyerteseknek, és beszámolunk a feladatok megoldásáról

Március 25-én megnyitottuk a regisztrációt a Linux Quest, ez egy játék a Linux operációs rendszer szerelmeseinek és szakértőinek. Néhány statisztika: 1117 ember regisztrált a játékra, közülük 317-en találtak legalább egy kulcsot, 241-en sikeresen teljesítették az első szint feladatát, 123 a másodikat, és 70-en befejezték a harmadik szintet. Ma a játékunknak vége, és gratulálunk a nyerteseinknek!

  • Az első helyet Alexander Teldikov nyerte.
    Alexander azt mondta magáról, hogy ő a tipikus rendszeradminisztrátor. Volgogradban él, és már körülbelül húsz éve adminisztrál különböző Unix-alapú rendszereket. Dolgozott internet-szolgáltatóknál, bankokban, rendszerintegrátoroknál. Jelenleg távmunkában dolgozik egy kis cégnél, és felhőinfrastruktúrával foglalkozik egy nagy külföldi megrendelő számára. Szeret olvasni és zenét hallgatni. A játékról Alexander elmondta, hogy összességében tetszett neki, szereti az ilyen feladatokat. Az egyik cég interjúján hasonlóval foglalkozott, mint a Hackerrank, érdekes volt.
  • A második helyen Roman Suslov áll.
    Roman Moszkvából származik. 37 éves. Linux/Unix mérnökként dolgozik az 'Infószisztémák Jet' cégnél. A munkája során Linux/Unix rendszerek adminisztrálásával és hibaelhárításával foglalkozik + SAN. Érdeklődései változatosak: Linux rendszerek, programozás, visszafejtés, információbiztonság, Arduino. A játékról Roman megjegyezte, hogy összességében tetszett neki. "Kicsit megmozgattam az agytekervényeimet, és eltávolodtam a szürke hétköznapok monotonitásától. 🙂 Jó lenne, ha több feladat lenne, mert nem sikerült tökéletesen belemerülnöm, mire a játék véget ért."
  • A harmadik helyen alex3d áll.
    Alex Moszkvában él, szoftverfejlesztéssel foglalkozik. "Köszönöm a versenyt, jó volt ellenőrizni a google-fu képességemet."

A legjobb 10 játékos között:

  • Yevgeniy Saldayev
  • Markel Mokhnachevskiy
  • Konstantin Konosov
  • Pavel Sergeev
  • Vladimir Bovaev
  • Ivan Bubnov
  • Pavlo Klets

Megértjük, hogy a feladataink megoldásának számos módja létezik, alább néhány lehetséges megoldási módot írunk le.

1. Első szint

Mi ezt neveztük el „Te tényleg admin vagy?”, mivel a feladat meglehetősen egyszerű volt — javítani a meleg lámpás szolgáltatást.

1.1. Érdekes tények:

Két játékos az első kulcsot a játék első 15 percében találta meg, az első órában pedig három vezetőnk volt, akik teljesítették a feladatot.

1.2. Feladat

Most már olyan munkáltatónál dolgozol, ahol hosszú ideje nem volt megfelelő informatikai szakember. Mielőtt rendet tudnál tenni, meg kell oldanod egy sürgős problémát, amely akadályozza az iroda működését.

A takarítónő nekiütközött a szerver szekrény tápellátó kábelének a mopjával. A tápellátást helyreállították, de egy nagyon fontos weboldal még mindig nem működik. Ez a weboldal fontos, mert a cég nem túlzottan aggódik az informatikai biztonság miatt, és a főoldalon nyíltan megtalálható a vezérigazgató számítógépének adminisztrátori jelszava.

A minap megváltoztatták a jelszót, de senki sem emlékszik az újra, a vezérigazgató nem tud dolgozni. Szóbeszédek terjengenek arról, hogy ezen a gépen voltak kulcsok is, amelyek segíthetnek a könyvelési dokumentumok biztonsági másolatának dekódolásában.

Mindenki sürgős megoldást vár a kérdésre!

1.3. Megoldás

1. Először meg kell változtatni a root jelszót a virtuális gépen, hogy hozzáférhessünk. A rendszerindításkor észrevesszük, hogy ez egy Ubuntu 16.04 Server.

A root jelszó visszaállításához újra kell indítani a gépet, a betöltés kezdetén, amikor a grub menü megjelenik, nyomjunk "e"-t a Ubuntu opció szerkesztéséhez. Szerkesszük a linux sort, és a végére írjuk: init=\/bin\/bash. Betöltjük a Ctrl+x segítségével, így egy bash környezetbe kerülünk. A gyökér fájlrendszert rw módban szereljük fel, majd megváltoztatjuk a jelszót:

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

Ne felejtsük el a sync parancsot, majd újraindítunk.

2. A feladat szerint nem működik a web szerver, nézzük meg:

$ curl localhost
Not Found
A kért URL \/ nem található a szerveren.
Apache\/2.4.18 

Tehát valójában az Apache elindult, de 404-es kódot küld vissza. Nézzük meg a konfigurációt:

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

Itt található a kulcs — StevenPaulSteveJobs.

Ellenőrizzük az utat /usr/share/WordPress — ez nem létezik, de van /usr/share/wordpress. Javítjuk a konfigurációt és újraindítjuk az apache-t.

$ systemctl restart apache2

3. Próbáljuk újra, ezt a hibát kapjuk:

Warning: mysqli_real_connect(): (HY000\/2002): Kapcsolat megtagadva a \/usr\/share\/wordpress\/wp-includes\/wp-db.php 1488. sorában.

Nem fut a DB?

$ systemctl status mysql
Aktív: aktív (fut)

Mi hát a probléma? Meg kell értenünk. Ehhez hozzáférést kell szereznünk a MySQL-hez, hogy miként lehet ezt elérni a dokumentáció. A dokumentáció egyik pontja azt javasolja, hogy írjuk be az opciót skip-grant-tables be. /etc/mysql/mysql.conf.d/mysqld.cnf. Itt is található a kulcs — AugustaAdaKingByron.

Javítjuk a jogokat a felhasználónak 'wp'@'localhost'. Elindítjuk a MySQL-t, hogy elérhető legyen a hálózaton, a konfigurációs fájlban kommenteljük ki az opciót skip-networking.

4. A végrehajtott műveletek után a webserver elindul, de a weboldal még mindig nem működik, mivel

Figyelmeztetés: require_once(\/usr\/share\/wordpress\/wp-content\/themes\/twentysixteen\/footer.php): a stream megnyitása nem sikerült: Engedély megtagadva a következőn: \/usr\/share\/wordpress\/wp-includes\/template.php 562. sorában

Javítjuk a fájl jogait.

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

Frissítjük az oldalt, belépünk a weboldalra és megtaláljuk a kulcsot — BjarneStroustrup! Megtaláltuk mindhárom kulcsot, igazgatónk dolgozhat, dekódoltuk a könyvelési fájlokat. Mindenki boldog, de előtted rengeteg munka vár, infrastruktúra, biztonsági mentések és a vállalat biztonságának megszervezése maradt.

2. Második lépés

Meg kellett oldani egy analitika gyűjtési feladatot. Mindenki szereti az analitikát — ki honnan és hányan jönnek. Találtunk egy esetet, amivel a mérnökök bármikor találkozhatnak életük során.

2.1. Érdekes tények

Az egyik játékosunk az első 10 percben beírta a helyes kulcsot, és az első óra végére volt egy vezetőnk, aki megoldotta a feladatot.

2.2. Feladat

Te beléptél a céghez, a menedzserek megkerestek, és megkérdezték, kihez küldtek leveleket Afrikából. Az feladók 21 címét kell rangsorolni. A címek első betűi a kulcsok. Egy probléma van: a leveleket küldő levélserver nem elérhető. Mindenki sürgős megoldást vár!

2.3. Megoldás

1. A szerver nem akar indulni, mert nincs swap rész a fstab fájlban, a rendszer megpróbálja azt csatolni induláskor, és összeomlik. Hogyan lehet elindulni?

Letöltjük a képet, mi a CentOS 7-et töltöttük le, betöltjük a Live CD\/DVD (Hibaelhárítás -> Mentés) módban, csatoljuk a rendszert, javítunk /etc/fstab. Itt találjuk az első kulcsot — GottfriedWilhelm11646Leibniz!

Létrehozzuk a swap-ot:

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

2. A jelszó, mint mindig, nincs, meg kell változtatni a root jelszót a virtuális gépen. Ezt már elvégeztük az első feladatban. Változtatunk, és sikeresen belépünk a szerverre, de azonnal újraindul. A szerver olyan gyorsan újraindul, hogy még a naplókat sem tudjuk alaposan megnézni. Hogyan tudjunk rájönni, mi történik?

Megint csatlakozunk a livecd-hez, alaposan átnézzük a rendszer naplóit, és minden esetre megnézzük a cron-t, mivel ilyen rendszerességgel történik. Ott találjuk a problémát, és a második kulcsot — Alan1912MathisonTuring!

Ezért a következőre van szükség /etc/crontab törölni vagy megjegyezni a sor echo b > \/proc\/sysrq-trigger.

3. Miután a szerver elindult, végrehajthatjuk a menedzserek feladatát: „Melyek Afrika címei?” Az információ általában nyilvános. Ezt az információt az interneten kereshetjük „ip address africa”, „geoip database” kifejezésekkel. A feladat megoldásához ingyenesen elérhető címek eloszlásáról szóló adatbázisokat (geoip) használhatunk. Mi mint referenciát egy adatbázist használtunk, MaxMind GeoLite2, amely a Creative Commons Attribution-ShareAlike 4.0 licenc alatt érhető el.

Próbáljuk meg megoldani a feladatunkat kizárólag Linux rendszerparancsokkal, de valójában sokféleképpen megoldható: szövegfilterelő segédprogramokkal és különböző programozási nyelveken írt szkriptekkel.

Először is, egyszerűen kapjuk meg a „Küldő IP - Címzett” párokat a levelezési naplóból, /var/log/maillog (készítünk egy email címzett – küldő IP táblázatot). Ezt az alábbi parancs segítségével tehetjük meg:

$ 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

Mielőtt folytatnánk az afrikai címek adatbázisának összeállítását, nézzük meg a küldők legjobb IP címeit.

$ 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

Az összes levél mennyisége alapján világosan kiemelkedik a három legjobb címzett a toplistán. Ha grep-pel keressük a küldő IP címeket, amelyek ezt a 3 legnépszerűbb email címet célozzák, világosan megfigyelhetjük bizonyos hálózatok dominálá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 165

A legtöbb hálózat 105/8, 41/8, 196/8, 197/8 az AFRINIC-hoz tartozik - az öt regionális internetnyilvántartó egyike, amely az internetes erőforrások elosztásáért felel. Az AFRINIC az afrikai kontinensen osztja el a címtartományokat. Az 41/8 teljes egészében az AFRINIC-hez tartozik.

https://www.nic.ru/whois/?searchWord=105.0.0.0 
https://www.nic.ru/whois/?searchWord=41.0.0.0

Így a válasz a feladatra valójában a naplóban található.

$ 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.ru

Ebben a szakaszban megkapjuk a "LinuxBenedictTorvadst" sztringet.

Helyes kulcs: "LinusBenedictTorvalds".

A megkapott sztringben hibásan szerepel a helyes kulcshoz viszonyítva az utolsó 3 karakter. Ez annak köszönhető, hogy a választott hálózataink nem teljes egészében vannak kijelölve az afrikai országok számára, és ahogyan az email címek IP címekhez vannak elosztva a naplónkban.

A legnagyobb afrikai országokhoz tartozó hálózatok megfelelő finomításával pontos választ kaphatunk.:

$ 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

A feladatot más módon is meg lehet oldani.
Letöltjük a MaxMind-ot, kicsomagoljuk, és a következő három parancs szintén megoldja a feladatunkat.

$ 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

Mindenféle módon végül összeszámoltuk a statisztikát, és a menedzserek megkapták a munkájukhoz szükséges adatokat!

3. Harmadik lépés

A harmadik lépés hasonlít az elsőre — szintén javítani kell a meleg világító szolgáltatást, de mindez bonyolultabb, mint az első feladat volt.

3.1. Érdekes tények

Az első 15 percben három játékos megtalálta az első kulcsot, 2 óra 20 perccel a lépés kezdete után győztesünk sikeresen teljesítette a feladatot.

3.2. Feladat

Olyan cégnél kezdtél el dolgozni, ahol az összes vállalati dokumentum a belső Wiki szerveren van tárolva. Tavaly az egyik mérnök három új merevlemezt rendelt a szerverhez, egy meglévő mellé, érvelve azzal, hogy a rendszer megbízhatóságának biztosítása érdekében a merevlemezeket bizonyos tömbökbe kell helyezni. Sajnos néhány héttel a telepítés után a mérnök Indiába ment nyaralni, és nem tért vissza.

Több évig a szerver hibátlanul működött, de néhány nappal ezelőtt a cég hálózatát feltörték. Az utasítások szerint a biztonsági személyzet eltávolította a merevlemezeket a szerverből, és elküldték neked. A szállítás során egy merevlemez véglegesen elveszett.

A Wiki működésének helyreállítása szükséges, elsősorban a wikioldalak tartalma érdekel. Egy szövegrész, amely az egyik wikioldalon volt, a 1C szerver jelszava, és sürgősen szükség van rá a feloldáshoz.

Ezen kívül a wikioldalakon vagy máshol voltak a log szerver és a videómegfigyelő szerver jelszavai is, amelyeket szintén jó volna helyreállítani, ezek nélkül a események vizsgálata lehetetlen. Mint mindig, azonnali megoldást várunk!

3.3. Megoldás

1. Próbálkozunk a rendelkezésre álló lemezekről való indítással, de mindenhol ugyanazt az üzenetet kapjuk:

No bootable medium found! System halted 

Valami indítóval kellene kezdenünk. Megint a Live CD/DVD (Hibaelhárítás -> Mentés) ment meg minket. Indításkor próbáljuk megkeresni a boot partíciót, de nem találjuk, shellbe kerülünk. Próbálkozunk megérteni, hogy mi és hogyan van a lemezekkel. Tudjuk, hogy három van belőlük. A 7-es verziójú CentOS-ban több eszköz áll rendelkezésre, ahol megtalálhatók a parancsok blkid vagy lsblk, amelyek megmutatják a lemezekkel kapcsolatos összes információt.

Miként járunk el:

$ ls /dev/sd*

Azonnal látható, hogy

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

A sdb1-et mountoljuk, látható, hogy ez a CentOS 6 boot partíciója.

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

Nyilvánvalóan bemegyünk a grub részbe, és ott találjuk meg az első kulcsot - James191955Gosling egy szokatlan fájlban.

2. Tanulmányozzuk a pvs-t és lvs-t, mivel LVM-mel dolgozunk. Látjuk, hogy 2 fizikai volume-nak kellene lennie, az egyik nem található és elveszett uid-re panaszkodik. Kiderül, hogy 2 logikai volume-nak kellene lennie: root és swap, ám a root részben elveszett (P attribútum a volumen). Mountolni nem tudjuk, és ez sajnálatos! Nagyon szükségünk van rá.

Van még 2 lemez, ránézünk, összegyűjtjük és mountoljuk:

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

Nézzük, látható, hogy ez a CentOS 6 boot partíciója és a már meglévő duplikátuma, /dev/sdb1, és itt megint ugyanaz a kulcs - DennisBMacAlistairCRitchie!
Nézzük, hogyan lett összeszerelve /dev/md127.

$ mdadm --detail /dev/md127

Látjuk, hogy 4 lemezből kellett volna összeszerelni, de csak kettőből jött létre /dev/sda1 és /dev/sdc1, azoknak a rendszerben a 2-es és 4-es számoknak kellett volna lenniük. Feltételezzük, hogy ez is összeszerelhető. Nem világos, miért nincs rajtuk metadata, de ez az admin vétke, aki valahol Goa-ban tartózkodik. Feltételezzük, hogy itt RAID10-nek kellene lennie, bár vannak alternatívák. Összeszereljük: /dev/sda2 és /dev/sdc2 $ mdadm --create --verbose /dev/md0 --assume-clean --level=10 --raid-devices=4 missing /dev/sda2 missing /dev/sdc2

Nézzük a blkid-t, pvs-t, lvs-t. Felfedezzük, hogy összeszereltünk egy fizikai volume-ot, amiből korábban hiányzott.

Nézzük a blkid-t, pvs-t, lvs-t. Felfedezzük, hogy összesítettünk egy olyan fizikai volume-t, amely eddig hiányzott számunkra.

Az lvroot azonnal javításra került, csatlakoztatjuk, de előbb aktiváljuk a VG-t:

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

És ott minden megtalálható, beleértve a kulcsot a root felhasználó otthoni könyvtárában — /root/sweet.

3. Megpróbáljuk újból életre kelteni a szerverünket, hogy normálisan indítson. Az összes logikai kötetünket a /dev/md0 (ahol mindent találtunk) áthelyezzük a /dev/sdb2, ahol eredetileg az egész szerver működött.

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

Leállítjuk a szervert, eltávolítjuk az 1-es és 3-as diskeket, csak a második marad, és Live CD/DVD-n indítunk a Rescue módba. Megkeressük a boot partíciót, és helyreállítjuk a bootloadert a grub-ban:

root (hd0,0)
setup (hd0)

Kivesszük a boot lemezt, és sikeresen betöltjük, de a weboldal nem működik.

4. Két lehetőség van a weboldal elindítására: az Apache-t újra kell konfigurálni, vagy használhatjuk az előre beállított nginx-t php-fpm-nel:

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

Végül el kell indítani a MySQL-t:

$ /etc/init.d/mysqld start

Nem indul el, és a megoldás a /var/log/mysql. Amint megoldja a MySQL problémáját, a weboldal működni fog, a főoldalon pedig a kulcs — RichardGCCMatthewGNUStallman! Most már hozzáférésünk van az 1C-hez, és a munkatársak megkaphatják a fizetésüket. Neked pedig mint mindig sok munkád van a vállalat infrastruktúrájának és biztonságának beállításával.

Továbbá, megoszthatjuk a könyvek listáját, amelyek segítettek nekünk és résztvevőinknek a játékra való felkészülésben: linux.mail.ru/books.

Köszönjük, hogy velünk voltatok! Kövessétek a következő játékok bejelentéseit!

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster