Linux Quest. Grattis till vinnarna och berätta om lösningarna på uppgifterna

Linux Quest. Grattis till vinnarna och berätta om lösningarna på uppgifterna

Den 25 mars öppnade vi anmälan för Linux Quest, detta är ett spel för älskare och experter av operativsystemet Linux. Lite statistik: 1117 317 personer registrerade sig för spelet, 241 av dem hittade minst en nyckel, 123 klarade uppgiften i det första steget, 70 - det andra och XNUMX klarade det tredje steget. Idag har vårt spel tagit slut och vi gratulerar våra vinnare!

  • Alexander Teldekov tog förstaplatsen.
    Alexander sa till sig själv att han är den mest typiska systemadministratören. Bor i Volgograd, har administrerat olika Unix-liknande system i cirka tjugo år. Jag lyckades arbeta i Internetleverantörer, en bank och en systemintegratör. Nu arbetar han på distans i ett litet företag och arbetar med molninfrastruktur för en stor utländsk kund. Älskar att läsa och lyssna på musik. Om spelet sa Alexander att han gillade spelet som helhet, han älskar sådana uppgifter. Under en intervju på ett av företagen gjorde jag något liknande Hackerrank, det var intressant.
  • Andra plats - Roman Suslov.
    En roman från Moskva. Han är 37 år gammal. Jobbar som Linux/Unix-ingenjör på Jet Infosystems. På jobbet måste jag administrera och felsöka Linux/Unix-system + SAN. Intressen är varierande: Linux-system, programmering, reverse engineering, informationssäkerhet, Arduino. Om spelet Roman noterade att han gillade spelet överlag. ”Jag sträckte på hjärnan lite och tog en paus från den gråa vardagen i arbetsvardagen. 🙂 Jag skulle vilja ha fler uppgifter, annars var spelet redan över innan jag hann smaka på det.”
  • Tredje - alex3d.
    Alex bor i Moskva och arbetar med mjukvaruutveckling. "Tack för tävlingen, det var intressant att testa mina google-fu-kunskaper."

Även i rankingen av de 10 bästa spelarna:

  • Jevgenij Saldajev
  • Markel Mokhnatsjevskij
  • Konstantin Konosov
  • Pavel Sergeev
  • Vladimir Bovaev
  • Ivan Bubnov
  • Pavlo Klets

Vi förstår att det finns många alternativ för att lösa alla våra problem; några av de möjliga lösningarna beskrivs nedan.

1. Första steget

Vi kallade det "Är du verkligen en administratör?", eftersom uppgiften var ganska enkel - att fixa en varm lamptjänst.

1.1. Intressanta fakta:

Två spelare hittade den första nyckeln under de första 15 minuterna av spelet, och under den första timmen hade vi tre ledare som slutförde uppgiften.

1.2. Träning

Du arbetade i ett företag där det under lång tid inte fanns någon kompetent IT-specialist. Innan du börjar ställa saker i ordning måste du lösa det brinnande problemet som blockerar kontorets arbete.

Städerskan fångade upp strömkabeln till serverskåpet med en mopp. Strömmen har återställts, men en mycket viktig webbplats fungerar fortfarande inte. Webbplatsen är viktig eftersom företaget inte är särskilt mån om informationssäkerhet och på huvudsidan av denna kan du i klartext hitta administratörslösenordet för VD:ns dator.

Häromdagen ändrades lösenordet, men alla glömde det nya, direktören kan inte jobba. Det finns rykten om att det fanns fler nycklar på den här maskinen som skulle kunna hjälpa oss att dechiffrera säkerhetskopian av bokföringsdokumenten.

Alla förväntar sig en snabb lösning av problemet!

1.3. Lösning

1. Först och främst måste du ändra root-lösenordet på den virtuella maskinen för att få tillgång till det. När vi startar märker vi att detta är Ubuntu 16.04 Server.

För att återställa root-lösenordet startar vi om maskinen, när grub-menyn visas när grub-menyn visas, gå till redigera Ubuntu-objektet med "e" -knappen. Redigera linux-linjen, lägg till den i slutet init=/bin/bash. Vi laddar via Ctrl+x, vi får en bash. Montera om roten med rw, ändra lösenordet:

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

Glöm inte synkronisering, starta om.

2. Villkoret säger att vår webbserver inte fungerar, titta:

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

Det vill säga att Apache körs, men svarar med kod 404. Låt oss titta på konfigurationen:

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

Det finns också en nyckel här - StevenPaulSteveJobs.

Kollar vägen /usr/share/WordPress – det finns inget sådant, men det finns det /usr/share/wordpress. Redigera konfigurationen och starta om Apache.

$ systemctl restart apache2

3. Försök igen, vi får felet:

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

Körs inte databasen?

$ systemctl status mysql
Active: active (running)

Vad är problemet? Vi måste ta reda på det. För att göra detta måste du få tillgång till MySQL, som beskrivs i dokumentation. En av dokumentationspunkterna rekommenderar att vi registrerar alternativet skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf. Det finns också en nyckel här - AugustaAdaKingByron.

Korrigera användarrättigheter 'wp'@'localhost'. Vi lanserar MySQL, gör det tillgängligt över nätverket, kommenterar alternativet i konfigurationen skip-networking.

4. Efter dessa steg startar webbservern, men sidan fungerar fortfarande inte pga

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

Vi redigerar rättigheterna till filen.

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

Vi uppdaterar sidan, går in på sidan och hittar nyckeln - BjarneStroustrup! Vi hittade alla tre nycklarna, vår chef kan fungera, vi dekrypterade bokföringsfilerna. Alla är nöjda och du har mycket arbete framför dig med att sätta upp infrastruktur, backup och säkerhet i företaget.

2. Andra etappen

Det var nödvändigt att lösa problemet med att samla in analyser. Alla älskar analyser – vem använder det, var och i vilka mängder. Vi kom på ett fall som alla ingenjörer kan stöta på i en eller annan form i livet.

2.1. Intressanta fakta

En av våra spelare skrev in rätt nyckel inom de första 10 minuterna av spelet, och inom den första timmen hade vi en ledare som slutförde uppgiften.

2.2. Träning

Du gick och jobbade på företaget, chefer kom till dig och bad dig ta reda på vilka brev som skickades från Afrika till. Vi måste bygga de 21 bästa mottagaradresserna utifrån dem. De första bokstäverna i mottagarnas adresser är nyckeln. En sak: e-postservern som breven skickades genom laddas inte. Alla förväntar sig en snabb lösning av problemet!

2.3. Lösning

1. Servern startar inte på grund av en obefintlig swap-partition i fstab, vid laddning försöker systemet montera den och kraschar. Hur startar man?

Ladda ner bilden, vi laddade ner CentOS 7, starta från Live CD/DVD (Felsökning -> Rescue), montera systemet, redigera /etc/fstab. Vi hittar genast den första nyckeln - GottfriedWilhelm11646Leibniz!

Skapa swap:

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

2. Som alltid finns det inget lösenord, du måste ändra root-lösenordet på den virtuella maskinen. Det gjorde vi redan i den första uppgiften. Vi ändrar och loggar in på servern, men den startar omedelbart om. Servern är överbelastad med en sådan hastighet att du inte ens har tid att titta på alla loggar noggrant. Hur förstår man vad som händer?

Återigen startar vi från livecd:n, studerar systemloggarna noggrant och, i alla fall, titta på cron, eftersom en sådan periodicitet. Där hittar vi problemet och den andra nyckeln - Alan1912MathisonTuring!

Behövs in /etc/crontab radera eller kommentera raden echo b > /proc/sysrq-trigger.

3. Därefter har servern laddats och du kan slutföra chefernas uppgift: "Vilka är adresserna i Afrika?" Denna information är allmänt tillgänglig för allmänheten. Du kan hitta denna information på Internet genom att använda fraserna "ip-adress afrika", "geoip-databas". För att lösa problemet kan du använda fritt tillgängliga adressdistributionsdatabaser (geoip). Vi använde databasen som standard MaxMind GeoLite2, tillgänglig under licensen Creative Commons Attribution-ShareAlike 4.0.

Låt oss försöka lösa vårt problem med hjälp av bara Linux-systemverktyg, men i allmänhet kan det lösas på ett stort antal sätt: med hjälp av textfiltreringsverktyg och med skript på olika programmeringsspråk.

Till att börja med får vi helt enkelt "avsändare-mottagarens IP"-par från e-postloggen /var/log/maillog (låt oss bygga en tabell över e-postmottagare - avsändarens IP). Detta kan göras med följande kommando:

$ 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

Och innan vi fortsätter med att sammanställa en databas med afrikanska adresser, låt oss ta en titt på de bästa IP-adresserna för avsändare.

$ 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]

Bland dem alla sticker de tre första mottagarna uppifrån klart ut vad gäller antalet brev. Om du greppar IP-adresserna för avsändarna som skickade till adresser från denna topp 3 kommer du att märka en tydlig övervikt av vissa nätverk:

$ 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

De flesta av nätverken 105/8, 41/8, 196/8,197/8 är tilldelade AFRINIC - en av de fem regionala internetregistratorer som distribuerar internetresurser. AFRINIC distribuerar adressutrymme över hela Afrika. Och 41/8 hänvisar till AFRINIC helt och hållet.

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

Således finns svaret på problemet i själva verket i själva loggen.

$ 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]

I detta skede får vi strängen "LinuxBenedictTorvadst".

Rätt nyckel: "LinusBenedictTorvalds".

Den resulterande strängen innehåller ett stavfel i förhållande till rätt nyckel i de sista 3 tecknen. Detta beror på det faktum att de nätverk vi valt inte är helt dedikerade till afrikanska länder och på hur e-postmeddelanden distribueras av IP-adresser i vår logg.

Med tillräcklig specifikation av de största nätverken som tilldelats afrikanska länder kan ett exakt svar erhållas:

$ 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]

Problemet kan också lösas på annat sätt.
Ladda ner MaxMind, packa upp det och de nästa tre kommandona löser också vårt 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

På ett eller annat sätt räknade vi så småningom ut statistiken, och cheferna fick den data de behövde för att fungera!

3. Tredje etappen

Det tredje steget är något likt det första - du måste också fixa den varma lampan, men allt är mer komplicerat än i den första uppgiften.

3.1. Intressanta fakta

Under de första 15 minuterna hittade tre spelare den första nyckeln; 2 timmar och 20 minuter efter etappens start slutförde vår vinnare uppgiften.

3.2. Träning

Du gick till jobbet för ett företag där alla företagsdokument lagras på en intern Wiki-server. Förra året beställde en ingenjör 3 nya diskar till servern utöver en befintlig, med argumentet att för att systemet skulle vara feltolerant måste diskarna placeras i någon form av arrayer. Tyvärr åkte ingenjören några veckor efter installationen på semester till Indien och återvände inte.

Servern fungerade utan fel i flera år, men för ett par dagar sedan hackades företagets nätverk. Enligt instruktionerna tog säkerhetspersonalen bort diskarna från servern och skickade dem till dig. Under transporten förlorades en skiva oåterkalleligt.

Vi måste återställa funktionaliteten hos Wiki; först och främst är vi intresserade av innehållet på wikisidorna. Ett visst stycke text som fanns på en av sidorna i denna wiki är lösenordet för 1C-servern och behövs akut för att låsa upp den.

Dessutom fanns det någonstans på wikisidorna eller på annan plats lösenord för loggservern och videoövervakningsservern, som också skulle vara önskvärt att återställa, utan dem är det omöjligt att utreda händelsen. Som alltid förväntar vi oss en snabb lösning på problemet!

3.3. Lösning

1. Vi försöker starta en efter en från de diskar vi har och överallt får vi samma meddelande:

No bootable medium found! System halted 

Du måste starta från något. Att starta upp från en Live CD/DVD (Felsökning -> Rescue) hjälper igen. När vi laddar försöker vi hitta startpartitionen, vi kan inte hitta den, vi hamnar i skalet. Vi försöker studera vad och hur man gör med diskar. Det är känt att det finns tre av dem. Det finns fler verktyg för detta i den 7:e versionen av CentOS, där det finns kommandon blkid eller lsblk, som visar oss all information om diskarna.

Hur och vad vi gör:

$ ls /dev/sd*

Det är direkt uppenbart att

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

Vi monterar sdb1, det är tydligt att detta är startpartitionen för CentOS 6.

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

Uppenbarligen går vi till grub-sektionen och hittar den första nyckeln där - James191955Gosling i en ovanlig fil.

2. Vi studerar pvs och lvs, eftersom vi arbetar med LVM. Vi ser att det ska finnas 2 fysiska volymer, den ena är inte lokaliserad och klagar på en förlorad uid. Vi ser att det borde finnas 2 logiska volymer: root och swap, medan root delvis förloras (volymens P-attribut). Det går inte att montera, vilket är synd! Vi behöver honom verkligen.

Det finns ytterligare 2 skivor, vi tittar på dem, monterar och monterar dem:

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

Vi tittar, vi kan se att detta är startpartitionen för CentOS 6 och en dubblett av det som redan finns på /dev/sdb1, och här igen samma nyckel - DennisBMacAlistairCRitchie!
Låt oss se hur det är monterat /dev/md127.

$ mdadm --detail /dev/md127

Vi ser att den borde ha satts ihop från 4 skivor, men den var ihopsatt av två /dev/sda1 и /dev/sdc1, de borde ha varit nummer 2 och 4 i systemet. Vi antar att från /dev/sda2 и /dev/sdc2 Du kan också samla en array. Det är inte klart varför det inte finns någon metadata på dem, men detta är på administratörens samvete, som är någonstans i Goa. Vi antar att det borde finnas RAID10, även om det finns alternativ. Vi samlar in:

$ mdadm --create --verbose /dev/md0 --assume-clean --level=10 --raid-devices=4 missing /dev/sda2 missing /dev/sdc2

Vi tittar på blkid, pvs, lvs. Vi upptäcker att vi har samlat på oss en fysisk volym som vi tidigare saknat.

lvroot reparerades omedelbart, vi monterar den, men aktiverar först VG:

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

Och allt finns där, inklusive nyckeln i rothemkatalogen - /root/sweet.

3. Vi försöker fortfarande att återuppliva vår server så att den startar normalt. Alla logiska volymer från vår /dev/md0 (där vi hittade allt) dra den till /dev/sdb2, där hela servern från början fungerade.

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

Vi stänger av servern, tar bort skivor 1 och 3, lämnar den andra, startar från Live CD/DVD till Rescue. Hitta startpartitionen och återställ starthanteraren i grub:

root (hd0,0)
setup (hd0)

Vi river av startskivan och laddar, men sidan fungerar inte.

4. Det finns två alternativ för att starta en webbplats: konfigurera Apache från början eller använd nginx med php-fpm redan konfigurerad i förväg:

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

Slutligen måste du starta MySQL:

$ /etc/init.d/mysqld start

Den startar inte, och svaret ligger i /var/log/mysql. Så fort du löser problemet med MySQL kommer sidan att fungera, på huvudsidan kommer det att finnas en nyckel - RichardGCCMatthewGNUStallman! Nu har vi tillgång till 1C, och anställda kommer att kunna få sina löner. Och som alltid har du mycket arbete framför dig för att etablera infrastruktur och säkerhet i företaget.

Vi kan också återigen dela med oss ​​av en lista med böcker som hjälpte oss och våra deltagare att förbereda sig för spelet: linux.mail.ru/books.

Tack för att du är med oss! Håll utkik efter meddelanden om nästa spel!

Källa: will.com

Lägg en kommentar