Linux Quest. Gefeliciteerd aan de winnaars en we bespreken de oplossingen voor de opdrachten.

Linux Quest. Gefeliciteerd aan de winnaars en we bespreken de oplossingen voor de opdrachten.

Op 25 maart hebben we de registratie geopend voor Linux Quest, een spel voor liefhebbers en kenners van het besturingssysteem Linux. Een beetje statistiek: er hebben zich 1117 personen voor het spel geregistreerd, waarvan 317 ten minste één sleutel hebben gevonden, 241 hebben de eerste fase succesvol voltooid, 123 de tweede fase en 70 de derde fase. Vandaag is ons spel ten einde gekomen en we feliciteren onze winnaars!

  • De eerste plaats is veroverd door Alexander Teldekov.
    Alexander vertelde dat hij de meest typische sysadmin is. Hij woont in Volgograd en beheert al zo'n twintig jaar verschillende Unix-achtige systemen. Hij heeft gewerkt bij internetproviders, banken en systeemintegrators. Momenteel werkt hij op afstand voor een klein bedrijf dat cloudinfrastructuur voor een grote buitenlandse klant beheert. Hij houdt van lezen en muziek luisteren. Over het spel zei Alexander dat hij het over het algemeen leuk vond; hij houdt van dit soort puzzels. Bij een van de bedrijven waar hij op gesprek kwam, deed hij iets soortgelijks als Hackerrank, wat interessant was.
  • De tweede plaats — Roman Suslov.
    Roman komt uit Moskou. Hij is 37 jaar oud. Hij werkt als Linux/Unix-engineer bij 'Infosystemy Jet'. In zijn werk houdt hij zich bezig met het beheren en oplossen van problemen met Linux/Unix-systemen + SAN. Zijn interesses zijn zeer divers: Linux-systemen, programmeren, reverse engineering, informatiebeveiliging, Arduino. Over het spel merkte Roman op dat hij het over het algemeen leuk vond. "Ik heb mijn hersenen een beetje kunnen rekken en ben afgeleid van de saaie dagelijkse routine. 🙂 Ik had graag meer opdrachten gehad; het was net zo leuk dat de game al eindigde voordat ik goed en wel in de sfeer was gekomen."
  • De derde plaats — alex3d.
    Alex woont in Moskou en is softwareontwikkelaar. "Bedankt voor de wedstrijd; het was interessant om mijn google-fu vaardigheden te testen."

Ook in de ranking van de top 10 spelers:

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

We begrijpen dat er veel oplossingen zijn voor al onze vragen; hieronder staan enkele mogelijke oplossingsmethoden beschreven.

1. Eerste fase

We hebben het "Ben jij echt een admin?" genoemd, omdat de opdracht vrij eenvoudig was — een warm en knus service herstellen.

1.1. Interessante feiten:

Twee spelers vonden de eerste sleutel binnen de eerste 15 minuten van het spel, en binnen het eerste uur hadden we drie leiders die de opdracht voltooiden.

1.2. Opdracht

Je bent begonnen bij een bedrijf waar lange tijd geen competente IT-specialist was. Voordat je orde op zaken kunt stellen, moet je een dringend probleem oplossen dat de werking van het kantoor blokkeert.

De schoonmaakster heeft met de mop de voedingskabel van de serverkast geraakt. De stroom is hersteld, maar een zeer belangrijke website werkt nog steeds niet. De website is belangrijk omdat het bedrijf niet erg bekommerd is om informatiebeveiliging, en op de homepage kan je het wachtwoord van de directeur van de computer in het openbaar vinden.

Onlangs is het wachtwoord veranderd, maar iedereen is het vergeten, de directeur kan niet werken. Er gaan geruchten dat er op deze machine ook sleutels lagen die ons kunnen helpen bij het ontsleutelen van de back-up van de boekhoudkundige documenten.

Iedereen wacht op een snelle oplossing van het probleem!

1.3. Oplossing

1. Eerst moet het root-wachtwoord op de virtuele machine worden gewijzigd om toegang te krijgen. Bij het opstarten merken we dat het een Ubuntu 16.04 Server is.

Om het root-wachtwoord te resetten, herstarten we de machine, en tijdens het opstarten, op het moment dat het grub-menu verschijnt, gaan we naar de bewerking van de optie Ubuntu met de knop "e". We bewerken de regel linux en voegen op het einde toe init=/bin/bash. We starten op met Ctrl+x en krijgen bash. We maken de root weer lees- en schrijfbaar en wijzigen het wachtwoord:

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

Vergeet niet om te syncen en opnieuw op te starten.

2. In de voorwaarden staat dat onze webserver niet werkt, laten we kijken:

$ curl localhost
Not Found
De opgevraagde URL / was niet gevonden op deze server.
Apache/2.4.18 

Dus feitelijk is Apache gestart, maar het geeft een 404-code terug. Laten we de configuratie bekijken:

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

Hier bevindt zich de sleutel — StevenPaulSteveJobs.

Laten we het pad controleren /usr/share/WordPress — dat bestaat niet, maar er is /usr/share/wordpress. We corrigeren de configuratie en herstarten Apache.

$ systemctl restart apache2

3. Proberen we het opnieuw, krijgen we een foutmelding:

Warning: mysqli_real_connect(): (HY000/2002): Verbinding geweigerd in /usr/share/wordpress/wp-includes/wp-db.php op regel 1488

Is de database niet gestart?

$ systemctl status mysql
Actief: actief (lopende)

Wat is er aan de hand? We moeten het uitzoeken. Hiervoor moeten we toegang krijgen tot MySQL, hoe dit te doen is beschreven in de documentatie. Een van de documentatiepunten raadt ons aan om de optie skip-grant-tables in /etc/mysql/mysql.conf.d/mysqld.cnf. Hier vinden we ook de sleutel — AugustaAdaKingByron.

We corrigeren de rechten voor de gebruiker 'wp'@'localhost'. We starten MySQL en maken het beschikbaar op het netwerk door de optie in de configuratie te commentariëren. skip-networking.

4. Na de uitgevoerde acties start de webserver op, maar de site werkt nog steeds niet, omdat

Waarschuwing: require_once(\/usr\/share\/wordpress\/wp-content\/themes\/twentysixteen\/footer.php): kan stroom niet openen: Toegang geweigerd in \/usr\/share\/wordpress\/wp-includes\/template.php op regel 562

We corrigeren de rechten op het bestand.

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

We verversen de pagina, gaan naar de website en vinden de sleutel — BjarneStroustrup! We hebben alle drie de sleutels gevonden, onze directeur kan werken, we hebben de boekhoudbestanden ontcijferd. Iedereen is blij, maar je hebt nog veel werk voor de boeg om de infrastructuur, back-ups en beveiliging van het bedrijf op te zetten.

2. Tweede fase

Er moest een probleem worden opgelost over het verzamelen van analytics. Iedereen houdt van analytics - wie waarheen gaat en in welke aantallen. We verzonnen een geval dat elke ingenieur in de loop van zijn leven op de een of andere manier kan tegenkomen.

2.1. Interessante feiten

Een van onze spelers voerde de juiste sleutel in de eerste 10 minuten van het spel in, en binnen het eerste uur hadden we een leider die de taak volbracht.

2.2. Opdracht

Je begon te werken in het bedrijf, managers kwamen naar je toe en vroegen je om te achterhalen naar wie de e-mails vanuit Afrika werden verzonden. Je moet een top-21 van ontvangersadressen opstellen. De eerste letters van de ontvangersadressen zijn de sleutel. Er is echter één nadeel: de mailserver, via welke de e-mails zijn verzonden, laadt niet. Iedereen wacht op een snelle oplossing!

2.3. Oplossing

1. De server laadt niet vanwege een niet-bestaand swapgedeelte in fstab; bij het opstarten probeert het systeem dit te monteren en valt het uit. Hoe op te starten?

We downloaden het beeld, we hebben CentOS 7 gedownload, booten vanaf Live CD\/DVD (Troubleshooting -> Rescue), monteren het systeem, passen het aan /etc/fstab. Hier vinden we de eerste sleutel — GottfriedWilhelm11646Leibniz!

Laten we swap aanmaken:

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

2. Zoals altijd is er geen wachtwoord, we moeten het root-wachtwoord op de virtuele machine wijzigen. We hebben dit al gedaan in de eerste opdracht. We veranderen het en loggen succesvol in op de server, maar hij gaat onmiddellijk opnieuw opstarten. De server herstart zo snel dat we zelfs niet alle logs aandachtig kunnen bekijken. Hoe begrijpen we wat er aan de hand is?

We booten weer vanaf livecd, bestuderen de logs van het systeem aandachtig en kijken voor de zekerheid in cron, gezien de periodiek. Daar vinden we het probleem en de tweede sleutel — Alan1912MathisonTuring!

We moeten in /etc/crontab de regel verwijderen of commentariëren echo b > \/proc\/sysrq-trigger.

3. Vervolgens is de server opgestart, en kunnen we de taken van de managers uitvoeren: "Wat zijn de adressen van Afrika?" Deze informatie is over het algemeen openbaar. Je kunt deze informatie op internet vinden door te zoeken op de termen "ip address africa", "geoip database". Voor het oplossen van deze taak kun je vrij beschikbare databases voor adresverdeling (geoip) gebruiken. Wij hebben de database als referentie gebruikt. MaxMind GeoLite2, beschikbaar onder de Creative Commons Attribution-ShareAlike 4.0-licentie.

Laten we proberen onze taak op te lossen met alleen Linux-systeemutilities, maar er zijn in feite talloze manieren om dit op te lossen: met behulp van tekstfiltering tools en met scripts in verschillende programmeertalen.

Laten we eerst de paren "IP-afzender - ontvanger" uit de e-maillog verkrijgen. /var/log/maillog (we bouwen een tabel van e-mailontvangers - IP-afzenders). Dit kan gedaan worden met de volgende opdracht:

$ 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

En voordat we verder gaan met het opstellen van de Afrikaanse adresdatabase, laten we eens kijken naar de top IP-adressen van afzenders.

$ 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

Onder alle afzenders springen de eerste drie ontvangers in de top eruit vanwege het aantal berichten. Als we de IP-adressen van de afzenders die naar de e-mailadressen uit deze top-3 sturen greppen, merken we een duidelijke dominantie van bepaalde netwerken op:

$ 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

Het merendeel van de netwerken 105/8, 41/8, 196/8 en 197/8 zijn toegewezen aan AFRINIC - een van de vijf regionale internetregisters die verantwoordelijk zijn voor de verdeling van internetbronnen. AFRINIC verdeelt het adresruimte in Afrika. En 41/8 behoort volledig aan AFRINIC.

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

Dus, antwoord op de taak is eigenlijk te vinden in het logboek zelf.

$ 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

In deze fase ontvangen we de string «LinuxBenedictTorvadst».

De juiste sleutel: «LinusBenedictTorvalds».

De verkregen string bevat een typfout in vergelijking met de juiste sleutel in de laatste 3 tekens. Dit komt doordat de netwerken die we gekozen hebben niet volledig zijn toegewezen aan de landen van Afrika en hoe e-mails zijn verdeeld over IP-adressen in ons logboek.

Bij voldoende verfijning van de grootste netwerken die aan de landen van Afrika zijn toegewezen, kan een nauwkeurig antwoord worden verkregen.:

$ 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

Het probleem kan ook op een andere manier worden opgelost.
Download MaxMind, pak het uit, en de volgende drie opdrachten lossen ons probleem ook op.

$ 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

Op de een of andere manier hebben we uiteindelijk de statistieken berekend, en de managers hebben de benodigde gegevens voor hun werk ontvangen!

3. Derde fase

De derde fase lijkt veel op de eerste - we moeten ook de warme lampservice repareren, maar het is allemaal complexer dan bij de eerste opdracht.

3.1. Interessante feiten

In de eerste 15 minuten vonden drie spelers de eerste sleutel, en na 2 uur en 20 minuten na de start van de fase voltooide onze winnaar de taak.

3.2. Opdracht

Je bent begonnen bij een bedrijf waar alle bedrijfsdocumenten op een interne Wiki-server worden opgeslagen. Vorig jaar bestelde een ingenieur 3 nieuwe schijven voor de server, naast één bestaande, met het argument dat voor de redundantiesysteem de schijven in bepaalde arrays moeten worden geplaatst. Helaas, enkele weken na de installatie vertrok de ingenieur op vakantie naar India en is niet teruggekeerd.

Enkele jaren functioneerde de server zonder storingen, maar een paar dagen geleden werd het netwerk van het bedrijf gehackt. Volgens de instructies heeft het beveiligingspersoneel de schijven uit de server gehaald en naar jou gestuurd. Tijdens het transport is één schijf definitief verloren gegaan.

De Wiki moet weer operationeel worden gemaakt; vooral is de inhoud van de wiki-pagina's van belang. Een bepaald stuk tekst dat op een van de pagina's stond, is het wachtwoord voor de 1C-server en is dringend nodig om deze te ontgrendelen.

Bovendien waren er ergens op de wiki-pagina's of op een andere plek wachtwoorden voor de logserver en de bewakingsserver, die ook gewenst zijn om te herstellen; zonder deze is het onmogelijk om het voorval te onderzoeken. Zoals altijd wachten we op een snelle oplossing van dit probleem!

3.3. Oplossing

1. We proberen om om de beurt op te starten vanaf de schijven die we hebben en overal krijgen we dezelfde boodschap:

Geen opstartbare media gevonden! Systeem stopgezet. 

We moeten ergens van opstarten. We kunnen weer opstarten vanaf een Live CD/DVD (Probleemoplossing -> Herstel). Bij het opstarten proberen we de opstartpartitie te vinden, maar we vinden deze niet en komen in de shell. We proberen uit te vinden wat er aan de hand is met de schijven. Het is bekend dat we er drie hebben. De tools voor dit zijn talrijker in versie 7 van CentOS, waar de commando's zijn blkid of lsblk, die alle informatie over de schijven laten zien.

Wat we doen:

$ ls /dev/sd*

Het is meteen duidelijk dat

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

We monteren sdb1; het blijkt de opstartpartitie van CentOS 6 te zijn.

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

Vanzelfsprekend gaan we naar de grub-partitie en vinden daar de eerste sleutel — James191955Gosling in een ongewoon bestand.

2. We bestuderen pvs en lvs, omdat we met LVM werken. We zien dat er 2 fysieke volumes moeten zijn, waarvan er één niet gevonden kan worden en klaagt over een verloren uid. We zien dat er 2 logische volumes moeten zijn: root en swap, waarbij root gedeeltelijk verloren is (de P-attribuut van volume). Het is jammer dat we het niet kunnen monteren; we hebben het heel erg nodig.

Er zijn nog 2 schijven, we bekijken ze, verzamelen en monteren:

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

We bekijken het en zien dat dit de opstartpartitie van CentOS 6 is en een duplicaat van wat we al hebben, en opnieuw is daar dezelfde sleutel — DennisBMacAlistairCRitchie! /dev/sdb1We kijken hoe het is samengesteld
$ mdadm --detail /dev/md127 /dev/md127.

We zien dat het uit 4 schijven had samengesteld moeten worden, maar is uit twee samengesteld

, die nummer 2 en 4 in het systeem moesten zijn. We veronderstellen dat uit /dev/sda1 en /dev/sdc1het ook een array kan worden samengesteld. Onduidelijk waarom er geen metadata op staat, maar dat is de verantwoordelijkheid van de beheerder die ergens in Goa is. We vermoeden dat hier RAID10 moet zijn, hoewel er opties zijn. We assembleren: /dev/sda2 en /dev/sdc2 $ mdadm --create --verbose /dev/md0 --assume-clean --level=10 --raid-devices=4 missing /dev/sda2 missing /dev/sdc2

We bekijken blkid, pvs, lvs. We ontdekken dat we het fysieke volume hebben samengesteld dat we eerder miste.

Смотрим blkid, pvs, lvs. Обнаруживаем, что собрали физический volume, которого нам ранее не хватало.

De lvroot werkt weer, we monteren deze, maar we activeren eerst de VG:

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

En daar is alles, inclusief de sleutel in de home-directory van root — /root/sweet.

3. We proberen ons server toch weer tot leven te brengen, zodat deze normaal kan opstarten. Alle logische volumes van onze /dev/md0 (waar alles zich bevond) slepen we naar /dev/sdb2, waar de server oorspronkelijk draaide.

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

We schakelen de server uit, verwijderen schijf 1 en 3, laten de tweede erin, en booten vanaf een Live CD/DVD in Rescue. We vinden de opstartpartitie en herstellen de opstartloader in grub:

root (hd0,0)
setup (hd0)

We halen de opstartdisk eruit en starten succesvol op, maar de site werkt niet.

4. Er zijn twee manieren om de site op te starten: Apache vanaf nul instellen of een vooraf geconfigureerde nginx met php-fpm gebruiken:

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

Tot slot moeten we MySQL opstarten:

$ /etc/init.d/mysqld start

Hij start niet en de oplossing ligt in /var/log/mysql. Zodra je het probleem met MySQL oplost, zal de site werken, op de homepage zal de sleutel staan — RichardGCCMatthewGNUStallman! Nu hebben we toegang tot 1C en kunnen de medewerkers hun salaris ontvangen. En jij hebt zoals altijd veel werk voor de boeg met het opzetten van infrastructuur en beveiliging in het bedrijf.

Daarnaast kunnen we nogmaals een lijst delen van boeken die ons en onze deelnemers hielpen bij de voorbereiding op het spel: linux.mail.ru/books.

Bedankt dat jullie bij ons waren! Blijf op de hoogte van de aankondigingen van de volgende spellen!

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster