Linux Quest. Lokwinsken foar de winners en fertel ús oer de oplossingen foar de taken

Linux Quest. Lokwinsken foar de winners en fertel ús oer de oplossingen foar de taken

Op maart 25th wy iepene ynskriuwing foar Linux Quest, dit is in spultsje foar leafhawwers en saakkundigen fan it Linux-bestjoeringssysteem. Guon statistiken: 1117 minsken registrearre foar it spul, 317 fan harren fûn op syn minst ien kaai, 241 mei súkses foltôge de taak fan de earste etappe, 123 - de twadde en 70 trochjûn de tredde etappe. Hjoed is ús spultsje oan in ein kommen en wy lokwinskje ús winners!

  • Alexander Teldekov naam it earste plak.
    Alexander sei tsjin himsels dat hy de meast typyske systeembehearder is. Wennet yn Volgograd, hat sawat tweintich jier ferskate Unix-achtige systemen administreare. Ik slagge om te wurkjen yn ynternetproviders, in bank en in systeemintegrator. No wurket er op ôfstân yn in lyts bedriuw, wurket oan wolkinfrastruktuer foar in grutte bûtenlânske klant. Hâldt fan lêzen en harkje nei muzyk. Oer it spultsje, Alexander sei dat hy like it spultsje as gehiel, hy hâldt fan sokke taken. Tidens in ynterview by ien fan 'e bedriuwen die ik wat fergelykber mei Hackerrank, it wie ynteressant.
  • Twadde plak - Roman Suslov.
    In roman út Moskou. Hy is 37 jier âld. Wurket as Linux/Unix-yngenieur by Jet Infosystems. Op it wurk moat ik Linux / Unix-systemen + SAN beheare en problemen oplosse. Belangen binne farieare: Linux-systemen, programmearring, reverse engineering, ynformaasjefeiligens, Arduino. Oer it spultsje Roman merkte op dat hy it spultsje yn 't algemien leuk fûn. “Ik spande myn harsens in bytsje út en naam in skoft út it grize deistich libben fan it deistich wurk. 🙂 Ik soe graach mear taken hawwe, oars foardat ik tiid hie om der in smaak fan te krijen, wie it spul al oer.”
  • Tredde - alex3d.
    Alex wennet yn Moskou en wurket yn softwareûntwikkeling. "Tankewol foar de wedstryd, it wie nijsgjirrich om myn google-fu-feardigens te testen."

Ek yn de ranglist fan de 10 bêste spilers:

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

Wy begripe dat d'r in protte opsjes binne foar it oplossen fan al ús problemen; guon fan 'e mooglike oplossingen wurde hjirûnder beskreaun.

1. Earste etappe

Wy neamden it "Binne jo echt in admin?", sûnt de taak wie frij simpel - te reparearjen waarme lamp tsjinst.

1.1. Nijsgjirrige feiten:

Twa spilers fûnen de earste kaai yn 'e earste 15 minuten fan it spul, en yn' e earste oere hienen wy trije lieders dy't de taak foltôge.

1.2. Oefenje

Jo gongen oan it wurk yn in bedriuw dêr't foar in lange tiid gjin foechhawwende ynformaasje technology spesjalist. Foardat jo begjinne dingen yn oarder te setten, moatte jo it baarnende probleem oplosse dat it wurk fan it kantoar blokkearret.

De skjinmakster pakte de stroomkabel fan de serverkast mei in dweil. Strom is werombrocht, mar in tige wichtige webside wurket noch net. De webside is wichtich om't it bedriuw net heul soargen is oer ynformaasjefeiligens, en op 'e haadside fan dizze kinne jo yn dúdlike tekst it behearderwachtwurd fine foar de kompjûter fan' e CEO.

De oare deis waard it wachtwurd feroare, mar elkenien fergeat it nije, de direkteur kin net wurkje. D'r binne geroften dat d'r mear kaaien op dizze masine wiene dy't ús koenen helpe om de reservekopy fan 'e boekhâldingsdokuminten te ûntsiferjen.

Elkenien ferwachtet in rappe oplossing fan it probleem!

1.3. Oplossing

1. Alderearst moatte jo it root-wachtwurd feroarje op 'e firtuele masine om tagong te krijen ta it. By it starten, merken wy dat dit Ubuntu 16.04-tsjinner is.

Om it root-wachtwurd werom te setten, starte wy de masine opnij, by it laden, op it momint dat it grubmenu wurdt werjûn, gean nei it Ubuntu-item te bewurkjen mei de "e" knop. Bewurkje de line linux, foegje it ta oan 'e ein init=/bin/bash. Wy laden fia Ctrl+x, wy krije in bash. Remount de root mei rw, feroarje it wachtwurd:

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

Ferjit net oer syngronisaasje, opnij starte.

2. De betingst seit dat ús webserver net wurket, sjoch:

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

Dat is, yn feite, Apache rint, mar reagearret mei koade 404. Litte wy nei de konfiguraasje sjen:

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

D'r is hjir ek in kaai - StevenPaulSteveJobs.

Kontrolearje it paad /usr/share/WordPress - der is net sa'n ding, mar der is /usr/share/wordpress. Bewurkje de konfiguraasje en opnij starte Apache.

$ systemctl restart apache2

3. Besykje it nochris, wy krije de flater:

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

De databank rint net?

$ systemctl status mysql
Active: active (running)

Wat is der oan de hân? Wy moatte it útfine. Om dit te dwaan, moatte jo tagong krije ta MySQL, lykas beskreaun yn dokumintaasje. Ien fan 'e dokumintaasjepunten advisearret dat wy de opsje registrearje skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf. D'r is hjir ek in kaai - AugustaAdaKingByron.

Korrigearjen fan brûkersrjochten 'wp'@'localhost'. Wy lansearje MySQL, meitsje it tagonklik oer it netwurk, kommentaar oer de opsje yn 'e konfiguraasje skip-networking.

4. Nei dizze stappen begjint de webserver, mar de side wurket noch net omdat

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

Wy bewurkje de rjochten foar it bestân.

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

Wy ferfarskje de side, gean nei de side en fine de kaai - BjarneStroustrup! Wy fûnen alle trije kaaien, ús direkteur kin wurkje, wy ûntsifere de boekhâldingsbestannen. Elkenien is bliid, en jo hawwe in protte wurk foar jo foar it opsetten fan ynfrastruktuer, backups en feiligens yn it bedriuw.

2. Twadde etappe

It wie nedich om it probleem fan it sammeljen fan analytiken op te lossen. Elkenien hâldt fan analytyk - wa brûkt it, wêr en yn hokker hoemannichten. Wy kamen mei in saak dat alle yngenieurs meie tsjinkomme yn ien of oare foarm yn it libben.

2.1. Nijsgjirrige feiten

Ien fan ús spilers ynfierde de juste kaai binnen de earste 10 minuten fan it spul, en binnen it earste oere hienen wy in lieder dy't de taak foltôge.

2.2. Oefenje

Jo gongen oan it wurk by it bedriuw, managers kamen nei jo en fregen jo om te finen oan wa't brieven út Afrika stjoerd waarden. Wy moatte de top 21-adressen fan ûntfanger bouwe op basis fan har. De earste letters fan de adressen fan de ûntfanger binne de kaai. Ien ding: de mailtsjinner dêr't de brieven troch ferstjoerd binne, laadt net. Elkenien ferwachtet in rappe oplossing fan it probleem!

2.3. Oplossing

1. De tsjinner bootet net troch in net-besteand swap-partysje yn fstab; by it laden besiket it systeem it te mount en crasht. Hoe bootje?

Download de ôfbylding, wy hawwe CentOS 7 ynladen, boot fan Live CD / DVD (Troubleshooting -> Rescue), mount it systeem, bewurkje /etc/fstab. Wy fine fuortendaliks de earste kaai - GottfriedWilhelm11646Leibniz!

Swap oanmeitsje:

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

2. Lykas altyd is der gjin wachtwurd, jo moatte it root-wachtwurd feroarje op 'e firtuele masine. Dat diene wy ​​al yn de earste taak. Wy feroarje en mei súkses ynlogge op de tsjinner, mar it giet daliks yn 'e nij opstarten. De tsjinner wurdt oerladen mei sa'n snelheid dat jo net iens hawwe tiid om te sjen nei alle logs foarsichtich. Hoe te begripen wat der bart?

Wer bootje wy fan 'e livecd, studearje de systeemlogboeken soarchfâldich en, foar it gefal, sjoch nei de cron, sûnt sa'n periodiciteit. Dêr fine wy ​​it probleem en de twadde kaai - Alan1912MathisonTuring!

Need yn /etc/crontab wiskje of kommentaar out line echo b > /proc/sysrq-trigger.

3. wêrnei't de tsjinner is laden, en jo kinne de taak fan 'e behearders foltôgje: "Wat binne de adressen yn Afrika?" Dizze ynformaasje is algemien beskikber foar it publyk. Jo kinne dizze ynformaasje fine op it ynternet mei de útdrukkingen "ip adres afrika", "geoip database". Om it probleem op te lossen, kinne jo fergees beskikbere adresferdielingsdatabases (geoip) brûke. Wy brûkten de databank as standert MaxMind GeoLite 2, beskikber ûnder in Creative Commons Attribution-ShareAlike 4.0 lisinsje.

Litte wy besykje ús probleem op te lossen mei allinich Linux-systeemhulpprogramma's, mar yn 't algemien kin it op in grut oantal manieren oplost wurde: gebrûk fan tekstfilterprogramma's en gebrûk fan skripts yn ferskate programmeartalen.

Om te begjinnen krije wy gewoan de "stjoerder-ûntfanger IP" pearen út it e-postlog /var/log/maillog (litte wy in tabel mei e-postûntfangers bouwe - IP-stjoerder). Dit kin dien wurde mei it folgjende 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

En foardat wy trochgean mei it gearstallen fan in database fan Afrikaanske adressen, litte wy ris nei de top IP-adressen fan stjoerders sjen.

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

By harren allegearre steane de earste trije ûntfangers fan boppen dúdlik op wat it oantal brieven oanbelanget. As jo ​​​​de IP-adressen fan 'e stjoerders grepen dy't nei adressen fan dizze top 3 stjoerden, sille jo in dúdlike oerwicht fan bepaalde netwurken fernimme:

$ 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 measte netwurken 105/8, 41/8, 196/8,197/8 wurde tawiisd oan AFRINIC - ien fan 'e fiif regionale ynternetregistrars dy't ynternetboarnen fersprieden. AFRINIC ferspriedt adresromte yn hiel Afrika. En 41/8 ferwiist nei AFRINIC folslein.

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

Sa is it antwurd op it probleem yn feite yn it log sels.

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

Op dit stadium krije wy de tekenrige "LinuxBenedictTorvadst".

Korrekte kaai: "LinusBenedictTorvalds".

De resultearjende tekenrige befettet in typflater yn relaasje ta de juste kaai yn de lêste 3 tekens. Dit is te tankjen oan it feit dat de netwurken dy't wy selekteare binne net folslein wijd oan Afrikaanske lannen en oan 'e manier wêrop e-mails wurde ferspraat troch IP-adressen yn ús log.

Mei genôch spesifikaasje fan 'e grutste netwurken tawiisd oan Afrikaanske lannen, kin in krekte antwurd wurde krigen:

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

It probleem kin ek op in oare manier oplost wurde.
Download MaxMind, pak it út, en de folgjende trije kommando's losse ek ús 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 ien of oare manier hawwe wy de statistiken úteinlik berekkene, en de managers krigen de gegevens dy't se nedich wiene om te wurkjen!

3. Tredde etappe

De tredde etappe is wat te ferlykjen mei de earste - jo moatte ek reparearje de waarme lamp tsjinst, mar alles is yngewikkelder as yn 'e earste taak.

3.1. Nijsgjirrige feiten

Yn 'e earste 15 minuten fûnen trije spilers de earste kaai; 2 oeren en 20 minuten nei it begjin fan 'e etappe foltôge ús winner de taak.

3.2. Oefenje

Jo gongen oan it wurk foar in bedriuw wêr't alle bedriuwsdokuminten op in ynterne Wiki-tsjinner opslein wurde. Ferline jier bestelde in yngenieur 3 nije skiven foar de tsjinner neist ien besteande, mei it argumint dat foar it systeem om fouttolerant te wêzen, de skiven moatte wurde pleatst yn in soarte fan arrays. Spitigernôch gie de yngenieur in pear wiken nei har ynstallaasje op fakânsje nei Yndia en kaam net werom.

De tsjinner wurke ferskate jierren sûnder mislearrings, mar in pear dagen lyn waard it netwurk fan it bedriuw hacked. Neffens de ynstruksjes hawwe de feiligenspersoniel de skiven fan 'e tsjinner fuorthelle en nei jo stjoerd. By it ferfier gie ien skiif ûnherstelber ferlern.

Wy moatte de funksjonaliteit fan Wiki weromsette; foarearst binne wy ​​ynteressearre yn de ynhâld fan de wikisiden. In bepaald stikje tekst dat op ien fan 'e siden fan dizze wiki stie is it wachtwurd foar de 1C-tsjinner en is driuwend nedich om it te ûntsluten.

Derneist wiene d'r earne op 'e wiki-siden of op in oar plak wachtwurden foar de log-tsjinner en de fideo-tafersjochtsjinner, dy't ek winsklik wêze soe om te herstellen; sûnder dy is ûndersyk nei it ynsidint ûnmooglik. Lykas altyd ferwachtsje wy in rappe oplossing fan it probleem!

3.3. Oplossing

1. Wy besykje ien foar ien te booten fan 'e skiven dy't wy hawwe en oeral krije wy itselde berjocht:

No bootable medium found! System halted 

Jo moatte boot fan wat. Opstarten fan in Live CD/DVD (Troubleshooting -> Rescue) helpt wer. By it laden besykje wy de bootdieling te finen, wy kinne it net fine, wy einigje yn 'e shell. Wy besykje te studearjen wat en hoe te dwaan mei skiven. It is bekend dat se trije binne. D'r binne mear ark foar dit yn 'e 7e ferzje fan CentOS, wêr't kommando's binne blkid of lsblk, dy't ús alle ynformaasje oer de skiven sjen litte.

Hoe en wat wy dogge:

$ ls /dev/sd*

Dat is daliks dúdlik

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

Wy mount sdb1, it is dúdlik dat dit de bootdieling fan CentOS 6 is.

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

Fansels geane wy ​​nei de grub seksje en fine dêr de earste kaai - James191955Gosling yn in ûngewoane triem.

2. Wy studearje pvs en lvs, sûnt wy wurkje mei LVM. Wy sjogge dat der moatte wêze 2 fysike folumes, ien is net leit en klaget oer in ferlern uid. Wy sjogge dat d'r 2 logyske folumes moatte wêze: root en swap, wylst root foar in part ferlern is (it P-attribút fan folume). It is net mooglik om te mount, dat is spitich! Wy hawwe him echt nedich.

D'r binne noch 2 skiven, wy sjogge nei har, sammelje en montearje se:

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

Wy sjogge, wy kinne sjen dat dit de bootpartysje is fan CentOS 6 en in duplikaat fan wat al op stiet /dev/sdb1, en hjir wer deselde kaai - DennisBMacAlistairCRitchie!
Litte wy sjen hoe't it is gearstald /dev/md127.

$ mdadm --detail /dev/md127

Wy sjogge dat it moat wêze gearstald út 4 skiven, mar it waard gearstald út twa /dev/sda1 и /dev/sdc1, se soene nûmers 2 en 4 yn it systeem wêze moatten. Wy geane der fan út /dev/sda2 и /dev/sdc2 Jo kinne ek sammelje in array. It is net dúdlik wêrom't d'r gjin metadata oer binne, mar dit is op it gewisse fan 'e admin, dy't earne yn Goa is. Wy geane der fan út dat der RAID10 wêze moat, hoewol d'r opsjes binne. Wy sammelje:

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

Wy sjogge nei blkid, pvs, lvs. Wy ûntdekke dat wy in fysyk folume hawwe sammele dat wy earder miste.

lvroot waard fuortendaliks reparearre, wy mount it, mar aktivearje earst VG:

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

En alles is d'r, ynklusyf de kaai yn 'e root-thúsmap - /root/sweet.

3. Wy besykje noch om ús tsjinner wer op te wekken sadat it normaal begjint. Allegear logyske bondels út ús /dev/md0 (wêr't wy alles fûnen) sleep it nei /dev/sdb2, dêr't de hiele tsjinner ynearsten wurke.

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

Wy skeakelje de tsjinner út, fuortsmite skiven 1 en 3, lit de twadde, boot fan de Live CD / DVD yn Rescue. Fyn de bootpartysje en herstel de bootloader yn grub:

root (hd0,0)
setup (hd0)

Wy skuorre de boot skiif en laden mei súkses, mar de side wurket net.

4. D'r binne twa opsjes om in webside te starten: Apache fanôf it begjin konfigurearje of nginx brûke mei php-fpm al konfigureare foarôf:

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

Uteinlik moatte jo MySQL begjinne:

$ /etc/init.d/mysqld start

It sil net begjinne, en it antwurd leit yn /var/log/mysql. Sadree't jo it probleem mei MySQL oplosse, sil de side wurkje, op 'e haadside sil d'r in kaai wêze - RichardGCCMatthewGNUStallman! No hawwe wy tagong ta 1C, en meiwurkers kinne har salaris krije. En lykas altyd hawwe jo in protte wurk foarút om ynfrastruktuer en feiligens yn it bedriuw te fêstigjen.

Wy kinne ek nochris in list mei boeken diele dy't ús en ús dielnimmers holpen hawwe foar it tarieden fan it spultsje: linux.mail.ru/books.

Tankewol dat jo by ús binne! Bliuw op 'e hichte foar oankundigings fan' e folgjende spultsjes!

Boarne: www.habr.com

Add a comment