Linux Quest. Tillykke til vinderne og fortæller om løsningene på opgaverne

Linux Quest. Tillykke til vinderne og fortæller om løsningene på opgaverne

Den 25. marts åbnede vi tilmeldingen til Linux Quest, et spil for entusiaster og eksperter inden for Linux-operativsystemet. Nogle statistikker: 1117 personer tilmeldte sig spillet, hvoraf 317 fandt mindst én nøgle, 241 klarede opgaven i første fase, 123 i anden fase, og 70 fuldførte den tredje fase. I dag er vores spil afsluttet, og vi congratulerer vores vindere!

  • Første plads blev vundet af Alexander Teldikov.
    Alexander sagde om sig selv, at han er den mest typiske systemadministrator. Han bor i Volgograd og har administreret forskellige Unix-lignende systemer i cirka tyve år. Han har arbejdet i internetudbydere, banker og systemintegratorer. I øjeblikket arbejder han remote for et lille firma, hvor han håndterer cloud-infrastruktur for en stor udenlandsk kunde. Han elsker at læse og lytte til musik. Om spillet sagde Alexander, at han generelt kunne lide det, og han elsker sådan nogle opgaver. I et af virksomhederne deltog han i en lignende aktivitet som Hackerrank, hvilket var interessant.
  • Anden plads — Roman Suslov.
    Roman er fra Moskva. Han er 37 år gammel. Han arbejder som Linux/Unix-ingeniør hos 'Infosystemer Jet'. I sit arbejde er han nødt til at administrere og fejlfinde Linux/Unix-systemer + SAN. Hans interesser er meget varierede: Linux-systemer, programmering, reverse engineering, informationssikkerhed, Arduino. Om spillet bemærkede Roman, at han generelt kunne lide det. 'Jeg fik rørt mine hjerneceller lidt og kunne flygte lidt fra de grå hverdage. 🙂 Jeg ville gerne have haft flere opgaver, for jeg var lige begyndt at finde rytmen, da spillet allerede var slut.'
  • Tredje — alex3d.
    Alex bor i Moskva og arbejder med softwareudvikling. 'Tak for konkurrencen, det var interessant at teste mine google-fu-færdigheder.'

Også i top 10 spillere:

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

Vi forstår, at der er mange måder at løse alle vores opgaver på. Nedenfor beskrives nogle af de mulige løsninger.

1. Første fase

Vi kaldte den 'Er du virkelig administrator?', da opgaven var ret simpel — at reparere en varm, hyggelig service.

1.1. Interesante fakta:

To spillere fandt den første nøgle inden for de første 15 minutter af spillet, og inden for den første time havde vi tre ledere, som klarede opgaven.

1.2. Opgave

Du er begyndt at arbejde i en virksomhed, hvor der i lang tid ikke har været en kompetent specialist inden for informationsteknologi. Før du kan begynde at få orden, skal du løse et presserende problem, der blokerer for kontorets drift.

Rengøringspersonen ramte serverkabinettets strømforbindelse med moppe. Strømmen er genoprettet, men en meget vigtig hjemmeside fungerer stadig ikke. Hjemmesiden er vigtig, fordi virksomheden ikke er særlig bekymret for informationssikkerhed, og på forsiden kan man finde administratorens adgangskode til direktørens computer, offentligt tilgængeligt.

For nylig blev adgangskoden ændret, men den nye er blevet glemt, og direktøren kan ikke arbejde. Der er rygter om, at der på denne maskine var yderligere nøgler, som kan hjælpe os med at dekryptere backupen af regnskabsdokumenterne.

Alle venter på en hurtig løsning af problemet!

1.3. Løsninger

1. Først og fremmest skal vi ændre root-adgangskoden på den virtuelle maskine for at få adgang til den. Ved opstart bemærker vi, at det er Ubuntu 16.04 Server.

For at nulstille root-adgangskoden genstarter vi maskinen; ved opstart, når grub-menuen vises, går vi ind i redigering af Ubuntu-punktet ved at trykke på 'e'. Vi redigerer linjen linux og tilføjer til slutningen init=/bin/bash. Vi starter op med Ctrl+x, og får bash. Vi remonterer roden som rw, ændrer adgangskoden:

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

Glem ikke at køre sync og genstarte.

2. Ifølge betingelserne fungerer vores webserver ikke, lad os tjekke:

$ curl localhost
Not Found
Det ønskede URL / blev ikke fundet på denne server.
Apache/2.4.18 

Det vil sige, at Apache er startet, men svarer med en 404-kode. Lad os se på konfigurationen:

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

Her findes nøglen – StevenPaulSteveJobs.

Vi tjekker stien /usr/share/WordPress – en sådan findes ikke, men der er /usr/share/wordpress. Vi retter konfigurationen og genstarter Apache.

$ systemctl restart apache2

3. Vi prøver igen og får en fejl:

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

Database er ikke startet?

$ systemctl status mysql
Active: active (running)

Hvad er der galt? Vi skal finde ud af det. For at gøre det skal vi få adgang til MySQL, som beskrevet i dokumentationen. Et af punkterne i dokumentationen anbefaler os at tilføje indstillingen skip-grant-tables i /etc/mysql/mysql.conf.d/mysqld.cnf. Her findes også en nøgle – AugustaAdaKingByron.

Vi justerer rettighederne for brugeren 'wp'@'localhost'. Vi starter MySQL, gør det tilgængeligt over nettet ved at kommentere indstillingen i konfigurationen skip-networking.

4. Efter de udførte handlinger starter webserveren, men hjemmesiden fungerer stadig ikke, da

Advarsel: require_once(\/usr\/share\/wordpress\/wp-content\/themes\/twentysixteen\/footer.php): mislykkedes at åbne stream: Adgang nægtet i \usr\share\wordpress\wp-includes\template.php på linje 562

Ændre filrettigheder.

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

Vi opdaterer siden, går ind på hjemmesiden og finder nøglen — BjarneStroustrup! Vi har fundet alle tre nøgler, vores direktør kan arbejde, vi har dekrypteret regnskabsfilerne. Alle er glade, og du har en masse arbejde foran dig med at etablere infrastruktur, backups og sikkerhed i virksomheden.

2. Andet trin

Det var nødvendigt at løse opgaven om at indsamle analyser. Alle elsker analyser — hvem og hvorfra og i hvilke mængder de besøger. Vi fandt på et tilfælde, som alle ingeniører kan støde på i en eller anden form i livet.

2.1. Interessante fakta

En af vores spillere indtastede den rigtige nøgle inden for de første 10 minutter af spillet, og inden for den første time havde vi en leder, der klarede opgaven.

2.2. Opgave

Du er startet i en virksomhed, ledere har bedt dig om at finde, hvem der har modtaget e-mails fra Afrika. Du skal opbygge en top-21 liste over modtagere. Første bogstaver i adresserne til modtagerne er nøglen. Der er et men: postserveren, som beskederne blev sendt gennem, loader ikke. Alle venter på en hurtig løsning!

2.3. Løsning

1. Serveren kan ikke loade på grund af den ikke-eksisterende swap-partition i fstab; ved opstart forsøger systemet at montere den og falder ned. Hvordan kan man starte op?

Vi downloader imaget; vi har downloadet CentOS 7, booter fra Live CD\/DVD (Fejlfinding -> Redningsfunktion), monterer systemet, ændrer /etc/fstab. Her finder vi den første nøgle — GottfriedWilhelm11646Leibniz!

Oprettelse af swap:

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

2. Som altid er der ingen adgangskode, vi skal ændre root-adgangskoden på den virtuelle maskine. Vi har allerede gjort dette i den første opgave. Vi ændrer og logge ind på serveren, men den genstarter med det samme. Serveren genstarter så hurtigt, at vi knap nok får set alle logs grundigt. Hvordan kan man forstå, hvad der sker?

Vi booter igen fra livecd, undersøger systemloggen grundigt og tjekker ligeledes cron, da der er en sådan periodicitet. Der finder vi problemet og den anden nøgle — Alan1912MathisonTuring!

Det er nødvendigt at /etc/crontab fjerne eller kommentere linjen echo b > \/proc\/sysrq-trigger.

3. Når serveren er startet op, kan vi udføre opgaven fra ledelsen: "Hvilke adresser i Afrika?" Disse oplysninger er generelt offentligt tilgængelige. Du kan finde disse oplysninger på internettet ved hjælp af søgeord som "ip address africa" eller "geoip database". For at løse opgaven kan man bruge frit tilgængelige databaser over adressefordeling (geoip). Vi har brugt databasen som reference. MaxMind GeoLite2, der er tilgængelig under Creative Commons Attribution-ShareAlike 4.0 licensen.

Lad os prøve at løse vores opgave ved kun at bruge systemværktøjer på Linux, men generelt kan det løses på mange måder: ved hjælp af tekstbehandlingsværktøjer og ved hjælp af scripts på forskellige programmeringssprog.

For at starte med, lad os blot få parrene "afsender IP - modtager" fra e-mailloggen /var/log/maillog (vi opretter en tabel over modtager-e-mails - afsenderens IP). Dette kan gø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 fortsætter med at oprette databasen over adresser i Afrika, lad os tage et kig på de mest dominerende IP-adresser blandt afsenderne.

$ 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

Blandt alle skiller de tre første modtagere i top-30 sig ud efter antal e-mails sendt. Hvis vi grep'er IP-adresserne fra afsendere, der har sendt til adresserne i denne top-3, kan vi bemærke en klar overvægt af bestemte netværk:

$ 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

Størstedelen af netværkene 105/8, 41/8, 196/8, 197/8 er tildelt AFRINIC — en af de fem regionale internetregistratorer, der håndterer fordelingen af internetressourcer. AFRINIC fordeler adresseområdet inden for Afrika. Og 41/8 tilhører helt og holdent AFRINIC.

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

Dermed er svaret på opgaven faktisk til stede 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 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

På dette stadium får vi strengen «LinuxBenedictTorvadst».

Den korrekte nøgle: «LinusBenedictTorvalds».

Den modtagne streng indeholder en tastefejl i forhold til den korrekte nøgle i de sidste 3 tegn. Dette skyldes, at de netværk, vi har valgt, ikke er fuldt ud tildelt lande i Afrika, samt hvordan e-mails er fordelt over IP-adresser i vores log.

Ved tilstrækkelig præcisering af de største netværk tildelt lande i Afrika kan man få et præcist svar.:

$ 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

Opgaven kan også løses på en anden måde.
Download MaxMind, udpakkes, og de følgende tre kommandoer løser også vores problem.

$ 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

På en eller anden måde har vi i sidste ende opgjort statistikken, og lederne fik de nødvendige data til deres arbejde!

3. Tredje fase

Den tredje fase ligner på en måde den første – man skal også reparere den varme, hyggelige service, men alt er mere kompleks end i den første opgave.

3.1. Interessante fakta

I de første 15 minutter fandt tre spillere den første nøgle; 2 timer og 20 minutter efter scenens begyndelse klarede vores vinder opgaven.

3.2. Opgave

Du er begyndt at arbejde i en virksomhed, hvor alle virksomhedens dokumenter opbevares på en intern Wiki-server. Sidste år bestilte en ingeniør 3 nye harddiske til serveren ud over én eksisterende, idet han argumenterede for, at for systemets fejlfindingsmodstand skulle harddiskene placeres i nogle arrays. Desværre tog ingeniøren på ferie til Indien nogle uger efter installationen og dukkede ikke op igen.

I flere år har serveren fungeret uden problemer, men for et par dage siden blev virksomhedens netværk hacket. I henhold til instrukserne har sikkerhedspersonalet fjernet harddiskene fra serveren og sendt dem til dig. Under transporten gik en harddisk tabt.

Vi skal genskabe funktionaliteten af Wiki, især interessen for indholdet på wiki-siderne. Et stykke tekst, der var på en af disse sider, er adgangskoden til 1C-serveren og er nødvendigt for at låse den op.

Derudover var der et sted på wiki-siderne eller et andet sted adgangskoder til logserveren og videoovervågningsserveren, som også ønskes genskabt, da undersøgelsen af hændelsen er umulig uden dem. Som altid forventes en hurtig løsning på problemet!

3.3. Løsning

1. Vi forsøger at starte op fra de diske, vi har, og får ensartede beskeder overalt:

Ingen bootbar medium fundet! Systemet stoppet 

Vi skal starte et sted. Igen redder live CD/DVD (Fejlsøgning -> Redningsspørgsmål). Under opstarten prøver vi at finde den bootbare partition, men finder ikke noget og ender i shell. Vi forsøger at undersøge, hvad der er med diskene. Det vides, at der er tre. Der er flere værktøjer tilgængelige i version 7 af CentOS, hvor kommandoerne blkid eller lsblk, som viser os al information om diskene.

Hvad vi gør:

$ ls /dev/sd*

Det er tydeligt, at

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

Vi monterer sdb1, og det er klart, at dette er den bootbare partition af CentOS 6.

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

Det er åbenlyst, at vi går ind i grub-partitionen og finder den første nøgle — James191955Gosling i en usædvanlig fil.

2. Vi undersøger pvs og lvs, da vi arbejder med LVM. Vi ser, at der burde være 2 fysiske volumes, den ene findes ikke og klager over en mistet uid. Vi ser, at der burde være 2 logiske volumes: root og swap, mens root delvist er mistet (attribut P på volume). Det kan ikke monteres, hvilket er en skam! Vi har virkelig brug for det.

Der er endnu 2 diske, vi ser på dem, samler dem og monterer:

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

Vi ser, at dette er den bootbare partition af CentOS 6, og en duplikering af det, der allerede er på /dev/sdb1, og igen den samme nøgle — DennisBMacAlistairCRitchie!
Vi ser, hvordan det er samlet /dev/md127.

$ mdadm --detail /dev/md127

Vi ser, at det skulle have været samlet fra 4 diske, men er blevet samlet fra to /dev/sda1 og /dev/sdc1, de burde have været numrene 2 og 4 i systemet. Vi formoder, at der også kan samles et array fra /dev/sda2 og /dev/sdc2 . Det er uklart, hvorfor der ikke er metadata på dem, men det ligger hos administratoren, der er et sted i Goa. Vi formoder, at der her skal være RAID10, selvom der er varianter. Vi opretter:

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

Vi ser blkid, pvs, lvs. Vi opdager, at vi har samlet det fysiske volume, som vi tidligere manglede.

Vi fik straks lvroot til at fungere, vi monterer det, men aktiverer først VG:

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

Og der er alt, inklusive nøglen i root's hjemmemappe — /root/sweet.

3. Vi forsøger stadig at genoplive vores server, så den starter ordentligt. Alle logiske volumener fra vores /dev/md0 (hvor vi fandt alt) flytter vi til /dev/sdb2, hvor hele serveren oprindeligt kørte.

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

Vi slukker serveren, fjerner disk 1 og 3, beholder den anden, og starter fra Live CD/DVD i Rescue. Vi finder den boot-partition, genopretter boot-loaderen i grub:

root (hd0,0)
setup (hd0)

Vi fjerner bootdisken og starter med succes, men hjemmesiden fungerer ikke.

4. Der er to måder at starte hjemmesiden på: enten konfigurere Apache fra bunden eller bruge en forudindstillet nginx med php-fpm:

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

Endelig skal MySQL startes:

$ /etc/init.d/mysqld start

Det starter ikke, og hemmeligheden ligger i /var/log/mysql. Så snart du løser problemet med MySQL, vil hjemmesiden fungere, og der vil være en nøgle på hovedsiden — RichardGCCMatthewGNUStallman! Nu har vi adgang til 1C, og medarbejderne kan få deres løn. Og som altid er der meget arbejde foran dig med at sætte infrastrukturen og sikkerheden på plads i virksomheden.

Vi kan også dele listen over bøger, der hjalp os og vores deltagere med at forberede sig til spillet: linux.mail.ru/books.

Tak fordi du var med os! Hold øje med annonceringer om næste spil!

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster