Linux-zoektocht. Felicitaties aan de winnaars en vertel ons over de oplossingen voor de taken

Linux-zoektocht. Felicitaties aan de winnaars en vertel ons over de oplossingen voor de taken

Op 25 maart hebben we de inschrijving geopend voor Linux-zoektocht, dit is een spel voor liefhebbers en experts van het Linux-besturingssysteem. Enkele statistieken: 1117 mensen schreven zich in voor het spel, 317 van hen vonden minstens één sleutel, 241 voltooiden met succes de taak van de eerste fase, 123 voltooiden de tweede fase en 70 slaagden voor de derde fase. Vandaag is ons spel ten einde en feliciteren wij onze winnaars!

  • Alexander Teldekov behaalde de eerste plaats.
    Alexander zei tegen zichzelf dat hij de meest typische systeembeheerder is. Woont in Volgograd en beheert al zo'n twintig jaar verschillende Unix-achtige systemen. Ik heb kunnen werken bij internetproviders, een bank en een systeemintegrator. Nu werkt hij op afstand in een klein bedrijf en werkt hij aan de cloudinfrastructuur voor een grote buitenlandse klant. Houdt van lezen en luisteren naar muziek. Over het spel zei Alexander dat hij het spel als geheel leuk vond, hij houdt van zulke taken. Tijdens een interview bij een van de bedrijven deed ik iets vergelijkbaars met Hackerrank, het was interessant.
  • Tweede plaats - Roman Suslov.
    Een roman uit Moskou. Hij is 37 jaar oud. Werkt als Linux/Unix-ingenieur bij Jet Infosystems. Op het werk moet ik Linux/Unix-systemen + SAN beheren en problemen oplossen. De interesses zijn gevarieerd: Linux-systemen, programmeren, reverse engineering, informatiebeveiliging, Arduino. Over het spel Roman merkte op dat hij het spel over het algemeen leuk vond. “Ik strekte mijn hersenen een beetje uit en nam een ​​pauze van het grijze dagelijkse leven van het dagelijkse werk. 🙂 Ik zou graag meer taken willen hebben, anders was het spel al voorbij voordat ik tijd had om ervan te proeven.
  • Derde - alex3d.
    Alex woont in Moskou en werkt in softwareontwikkeling. “Bedankt voor de wedstrijd, het was interessant om mijn google-fu-vaardigheden te testen.”

Ook in de ranglijst van de 10 beste spelers:

  • Jevgeni Saldajev
  • Markel Mokhnachevsky
  • Konstantin Konosov
  • Pavel Sergejev
  • Vladimir Bovaev
  • Ivan Boebnov
  • Pavlo Klets

We begrijpen dat er veel opties zijn om al onze problemen op te lossen; enkele van de mogelijke oplossingen worden hieronder beschreven.

1. Eerste fase

We noemden het "Ben je echt een beheerder?", Omdat de taak vrij eenvoudig was: een warme lampenservice repareren.

1.1. Interessante feiten:

Twee spelers vonden de eerste sleutel in de eerste 15 minuten van de wedstrijd, en in het eerste uur hadden we drie leiders die de taak voltooiden.

1.2. Oefening

Je ging werken in een bedrijf waar lange tijd geen competente informatietechnologiespecialist bestond. Voordat u de zaken op orde gaat brengen, moet u het brandende probleem oplossen dat het werk op kantoor blokkeert.

De schoonmaakster ving de stroomkabel van de serverkast op met een dweil. De stroom is hersteld, maar een zeer belangrijke website werkt nog steeds niet. De website is belangrijk omdat het bedrijf zich weinig zorgen maakt over informatiebeveiliging, en op de hoofdpagina hiervan vindt u in duidelijke tekst het beheerderswachtwoord voor de computer van de CEO.

Onlangs is het wachtwoord gewijzigd, maar iedereen is het nieuwe vergeten, de regisseur kan niet werken. Er gaan geruchten dat er meer sleutels op deze machine zaten die ons konden helpen de reservekopie van de boekhouddocumenten te ontcijferen.

Iedereen verwacht een snelle oplossing van het probleem!

1.3. Oplossing

1. Allereerst moet u het rootwachtwoord op de virtuele machine wijzigen om er toegang toe te krijgen. Bij het starten merken we dat dit Ubuntu 16.04 Server is.

Om het root-wachtwoord opnieuw in te stellen, starten we de machine opnieuw op. Tijdens het laden, op het moment dat het grub-menu wordt weergegeven, gaat u naar het Ubuntu-item bewerken met de knop "e". Bewerk de regel Linux, voeg deze toe aan het einde init=/bin/bash. We laden via Ctrl+x, we krijgen een bash. Hermonteer de root met rw, wijzig het wachtwoord:

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

Vergeet de synchronisatie niet, start opnieuw op.

2. De voorwaarde zegt dat onze webserver niet werkt, kijk:

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

Dat wil zeggen dat Apache actief is, maar reageert met code 404. Laten we naar de configuratie kijken:

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

Er is hier ook een sleutel: StevenPaulSteveJobs.

Het pad controleren /usr/share/WordPress - zoiets bestaat niet, maar het is er wel /usr/share/wordpress. Bewerk de configuratie en start Apache opnieuw.

$ systemctl restart apache2

3. Probeer het opnieuw, we krijgen de foutmelding:

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

De database is niet actief?

$ systemctl status mysql
Active: active (running)

Wat is er aan de hand? We moeten het uitzoeken. Om dit te doen, moet u toegang krijgen tot MySQL, zoals beschreven in documentatie. Een van de documentatiepunten raadt aan om de optie te registreren skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf. Er is hier ook een sleutel: AugustaAdaKingByron.

Het corrigeren van gebruikersrechten 'wp'@'localhost'. We starten MySQL, maken het toegankelijk via het netwerk en geven commentaar op de optie in de configuratie skip-networking.

4. Na deze stappen start de webserver, maar de site werkt nog steeds niet

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

Wij bewerken de rechten op het bestand.

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

We vernieuwen de pagina, gaan naar de site en vinden de sleutel - BjarneStroustrup! We hebben alle drie de sleutels gevonden, onze directeur kan werken, we hebben de boekhoudbestanden gedecodeerd. Iedereen is blij en er is veel werk aan de winkel om de infrastructuur, back-ups en beveiliging in het bedrijf op te zetten.

2. Tweede fase

Het was noodzakelijk om het probleem van het verzamelen van analyses op te lossen. Iedereen houdt van analytics: wie gebruikt het, waar en in welke hoeveelheden. We hebben een casus bedacht die alle ingenieurs in een of andere vorm in het leven tegen kunnen komen.

2.1. Interessante feiten

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

2.2. Oefening

Je ging bij het bedrijf werken, managers kwamen naar je toe en vroegen je uit te vinden aan wie brieven vanuit Afrika werden gestuurd. Op basis daarvan moeten we de top 21 ontvangersadressen samenstellen. De eerste letters van de adressen van de ontvangers zijn de sleutel. Eén ding: de mailserver waarlangs de brieven zijn verzonden, laadt niet. Iedereen verwacht een snelle oplossing van het probleem!

2.3. Oplossing

1. De server start niet op vanwege een niet-bestaande swappartitie in fstab; tijdens het laden probeert het systeem deze te mounten en crasht. Hoe opstarten?

Download de image, we hebben CentOS 7 gedownload, start op vanaf Live CD/DVD (Problemen oplossen -> Rescue), mount het systeem, bewerk /etc/fstab. We vinden meteen de eerste sleutel - GottfriedWilhelm11646Leibniz!

Wissel maken:

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

2. Zoals altijd is er geen wachtwoord, u moet het rootwachtwoord op de virtuele machine wijzigen. Dit hebben we al gedaan bij de eerste opdracht. We veranderen en loggen met succes in op de server, maar deze wordt onmiddellijk opnieuw opgestart. De server is zo snel overbelast dat je niet eens de tijd hebt om alle logs aandachtig te bekijken. Hoe te begrijpen wat er gebeurt?

We starten opnieuw op vanaf de livecd, bestuderen zorgvuldig de systeemlogboeken en kijken, voor het geval dat, in de cron, aangezien dit een periodiciteit is. Daar vinden we het probleem en de tweede sleutel - Alan1912MathisonTuring!

Binnen nodig /etc/crontab verwijder of becommentarieer de regel echo b > /proc/sysrq-trigger.

3. Hierna is de server geladen en kunt u de taak van de beheerder voltooien: “Wat zijn de adressen in Afrika?” Deze informatie is algemeen beschikbaar voor het publiek. U kunt deze informatie op internet vinden met de woorden “ip-adres afrika”, “geoip-database”. Om het probleem op te lossen, kunt u vrij beschikbare adresdistributiedatabases (geoip) gebruiken. Wij gebruikten de database als standaard MaxMind GeoLite2, beschikbaar onder een Creative Commons Attribution-ShareAlike 4.0-licentie.

Laten we proberen ons probleem op te lossen met alleen Linux-systeemhulpprogramma's, maar over het algemeen kan het op een groot aantal manieren worden opgelost: met behulp van tekstfilterhulpprogramma's en met behulp van scripts in verschillende programmeertalen.

Om te beginnen halen we eenvoudigweg de ‘afzender-ontvanger-IP’-paren uit het e-maillogboek /var/log/maillog (laten we een tabel met e-mailontvangers maken - afzender-IP). Dit kan gedaan worden met het volgende commando:

$ 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 doorgaan met het samenstellen van een database met Afrikaanse adressen, laten we eens kijken naar de belangrijkste IP-adressen van afzenders.

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

Van alle ontvangers vallen de eerste drie ontvangers van boven duidelijk op qua aantal brieven. Als je de IP-adressen bekijkt van de afzenders die naar adressen uit deze top 3 hebben verzonden, zul je een duidelijk overwicht van bepaalde netwerken opmerken:

$ 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 meeste netwerken 105/8, 41/8, 196/8,197/8 zijn toegewezen aan AFRINIC - een van de vijf regionale internetregistrars die internetbronnen distribueren. AFRINIC verspreidt adresruimte door heel Afrika. En 41/8 verwijst volledig naar AFRINIC.

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

Het antwoord op het probleem ligt dus in feite 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 [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]

In dit stadium krijgen we de string “LinuxBenedictTorvadst”.

Juiste sleutel: "LinusBenedictTorvalds".

De resulterende string bevat een typefout met betrekking tot de juiste sleutel in de laatste 3 tekens. Dit komt door het feit dat de netwerken die we hebben geselecteerd niet geheel gewijd zijn aan Afrikaanse landen en aan de manier waarop e-mails worden verdeeld over IP-adressen in ons logboek.

Met voldoende specificatie van de grootste netwerken die aan Afrikaanse landen 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 [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]

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

$ 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

Op de een of andere manier hebben we uiteindelijk de statistieken berekend en ontvingen de managers de gegevens die ze nodig hadden om te werken!

3. Derde fase:

De derde fase lijkt enigszins op de eerste: je moet ook de warme lampservice repareren, maar alles is ingewikkelder dan bij de eerste taak.

3.1. Interessante feiten

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

3.2. Oefening

Je ging werken bij een bedrijf waar alle bedrijfsdocumenten op een interne Wiki-server staan. Vorig jaar bestelde een ingenieur drie nieuwe schijven voor de server naast één bestaande, met het argument dat om het systeem fouttolerant te maken, de schijven in een soort arrays moesten worden geplaatst. Helaas ging de ingenieur een paar weken na hun installatie op vakantie naar India en keerde niet terug.

De server werkte een aantal jaren probleemloos, maar een paar dagen geleden werd het netwerk van het bedrijf gehackt. Volgens de instructies heeft het beveiligingspersoneel de schijven van de server verwijderd en naar u gestuurd. Tijdens het transport ging één schijf onherstelbaar verloren.

We moeten de functionaliteit van Wiki herstellen; allereerst zijn we geïnteresseerd in de inhoud van de wikipagina's. Een bepaald stuk tekst dat op een van de pagina's van deze wiki stond, is het wachtwoord voor de 1C-server en is dringend nodig om deze te ontgrendelen.

Bovendien waren er ergens op de wikipagina's of op een andere plaats wachtwoorden voor de logserver en de videobewakingsserver, die ook wenselijk zouden zijn om te herstellen; zonder deze is onderzoek naar het incident onmogelijk. Zoals altijd verwachten wij een snelle oplossing van het probleem!

3.3. Oplossing

1. We proberen één voor één op te starten vanaf de schijven die we hebben en overal krijgen we dezelfde melding:

No bootable medium found! System halted 

Je moet ergens vanaf opstarten. Opstarten vanaf een Live CD/DVD (Problemen oplossen -> Rescue) helpt opnieuw. Bij het laden proberen we de opstartpartitie te vinden, we kunnen deze niet vinden, we komen in de shell terecht. We proberen te bestuderen wat en hoe we met schijven moeten doen. Het is bekend dat er drie zijn. Er zijn meer tools hiervoor in de 7e versie van CentOS, waar opdrachten zijn blkid of lsblk, die ons alle informatie over de schijven laat zien.

Hoe en wat wij doen:

$ ls /dev/sd*

Het is meteen duidelijk dat

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

We mounten sdb1, het is duidelijk dat dit de opstartpartitie van CentOS 6 is.

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

Uiteraard gaan we naar de grub-sectie en vinden daar de eerste sleutel - James191955Gosling in een ongebruikelijk bestand.

2. We bestuderen pvs en lvs, omdat we met LVM werken. We zien dat er twee fysieke volumes zouden moeten zijn, één is niet gelokaliseerd en klaagt over verloren vloeistof. We zien dat er twee logische volumes zouden moeten zijn: root en swap, terwijl root gedeeltelijk verloren is (het P-attribuut van volume). Monteren is niet mogelijk, jammer! We hebben hem echt nodig.

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

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

We kijken, we kunnen zien dat dit de opstartpartitie is van CentOS 6 en een duplicaat van wat er al op staat /dev/sdb1, en hier opnieuw dezelfde sleutel - DennisBMacAlistairCRitchie!
Laten we eens kijken hoe het in elkaar zit /dev/md127.

$ mdadm --detail /dev/md127

We zien dat het uit 4 schijven had moeten worden samengesteld, maar het werd uit twee samengesteld /dev/sda1 и /dev/sdc1, ze hadden nummer 2 en 4 in het systeem moeten zijn. Wij gaan ervan uit dat vanaf /dev/sda2 и /dev/sdc2 Je kunt ook een array verzamelen. Het is niet duidelijk waarom er geen metadata over zijn, maar dit is op het geweten van de beheerder, die zich ergens in Goa bevindt. We gaan ervan uit dat er RAID10 moet zijn, al zijn er opties. We verzamelen:

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

We kijken naar blkid, pvs, lvs. We ontdekken dat we een fysiek volume hebben verzameld dat we eerder ontbeerden.

lvroot werd onmiddellijk gerepareerd, we mounten het, maar activeren eerst VG:

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

En alles is aanwezig, inclusief de sleutel in de root-thuismap - /root/sweet.

3. We proberen nog steeds onze server nieuw leven in te blazen, zodat deze normaal start. Alle logische volumes van onze /dev/md0 (waar we alles hebben gevonden) sleep het naar /dev/sdb2, waar aanvankelijk de hele server werkte.

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

We zetten de server uit, verwijderen schijven 1 en 3, laten de tweede staan ​​en starten op vanaf de Live CD/DVD in Rescue. Zoek de opstartpartitie en herstel de bootloader in grub:

root (hd0,0)
setup (hd0)

We scheuren de opstartschijf af en laden met succes, maar de site werkt niet.

4. Er zijn twee opties om een ​​website te starten: Apache helemaal opnieuw configureren of nginx gebruiken met php-fpm al vooraf geconfigureerd:

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

Ten slotte moet u MySQL starten:

$ /etc/init.d/mysqld start

Het wil niet starten, en het antwoord ligt in /var/log/mysql. Zodra je het probleem met MySQL oplost, zal de site werken, op de hoofdpagina staat een sleutel - RichardGCCMatthewGNUStallman! Nu hebben we toegang tot 1C en kunnen werknemers hun salaris ontvangen. En zoals altijd heeft u veel werk voor de boeg om de infrastructuur en veiligheid in het bedrijf tot stand te brengen.

We kunnen ook nogmaals een lijst met boeken delen die ons en onze deelnemers hebben geholpen bij de voorbereiding op het spel: linux.mail.ru/books.

Bedankt dat je bij ons bent! Houd ons in de gaten voor aankondigingen van de volgende games!

Bron: www.habr.com

Voeg een reactie