Linux Quest. Binabati kita sa mga nanalo at sabihin sa amin ang tungkol sa mga solusyon sa mga gawain

Linux Quest. Binabati kita sa mga nanalo at sabihin sa amin ang tungkol sa mga solusyon sa mga gawain

Noong ika-25 ng Marso binuksan namin ang pagpaparehistro para sa Linux Quest, ito ay isang Laro para sa mga mahilig at eksperto ng Linux operating system. Ang ilang mga istatistika: 1117 tao ang nakarehistro para sa laro, 317 sa kanila ang nakahanap ng hindi bababa sa isang susi, 241 ang matagumpay na nakumpleto ang gawain sa unang yugto, 123 - ang pangalawa at 70 ang pumasa sa ikatlong yugto. Ngayon ay natapos na ang aming laro at binabati namin ang aming mga nanalo!

  • Nakuha ni Alexander Teldekov ang unang lugar.
    Sinabi ni Alexander sa kanyang sarili na siya ang pinakakaraniwang tagapangasiwa ng system. Nakatira sa Volgograd, ay nangangasiwa ng iba't ibang sistemang katulad ng Unix sa loob ng halos dalawampung taon. Nakapagtrabaho ako sa mga Internet provider, isang bangko, at isang system integrator. Ngayon siya ay nagtatrabaho nang malayuan sa isang maliit na kumpanya, nagtatrabaho sa cloud infrastructure para sa isang malaking dayuhang customer. Mahilig magbasa at makinig ng musika. Tungkol sa Laro, sinabi ni Alexander na nagustuhan niya ang laro sa kabuuan, gusto niya ang mga ganoong gawain. Sa isang pakikipanayam sa isa sa mga kumpanyang ginawa ko ang isang bagay na katulad ng Hackerrank, ito ay kawili-wili.
  • Pangalawang lugar - Roman Suslov.
    Isang nobela mula sa Moscow. Siya ay 37 taong gulang. Nagtatrabaho bilang isang Linux/Unix engineer sa Jet Infosystems. Sa trabaho, kailangan kong pangasiwaan at i-troubleshoot ang mga Linux/Unix system + SAN. Iba-iba ang mga interes: Linux system, programming, reverse engineering, information security, Arduino. Tungkol sa Laro Nabanggit ni Roman na nagustuhan niya ang laro sa pangkalahatan. "Binanat ko ang aking utak nang kaunti at nagpahinga mula sa kulay-abo na pang-araw-araw na buhay ng araw-araw na trabaho. πŸ™‚ Gusto kong magkaroon ng mas maraming gawain, kung hindi man bago ako magkaroon ng oras upang matikman ito, ang laro ay tapos na."
  • Pangatlo - alex3d.
    Nakatira si Alex sa Moscow at nagtatrabaho sa software development. "Salamat sa paligsahan, kawili-wiling subukan ang aking mga kasanayan sa google-fu."

Gayundin sa pagraranggo ng 10 pinakamahusay na mga manlalaro:

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

Naiintindihan namin na maraming mga opsyon para sa paglutas ng lahat ng aming mga problema; ang ilan sa mga posibleng solusyon ay inilarawan sa ibaba.

1. Unang yugto

Tinawag namin itong "Talaga bang admin ka?", dahil ang gawain ay medyo simple - upang ayusin ang isang mainit na serbisyo ng lampara.

1.1. Interesanteng kaalaman:

Nahanap ng dalawang manlalaro ang unang susi sa unang 15 minuto ng laro, at sa unang oras ay mayroon kaming tatlong lider na nakakumpleto sa gawain.

1.2. Mag-ehersisyo

Nagtrabaho ka sa isang kumpanya kung saan sa mahabang panahon ay walang karampatang espesyalista sa teknolohiya ng impormasyon. Bago mo simulan ang pag-aayos ng mga bagay, kailangan mong lutasin ang nasusunog na problema na humaharang sa gawain ng opisina.

Nahuli ng cleaning lady ang power cable ng server cabinet na may mop. Naibalik na ang kuryente, ngunit hindi pa rin gumagana ang isang napakahalagang website. Ang website ay mahalaga dahil ang kumpanya ay hindi masyadong nag-aalala tungkol sa seguridad ng impormasyon, at sa pangunahing pahina nito ay makikita mo sa malinaw na teksto ang password ng administrator para sa computer ng CEO.

Noong isang araw binago ang password, ngunit nakalimutan ng lahat ang bago, hindi gumana ang direktor. May mga alingawngaw na mayroong higit pang mga susi sa makina na ito na maaaring makatulong sa amin na maunawaan ang backup na kopya ng mga dokumento ng accounting.

Inaasahan ng lahat ang agarang paglutas ng isyu!

1.3. Solusyon

1. Una sa lahat, kailangan mong baguhin ang root password sa virtual machine upang makakuha ng access dito. Kapag nagsisimula, napansin namin na ito ay Ubuntu 16.04 Server.

Upang i-reset ang root password, i-restart namin ang makina, kapag naglo-load, sa sandaling ipinapakita ang menu ng grub, pumunta upang i-edit ang item ng Ubuntu gamit ang "e" na pindutan. I-edit ang linya ng linux, idagdag ito sa dulo init=/bin/bash. Naglo-load kami sa pamamagitan ng Ctrl+x, nakakakuha kami ng bash. I-remount ang root gamit ang rw, palitan ang password:

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

Huwag kalimutan ang tungkol sa pag-sync, pag-reboot.

2. Sinasabi ng kundisyon na hindi gumagana ang aming web server, tingnan mo:

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

Iyon ay, sa katunayan, ang Apache ay tumatakbo, ngunit tumutugon sa code 404. Tingnan natin ang config:

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

Mayroon ding susi dito - StevenPaulSteveJobs.

Sinusuri ang landas /usr/share/WordPress - walang ganoon, ngunit mayroon /usr/share/wordpress. I-edit ang config at i-restart ang Apache.

$ systemctl restart apache2

3. Subukan muli, nakuha namin ang error:

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

Ang database ay hindi tumatakbo?

$ systemctl status mysql
Active: active (running)

Anong problema? Kailangan nating malaman ito. Upang gawin ito, kailangan mong makakuha ng access sa MySQL, tulad ng inilarawan sa dokumentasyon. Inirerekomenda ng isa sa mga punto ng dokumentasyon na irehistro namin ang opsyon skip-grant-tables Π² /etc/mysql/mysql.conf.d/mysqld.cnf. Mayroon ding susi dito - AugustaAdaKingByron.

Pagwawasto ng mga karapatan ng gumagamit 'wp'@'localhost'. Inilunsad namin ang MySQL, ginagawa itong naa-access sa network, nagkomento sa opsyon sa config skip-networking.

4. Pagkatapos ng mga hakbang na ito, magsisimula ang web server, ngunit hindi pa rin gumagana ang site dahil

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

In-edit namin ang mga karapatan sa file.

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

Nire-refresh namin ang pahina, pumunta sa site at hanapin ang susi - BjarneStroustrup! Natagpuan namin ang lahat ng tatlong mga susi, maaaring gumana ang aming direktor, na-decrypt namin ang mga file ng accounting. Masaya ang lahat, at marami kang trabaho sa unahan mo para mag-set up ng imprastraktura, backup at seguridad sa kumpanya.

2. Ikalawang yugto

Ito ay kinakailangan upang malutas ang problema ng pagkolekta ng analytics. Gustung-gusto ng lahat ang analytics - sino ang gumagamit nito, kung saan at sa anong dami. Nakabuo kami ng isang kaso na maaaring makatagpo ng lahat ng mga inhinyero sa isang anyo o iba pa sa buhay.

2.1. Interesanteng kaalaman

Isa sa aming mga manlalaro ang nagpasok ng tamang susi sa loob ng unang 10 minuto ng laro, at sa loob ng unang oras ay mayroon kaming isang pinuno na nakakumpleto sa gawain.

2.2. Mag-ehersisyo

Nagpunta ka sa trabaho sa kumpanya, pumunta sa iyo ang mga manager at hiniling sa iyo na hanapin kung kanino ipinadala ang mga liham mula sa Africa. Kailangan nating buuin ang nangungunang 21 address ng tatanggap batay sa mga ito. Ang mga unang titik ng mga address ng tatanggap ay ang susi. Isang bagay: ang mail server kung saan ipinadala ang mga liham ay hindi naglo-load. Inaasahan ng lahat ang agarang paglutas ng isyu!

2.3. Solusyon

1. Hindi nagbo-boot ang server dahil sa hindi umiiral na swap partition sa fstab; kapag naglo-load, sinusubukan ng system na i-mount ito at nag-crash. Paano mag-boot?

I-download ang imahe, na-download namin ang CentOS 7, boot mula sa Live CD/DVD (Troubleshooting -> Rescue), i-mount ang system, i-edit /etc/fstab. Agad naming nahanap ang unang susi - GottfriedWilhelm11646Leibniz!

Lumikha ng swap:

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

2. Gaya ng dati, walang password, kailangan mong baguhin ang root password sa virtual machine. Nagawa na natin ito sa unang gawain. Nagbabago kami at matagumpay na nag-log in sa server, ngunit agad itong napupunta sa pag-reboot. Ang server ay na-overload sa ganoong bilis na wala ka nang oras upang tingnan nang mabuti ang lahat ng mga log. Paano maintindihan kung ano ang nangyayari?

Muli kaming nag-boot mula sa livecd, maingat na pag-aralan ang mga log ng system at, kung sakali, tingnan ang cron, dahil ang ganitong periodicity. Doon ay nakita namin ang problema at ang pangalawang susi - Alan1912MathisonTuring!

Kailangan sa /etc/crontab tanggalin o ikomento ang linya echo b > /proc/sysrq-trigger.

3. Pagkatapos kung saan nag-load ang server, at maaari mong kumpletuhin ang gawain ng mga tagapamahala: "Ano ang mga address sa Africa?" Ang impormasyong ito ay karaniwang magagamit sa publiko. Mahahanap mo ang impormasyong ito sa Internet gamit ang mga pariralang "ip address africa", "geoip database". Upang malutas ang problema, maaari mong gamitin ang malayang magagamit na mga database ng pamamahagi ng address (geoip). Ginamit namin ang database bilang pamantayan MaxMind GeoLite2, magagamit sa ilalim ng lisensyang Creative Commons Attribution-ShareAlike 4.0.

Subukan nating lutasin ang ating problema gamit lamang ang Linux system utilities, ngunit sa pangkalahatan ito ay malulutas sa napakaraming paraan: gamit ang mga text filtering utilities at paggamit ng mga script sa iba't ibang programming language.

Upang magsimula, kukunin lang namin ang mga pares ng "nagpadala-tatanggap na IP" mula sa log ng mail /var/log/maillog (bumuo tayo ng talahanayan ng mga tatanggap ng email - IP ng nagpadala). Magagawa ito gamit ang sumusunod na utos:

$ 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

At bago tayo magpatuloy sa pag-compile ng database ng mga African address, tingnan natin ang mga nangungunang IP address ng mga nagpadala.

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

Sa lahat ng mga ito, ang unang tatlong tatanggap mula sa itaas ay malinaw na namumukod-tangi sa mga tuntunin ng bilang ng mga titik. Kung makikita mo ang mga IP address ng mga nagpadala na ipinadala sa mga address mula sa nangungunang 3 na ito, mapapansin mo ang isang malinaw na pamamayani ng ilang mga network:

$ 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

Karamihan sa mga network na 105/8, 41/8, 196/8,197/8 ay inilalaan sa AFRINIC - isa sa limang rehiyonal na registrar ng Internet na namamahagi ng mga mapagkukunan ng Internet. Ang AFRINIC ay namamahagi ng address space sa buong Africa. At ang 41/8 ay tumutukoy sa ganap na AFRINIC.

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

Kaya, ang sagot sa problema ay, sa katunayan, sa log mismo.

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

Sa yugtong ito nakukuha namin ang string na "LinuxBenedictTorvadst".

Tamang key: "LinusBenedictTorvalds".

Ang resultang string ay naglalaman ng typo kaugnay ng tamang key sa huling 3 character. Ito ay dahil sa katotohanan na ang mga network na napili namin ay hindi ganap na nakatuon sa mga bansa sa Africa at sa paraan ng pagbabahagi ng mga email sa mga IP address sa aming log.

Sa sapat na detalye ng pinakamalaking network na inilalaan sa mga bansa sa Africa, maaaring makuha ang isang tumpak na sagot:

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

Ang problema ay maaari ding malutas sa ibang paraan.
I-download ang MaxMind, i-unpack ito, at malulutas din ng susunod na tatlong command ang aming problema.

$ 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

Sa isang paraan o iba pa, sa kalaunan ay nakalkula namin ang mga istatistika, at natanggap ng mga tagapamahala ang data na kailangan nila upang gumana!

3. Ikatlong yugto

Ang ikatlong yugto ay medyo katulad sa una - kailangan mo ring ayusin ang mainit na serbisyo ng lampara, ngunit ang lahat ay mas kumplikado kaysa sa unang gawain.

3.1. Interesanteng kaalaman

Sa unang 15 minuto, nakita ng tatlong manlalaro ang unang susi; 2 oras at 20 minuto pagkatapos ng pagsisimula ng entablado, natapos ng aming nanalo ang gawain.

3.2. Mag-ehersisyo

Nagtrabaho ka para sa isang kumpanya kung saan nakaimbak ang lahat ng dokumento ng kumpanya sa isang panloob na server ng Wiki. Noong nakaraang taon, nag-order ang isang engineer ng 3 bagong disk para sa server bilang karagdagan sa isang umiiral na, na nangangatwiran na para sa system na maging fault-tolerant, ang mga disk ay kailangang ilagay sa ilang uri ng mga array. Sa kasamaang palad, ilang linggo pagkatapos ng kanilang pag-install, ang inhinyero ay nagbakasyon sa India at hindi na bumalik.

Ang server ay nagtrabaho nang walang pagkabigo sa loob ng ilang taon, ngunit ilang araw na ang nakalipas ay na-hack ang network ng kumpanya. Ayon sa mga tagubilin, inalis ng kawani ng seguridad ang mga disk mula sa server at ipinadala ang mga ito sa iyo. Sa panahon ng transportasyon, ang isang disk ay hindi na maibabalik.

Kailangan nating ibalik ang paggana ng Wiki; una sa lahat, interesado kami sa nilalaman ng mga pahina ng wiki. Ang isang tiyak na piraso ng teksto na nasa isa sa mga pahina ng wiki na ito ay ang password para sa 1C server at agarang kailangan upang i-unlock ito.

Bilang karagdagan, sa isang lugar sa mga pahina ng wiki o sa ibang lugar ay mayroong mga password para sa log server at ang video surveillance server, na kanais-nais ding mabawi; kung wala ang mga ito, imposible ang pagsisiyasat sa insidente. Gaya ng nakasanayan, inaasahan namin ang agarang paglutas ng isyu!

3.3. Solusyon

1. Sinusubukan naming mag-boot nang isa-isa mula sa mga disk na mayroon kami at saanman namin natatanggap ang parehong mensahe:

No bootable medium found! System halted 

Kailangan mong mag-boot mula sa isang bagay. Nakakatulong muli ang pag-boot mula sa isang Live CD/DVD (Troubleshooting -> Rescue). Kapag naglo-load, sinusubukan naming hanapin ang boot partition, hindi namin mahanap ito, napupunta kami sa shell. Sinusubukan naming pag-aralan kung ano at paano gawin ang mga disk. Nabatid na tatlo sila. Mayroong higit pang mga tool para dito sa ika-7 na bersyon ng CentOS, kung saan mayroong mga utos blkid o lsblk, na nagpapakita sa amin ng lahat ng impormasyon tungkol sa mga disk.

Paano at ano ang ginagawa namin:

$ ls /dev/sd*

Halata naman agad yun

/dev/sdb1 - ext4
/dev/sdb2 - Ρ‡Π°ΡΡ‚ΡŒ lvm
/dev/sda1 ΠΈ /dev/sdc1 - части Ρ€Π΅ΠΉΠ΄Π°
/dev/sda2 ΠΈ /dev/sdc2 - ΠΏΡ€ΠΎ Π½ΠΈΡ… Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ извСстно Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚

Nag-mount kami ng sdb1, malinaw na ito ang boot partition ng CentOS 6.

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

Malinaw, pumunta kami sa seksyon ng grub at hanapin ang unang key doon - James191955Gosling sa isang hindi pangkaraniwang file.

2. Nag-aaral kami ng pvs at lvs, dahil nagtatrabaho kami sa LVM. Nakita namin na dapat mayroong 2 pisikal na volume, ang isa ay hindi matatagpuan at nagrereklamo tungkol sa isang nawawalang uid. Nakikita namin na dapat mayroong 2 lohikal na volume: root at swap, habang ang ugat ay bahagyang nawala (ang P attribute ng volume). Imposibleng i-mount, sayang naman! Kailangan talaga natin siya.

Mayroong 2 higit pang mga disk, tinitingnan namin ang mga ito, tipunin at i-mount ang mga ito:

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

Tumingin kami, makikita namin na ito ang boot partition ng CentOS 6 at isang duplicate ng kung ano ang nasa /dev/sdb1, at narito muli ang parehong susi - DennisBMacAlistairCRitchie!
Tingnan natin kung paano ito binuo /dev/md127.

$ mdadm --detail /dev/md127

Nakita namin na dapat itong binuo mula sa 4 na disk, ngunit ito ay binuo mula sa dalawa /dev/sda1 ΠΈ /dev/sdc1, dapat sila ay numero 2 at 4 sa system. Ipinapalagay namin na mula sa /dev/sda2 ΠΈ /dev/sdc2 Maaari ka ring mangolekta ng isang array. Hindi malinaw kung bakit walang metadata sa kanila, ngunit ito ay nasa konsensya ng admin, na nasa isang lugar sa Goa. Ipinapalagay namin na dapat mayroong RAID10, bagaman mayroong mga pagpipilian. Kinokolekta namin:

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

Tumingin kami sa blkid, pvs, lvs. Natuklasan namin na nakakolekta kami ng pisikal na volume na dati naming kulang.

Agad na naayos ang lvroot, ini-mount namin ito, ngunit i-activate muna ang VG:

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

At lahat ay naroroon, kasama ang susi sa direktoryo ng root home - /root/sweet.

3. Sinusubukan pa rin naming buhayin ang aming server upang magsimula ito nang normal. Lahat ng lohikal na volume mula sa aming /dev/md0 (kung saan namin natagpuan ang lahat) i-drag ito sa /dev/sdb2, kung saan unang nagtrabaho ang buong server.

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

I-off namin ang server, alisin ang mga disk 1 at 3, iwanan ang pangalawa, mag-boot mula sa Live CD/DVD papunta sa Rescue. Hanapin ang boot partition at ibalik ang bootloader sa grub:

root (hd0,0)
setup (hd0)

Pinunit namin ang boot disk at matagumpay na nag-load, ngunit hindi gumagana ang site.

4. Mayroong dalawang mga opsyon upang ilunsad ang isang website: i-configure ang Apache mula sa simula o gumamit ng nginx na may php-fpm na na-configure nang maaga:

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

Sa wakas, kailangan mong simulan ang MySQL:

$ /etc/init.d/mysqld start

Hindi ito magsisimula, at ang sagot ay nasa /var/log/mysql. Sa sandaling malutas mo ang problema sa MySQL, gagana ang site, sa pangunahing pahina ay magkakaroon ng isang susi - RichardGCCMatthewGNUStallman! Ngayon ay mayroon na tayong access sa 1C, at matatanggap ng mga empleyado ang kanilang mga suweldo. At gaya ng dati, marami kang trabaho sa unahan para magtatag ng imprastraktura at seguridad sa kumpanya.

Maaari rin kaming muling magbahagi ng listahan ng mga aklat na nakatulong sa amin at sa aming mga kalahok na maghanda para sa laro: linux.mail.ru/books.

Salamat sa pagsama sa amin! Manatiling nakatutok para sa mga anunsyo ng mga susunod na laro!

Pinagmulan: www.habr.com

Magdagdag ng komento