Linux Quest. Gratulerer til vinnerne og fortell oss om løsningene på oppgavene

Linux Quest. Gratulerer til vinnerne og fortell oss om løsningene på oppgavene

25. mars åpnet vi påmelding til Linux Quest, dette er et spill for elskere og eksperter av Linux-operativsystemet. Litt statistikk: 1117 317 personer registrerte seg for spillet, 241 av dem fant minst én nøkkel, 123 fullførte oppgaven i den første fasen, 70 - den andre og XNUMX besto den tredje fasen. I dag er spillet vårt avsluttet, og vi gratulerer vinnerne våre!

  • Alexander Teldekov tok førsteplassen.
    Alexander sa til seg selv at han er den mest typiske systemadministratoren. Bor i Volgograd, har administrert forskjellige Unix-lignende systemer i omtrent tjue år. Jeg klarte å jobbe i internettleverandører, en bank og en systemintegrator. Nå jobber han eksternt i et lite selskap, og jobber med skyinfrastruktur for en stor utenlandsk kunde. Elsker å lese og høre på musikk. Om spillet sa Alexander at han likte spillet som helhet, han elsker slike oppgaver. Under et intervju hos et av selskapene jeg gjorde noe som ligner på Hackerrank, var det interessant.
  • Andreplass - Roman Suslov.
    En roman fra Moskva. Han er 37 år gammel. Jobber som Linux/Unix-ingeniør hos Jet Infosystems. På jobben må jeg administrere og feilsøke Linux/Unix-systemer + SAN. Interessene er varierte: Linux-systemer, programmering, reverse engineering, informasjonssikkerhet, Arduino. Om spillet bemerket Roman at han likte spillet totalt sett. «Jeg strakte litt på hjernen og tok en pause fra den grå arbeidshverdagen. 🙂 Jeg vil gjerne ha flere oppgaver, ellers før jeg rakk å smake på det, var spillet allerede over.»
  • For det tredje - alex3d.
    Alex bor i Moskva og jobber med programvareutvikling. "Takk for konkurransen, det var interessant å teste mine google-fu ferdigheter."

Også i rangeringen av de 10 beste spillerne:

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

Vi forstår at det er mange alternativer for å løse alle våre problemer; noen av de mulige løsningene er beskrevet nedenfor.

1. Første trinn

Vi kalte det "Er du virkelig en administrator?", siden oppgaven var ganske enkel - å fikse en varm lampetjeneste.

1.1. Interessante fakta:

To spillere fant den første nøkkelen de første 15 minuttene av spillet, og i den første timen hadde vi tre ledere som fullførte oppgaven.

1.2. Trening

Du gikk på jobb i et selskap hvor det i lang tid ikke var noen kompetent informasjonsteknologispesialist. Før du begynner å sette ting i orden, må du løse det brennende problemet som blokkerer arbeidet til kontoret.

Vaskedamen fanget opp strømkabelen til serverskapet med en mopp. Strømmen er gjenopprettet, men en svært viktig nettside fungerer fortsatt ikke. Nettsiden er viktig fordi selskapet er lite opptatt av informasjonssikkerhet, og på hovedsiden til denne finner du i klartekst administratorpassordet til administrerende direktørs datamaskin.

Her om dagen ble passordet endret, men alle glemte det nye, direktøren kan ikke jobbe. Det går rykter om at det var flere nøkler på denne maskinen som kunne hjelpe oss med å tyde sikkerhetskopien av regnskapsdokumentene.

Alle forventer en rask løsning på problemet!

1.3. Løsning

1. Først av alt må du endre root-passordet på den virtuelle maskinen for å få tilgang til det. Når vi starter, legger vi merke til at dette er Ubuntu 16.04 Server.

For å tilbakestille root-passordet, starter vi maskinen på nytt, når du laster inn, i det øyeblikket grub-menyen vises, går du til å redigere Ubuntu-elementet med "e" -knappen. Rediger linux-linjen, legg den til på slutten init=/bin/bash. Vi laster inn via Ctrl+x, vi får en bash. Monter roten på nytt med rw, endre passordet:

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

Ikke glem synkronisering, start på nytt.

2. Tilstanden sier at webserveren vår ikke fungerer, se:

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

Det vil si at Apache kjører, men svarer med kode 404. La oss se på konfigurasjonen:

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

Det er også en nøkkel her - StevenPaulSteveJobs.

Sjekker banen /usr/share/WordPress – det er ikke noe slikt, men det er det /usr/share/wordpress. Rediger konfigurasjonen og start Apache på nytt.

$ systemctl restart apache2

3. Prøv igjen, vi får feilmeldingen:

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

Databasen kjører ikke?

$ systemctl status mysql
Active: active (running)

Hva er i veien? Vi må finne ut av det. For å gjøre dette må du få tilgang til MySQL, som beskrevet i dokumentasjon. Et av dokumentasjonspunktene anbefaler at vi registrerer alternativet skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf. Det er også en nøkkel her - AugustaAdaKingByron.

Korrigering av brukerrettigheter 'wp'@'localhost'. Vi lanserer MySQL, gjør det tilgjengelig over nettverket, og kommenterer alternativet i konfigurasjonen skip-networking.

4. Etter disse trinnene starter webserveren, men siden fungerer fortsatt ikke 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 redigerer rettighetene til filen.

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

Vi oppdaterer siden, går inn på siden og finner nøkkelen - BjarneStroustrup! Vi fant alle tre nøklene, direktøren vår kan fungere, vi dekrypterte regnskapsfilene. Alle er fornøyde, og du har mye arbeid foran deg med å sette opp infrastruktur, backup og sikkerhet i selskapet.

2. Andre trinn

Det var nødvendig å løse problemet med å samle analyser. Alle elsker analyser - hvem bruker det, hvor og i hvilke mengder. Vi kom opp med en sak som alle ingeniører kan støte på i en eller annen form i livet.

2.1. Interessante fakta

En av våre spillere skrev inn riktig nøkkel i løpet av de første 10 minuttene av spillet, og i løpet av den første timen hadde vi en leder som fullførte oppgaven.

2.2. Trening

Du gikk på jobb i selskapet, ledere kom til deg og ba deg finne ut hvem det ble sendt brev til fra Afrika. Vi må bygge de 21 beste mottakeradressene basert på dem. De første bokstavene i mottakernes adresser er nøkkelen. En ting: e-postserveren som brevene ble sendt gjennom, laster ikke. Alle forventer en rask løsning på problemet!

2.3. Løsning

1. Serveren starter ikke opp på grunn av en ikke-eksisterende swap-partisjon i fstab, ved lasting prøver systemet å montere den og krasjer. Hvordan starte opp?

Last ned bildet, vi lastet ned CentOS 7, start opp fra Live CD/DVD (Feilsøking -> Rescue), monter systemet, rediger /etc/fstab. Vi finner umiddelbart den første nøkkelen - GottfriedWilhelm11646Leibniz!

Opprett bytte:

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

2. Som alltid er det ikke noe passord, du må endre root-passordet på den virtuelle maskinen. Dette gjorde vi allerede i den første oppgaven. Vi endrer og logger på serveren, men den går umiddelbart til omstart. Serveren er overbelastet med en slik hastighet at du ikke engang har tid til å se nøye på alle loggene. Hvordan forstå hva som skjer?

Igjen starter vi opp fra livecd, studerer systemloggene nøye og, i tilfelle, ser på cron, siden en slik periodisitet. Der finner vi problemet og den andre nøkkelen - Alan1912MathisonTuring!

Trenger inn /etc/crontab slette eller kommentere linjen echo b > /proc/sysrq-trigger.

3. Etter som serveren har lastet, og du kan fullføre ledernes oppgave: "Hva er adressene i Afrika?" Denne informasjonen er generelt tilgjengelig for allmennheten. Du kan finne denne informasjonen på Internett ved å bruke uttrykkene "ip-adresse afrika", "geoip-database". For å løse problemet kan du bruke fritt tilgjengelige adressedistribusjonsdatabaser (geoip). Vi brukte databasen som standard MaxMind GeoLite2, tilgjengelig under en Creative Commons Attribution-ShareAlike 4.0-lisens.

La oss prøve å løse problemet vårt ved å bruke bare Linux-systemverktøy, men generelt kan det løses på et stort antall måter: ved hjelp av tekstfiltreringsverktøy og bruk av skript på forskjellige programmeringsspråk.

Til å begynne med får vi ganske enkelt "avsender-mottaker-IP"-parene fra e-postloggen /var/log/maillog (la oss bygge en tabell over e-postmottakere - avsender IP). Dette kan gjøres med følgende 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

Og før vi fortsetter med å kompilere en database med afrikanske adresser, la oss ta en titt på de beste IP-adressene til avsendere.

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

Blant dem alle skiller de tre første mottakerne fra toppen seg klart ut når det gjelder antall brev. Hvis du grep IP-adressene til avsendere som sendte til adresser fra denne topp 3, vil du legge merke til en klar overvekt av visse nettverk:

$ 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 fleste av nettverkene 105/8, 41/8, 196/8,197/8 er tildelt AFRINIC - en av de fem regionale Internett-registratorene som distribuerer Internett-ressurser. AFRINIC distribuerer adresserom over hele Afrika. Og 41/8 refererer til AFRINIC fullstendig.

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

Dermed ligger svaret på problemet faktisk i selve 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]

På dette stadiet får vi strengen "LinuxBenedictTorvadst".

Riktig nøkkel: "LinusBenedictTorvalds".

Den resulterende strengen inneholder en skrivefeil i forhold til riktig nøkkel i de siste 3 tegnene. Dette skyldes det faktum at nettverkene vi valgte ikke er helt dedikert til afrikanske land og måten e-poster distribueres mellom IP-adresser i loggen vår.

Med tilstrekkelig spesifikasjon av de største nettverkene som er tildelt afrikanske land, kan et nøyaktig svar fås:

$ 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 også løses på en annen måte.
Last ned MaxMind, pakk den ut, og de neste tre kommandoene løser også problemet vårt.

$ 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å en eller annen måte regnet vi etter hvert ut statistikken, og lederne fikk dataene de trengte for å jobbe!

3. Tredje trinn

Den tredje fasen ligner litt på den første - du må også fikse den varme lampetjenesten, men alt er mer komplisert enn i den første oppgaven.

3.1. Interessante fakta

I løpet av de første 15 minuttene fant tre spillere den første nøkkelen; 2 timer og 20 minutter etter starten av etappen fullførte vinneren vår oppgaven.

3.2. Trening

Du gikk på jobb for et selskap hvor alle selskapets dokumenter er lagret på en intern Wiki-server. I fjor bestilte en ingeniør 3 nye disker til serveren i tillegg til én eksisterende, og argumenterte for at for at systemet skulle være feiltolerant, måtte diskene plasseres i en slags arrays. Dessverre dro ingeniøren noen uker etter installasjonen på ferie til India og kom ikke tilbake.

Serveren fungerte uten feil i flere år, men for et par dager siden ble selskapets nettverk hacket. I følge instruksjonene fjernet sikkerhetspersonalet diskene fra serveren og sendte dem til deg. Under transport gikk en disk uopprettelig tapt.

Vi må gjenopprette funksjonaliteten til Wiki; først og fremst er vi interessert i innholdet på wiki-sidene. Et bestemt stykke tekst som var på en av sidene i denne wikien er passordet for 1C-serveren og er påtrengende nødvendig for å låse den opp.

I tillegg, et sted på wiki-sidene eller et annet sted var det passord for loggserveren og videoovervåkingsserveren, som også ville være ønskelig å gjenopprette; uten dem er etterforskning av hendelsen umulig. Som alltid forventer vi en rask løsning på problemet!

3.3. Løsning

1. Vi prøver å starte opp en etter en fra diskene vi har, og overalt får vi den samme meldingen:

No bootable medium found! System halted 

Du må starte opp fra noe. Oppstart fra en Live CD/DVD (Feilsøking -> Rescue) hjelper igjen. Når vi laster, prøver vi å finne oppstartspartisjonen, vi finner den ikke, vi havner i skallet. Vi prøver å studere hva og hvordan vi skal gjøre med disker. Det er kjent at det er tre av dem. Det er flere verktøy for dette i den 7. versjonen av CentOS, hvor det er kommandoer blkid eller lsblk, som viser oss all informasjon om diskene.

Hvordan og hva vi gjør:

$ ls /dev/sd*

Det er umiddelbart tydelig at

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

Vi monterer sdb1, det er tydelig at dette er oppstartspartisjonen til CentOS 6.

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

Tydeligvis går vi til grub-seksjonen og finner den første nøkkelen der - James191955Gosling i en uvanlig fil.

2. Vi studerer pvs og lvs, siden vi jobber med LVM. Vi ser at det skal være 2 fysiske bind, det ene er ikke lokalisert og klager på tapt uid. Vi ser at det skal være 2 logiske volumer: root og swap, mens root er delvis tapt (P-attributten til volum). Det er ikke mulig å montere, noe som er synd! Vi trenger ham virkelig.

Det er 2 disker til, vi ser på dem, monterer og monterer dem:

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

Vi ser, vi kan se at dette er oppstartspartisjonen til CentOS 6 og et duplikat av det som allerede er på /dev/sdb1, og her igjen den samme nøkkelen - DennisBMacAlistairCRitchie!
La oss se hvordan den er satt sammen /dev/md127.

$ mdadm --detail /dev/md127

Vi ser at den burde vært satt sammen av 4 disker, men den ble satt sammen av to /dev/sda1 и /dev/sdc1, de skulle ha vært nummer 2 og 4 i systemet. Vi antar at fra /dev/sda2 и /dev/sdc2 Du kan også samle en matrise. Det er ikke klart hvorfor det ikke er metadata på dem, men dette er på samvittigheten til administratoren, som er et sted i Goa. Vi antar at det skal være RAID10, selv om det finnes alternativer. Vi samler inn:

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

Vi ser på blkid, pvs, lvs. Vi oppdager at vi har samlet et fysisk volum som vi tidligere manglet.

lvroot ble umiddelbart reparert, vi monterer den, men først aktiverer VG:

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

Og alt er der, inkludert nøkkelen i rothjemmekatalogen - /root/sweet.

3. Vi prøver fortsatt å gjenopplive serveren vår slik at den starter normalt. Alle logiske bind fra vår /dev/md0 (hvor vi fant alt) dra den til /dev/sdb2, hvor hele serveren i utgangspunktet fungerte.

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

Vi slår av serveren, fjerner disk 1 og 3, lar den andre stå, starter opp fra Live CD/DVD til Rescue. Finn oppstartspartisjonen og gjenopprett oppstartslasteren i grub:

root (hd0,0)
setup (hd0)

Vi river av oppstartsdisken og laster inn, men siden fungerer ikke.

4. Det er to alternativer for å starte et nettsted: konfigurer Apache fra bunnen av eller bruk nginx med php-fpm allerede konfigurert på forhånd:

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

Til slutt må du starte MySQL:

$ /etc/init.d/mysqld start

Den starter ikke, og svaret ligger i /var/log/mysql. Så snart du løser problemet med MySQL, vil siden fungere, på hovedsiden vil det være en nøkkel - RichardGCCMatthewGNUStallman! Nå har vi tilgang til 1C, og ansatte vil kunne få lønn. Og som alltid har du mye arbeid foran deg for å etablere infrastruktur og sikkerhet i selskapet.

Vi kan også igjen dele en liste over bøker som hjalp oss og deltakerne våre med å forberede seg til spillet: linux.mail.ru/books.

Takk for at du er med oss! Følg med for kunngjøringer om de neste spillene!

Kilde: www.habr.com

Legg til en kommentar