Linux Quest. Urime fituesve dhe tregojmë zgjidhjet për detyrat

Linux Quest. Urime fituesve dhe tregojmë zgjidhjet për detyrat

Më 25 mars hapëm regjistrimin për Linux Quest, një lojë për adhuruesit dhe njohësit e sistemit operativ Linux. Disa statistika: 1117 persona u regjistruan në lojë, nga të cilët 317 gjetën të paktën një çelës, 241 ia dolën me sukses në fazën e parë, 123 në fazën e dytë dhe 70 kaluan fazën e tretë. Sot, loja jonë ka përfunduar dhe ne urime fituesve tanë!

  • Vendi i parë u zënë nga Aleksandër Tjeldikov.
    Aleksandri tha për veten se ai është një administrator sistemesh tipik. Jeton në Volgograd, ka administruar sisteme të ndryshme Unix-like për rreth njëzet vjet. Ka pasur përvojë në ofruesit e internetit, bankat, dhe integruesit e sistemeve. Tani punon në distancë për një firmë të vogël, duke u marrë me infrastrukturën cloud për një klient të madh të huaj. I pëlqen të lexojë, të dëgjojë muzikë. Për Lojën, Aleksandri tha se i pëlqeu përgjithësisht, ai e do këtë lloj sfidash. Në një nga kompanitë gjatë intervistës kishte bërë diçka të ngjashme me Hackerrank, ishte interesante.
  • Vendi i dytë — Roman Suslov.
    Roman nga Moska. Ai është 37 vjeç. Punon si inxhinier Linux/Unix në kompaninë «Infosistemet Jet». Në punë merret me administrimin dhe zgjidhjen e problemeve të sistemeve Linux/Unix + SAN. Interesat janë të ndryshme: sistemet Linux, programimi, reverse engineering, siguria informacionit, Arduino. Për lojën, Romani theksoi se i pëlqeu në përgjithësi. «E stimuloi pak mendjen time dhe më shpëtoi nga monotoninë e përditshme. 🙂 Do doja më shumë detyra, sepse nuk arrita të acclimatohem mirë para se të përfundonte loja».
  • Të tretin — alex3d.
    Aleksi jeton në Moskë, merret me zhvillimin e softuerit. «Faleminderit për konkurrimin, ishte interesante të kontrolloja aftësitë e mia në google-fu».

Po ashtu, në ranglistën e 10 lojtarëve më të mirë:

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

Ne e kuptojmë se ka shumë mënyra për të zgjidhur të gjitha detyrat tona, më poshtë janë të përshkruar disa nga mundësitë e mundshme të zgjidhjes.

1. Faza e parë

E kemi quajtur «A je me të vërtetë admin?», pasi detyra ishte mjaft e thjeshtë — të riparosh një shërbim të ngrohtë dhe të klimës.

1.1. Fakte interesante:

Dy lojtarë gjetën çelësin e parë brenda 15 minutash nga loja, dhe brenda orës së parë kishim tre liderë që e përfunduan detyrën.

1.2. Detyra

Ke filluar punë në një kompani ku për një kohë të gjatë nuk ka pasur një specialist të mirë në teknologjitë informative. Para se të fillosh të sjellësh rend, duhet të zgjidhesh një problem akut që po pengon punën e zyrës.

Pastruesja preku kabllon e energjisë të kabinetit të serverëve me të pastruesen. Energjia u rikthye, por një uebfaqe shumë e rëndësishme vazhdon të mos funksionojë. Uebfaqja është e rëndësishme sepse kompania nuk është shumë e shqetësuar për sigurinë informative, dhe në faqen kryesore mund të gjejmë në mënyrë të hapur fjalëkalimin e administratorit për kompjuterin e drejtorit të përgjithshëm.

Para disa ditësh fjalëkalimi u ndërrua, dhe të gjithë e kanë harruar të riun, drejtoresha nuk mund të punojë. Ka thashetheme se në këtë makinë kanë qenë gjithashtu çelësa që mund të na ndihmojnë në dekriptimin e kopjeve rezervë të dokumenteve financiare.

Të gjithë po presin një zgjidhje të shpejtë për problemin!

1.3. Zgjidhja

1. Së pari, duhet të ndryshosh fjalëkalimin root në makinë virtuale për të marrë qasje. Gjatë nisjes vërejmë se kjo është një Ubuntu 16.04 Server.

Për të rivendosur fjalëkalimin e rrënjës, riaktivizojmë makinën, gjatë ngarkimit, në momentin e shfaqjes së menusë grub, kalojmë në redaktimin e opsionit Ubuntu me butonin «e». Redaktojmë rreshtin linux, duke shtuar në fund init=/bin/bash. Ngarkohemi përmes Ctrl+x, marrim bash. Rimonetojmë rrënjën me rw, ndërruajmë fjalëkalimin:

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

Mos harro sync, riaktivizojmë.

2. Në kushtet thuhet se serveri ynë web nuk punon, shikojmë:

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

Pra, në fakt, Apache është aktivizuar, por përgjigjet me kodin 404. Shikojmë konfigurimin:

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

Këtu gjendet çelësi — StevenPaulSteveJobs.

Kontrollojmë rrugën /usr/share/WordPress — nuk ka një të tillë, por ka /usr/share/wordpress. Korrigjojmë konfigurimin dhe riaktivizojmë apachen.

$ systemctl restart apache2

3. Provojmë përsëri, marrim një gabim:

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

A nuk është e aktivizuar DB?

$ systemctl status mysql
Active: active (running)

Çfarë ndodhi pra? Duhet të analizojmë. Për këtë, na duhet qasje në MySQL, siç është përshkruar në dokumentacion. Një nga piketat e dokumentacionit na rekomandon të shtojmë opsionin skip-grant-tables/etc/mysql/mysql.conf.d/mysqld.cnf. Këtu gjithashtu ndodhet çelësi — AugustaAdaKingByron.

Korrigjojmë të drejtat për përdoruesin 'wp'@'localhost'. Nisemi MySQL, e bëjmë atë të aksesueshëm në rrjet, duke komentuar opsionin në konfigurim skip-networking.

4. Pas këtyre veprimeve, serveri i uebit nisi, por faqja ende nuk funksionon, pasi

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

Korrim të drejtave të skedarit.

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

Rivlerësojmë faqen, hyjmë në sit dhe gjejmë çelësin — BjarneStroustrup! Gjetëm të tri çelësat, drejtori ynë mund të punojë, deshifruam skedarët e kontabilitetit. Të gjithë janë të lumtur, dhe ti ke shumë punë për të bërë për organizimin e infrastrukturës, backup-eve dhe sigurisë në kompani.

2. Fazat e dyta

Duhej të zgjidhnim problemin për mbledhjen e analitikës. Të gjithë e duan analitikën — kush dhe nga ku dhe në cilat sasi vizitojnë. Ne menduam një rast, me të cilin mund të përballen të gjithë inxhinierët në jetë.

2.1. Fakte interesante

Një nga lojtarët tanë futi çelësin e duhur brenda 10 minutash të para të lojës, dhe brenda një ore u shfaq një lider që e zgjidhi misionin.

2.2. Detyra

Ke ke keni në punë në kompaninë, menaxherët erdhën tek ti dhe kërkuan të gjenin se kujt i ishin dërguar emailet nga Afrika. Duhet të krijosh një top-21 adresash marrësish për to. Fillestaret e adresave të marrësve janë çelësi. Një porosi: serveri i postës, përmes të cilit ishin dërguar emailet, nuk po ngarkohet. Të gjithë presin një zgjidhje operative për këtë çështje!

2.3. Zgjidhja

1. Serveri nuk ngarkohet për shkak të një ndarjeje të pavarsishme swap në fstab, gjatë ngarkimit sistemi përpiqet ta montojë atë dhe bie. Si të ngarkohemi?

Shkarkojmë imazhin, ne kemi shkarkuar CentOS 7, ngarkohemi nga Live CD/DVD (Troubleshooting -> Rescue), montojmë sistemin, rregullojmë /etc/fstab. Këtu gjejmë çelësin e parë — GottfriedWilhelm11646Leibniz!

Krijojmë swap:

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

2. Si zakonisht, nuk ka fjalëkalim, duhen ndryshuar fjalëkalimi root në makinën virtuale. Kjo e kemi bërë tashmë në detyrën e parë. E ndryshojmë dhe hyjmë me sukses në server, por ai menjëherë rifillon. Serveri ribashkohet me një shpejtësi të tillë sa nuk arrijmë as të shikojmë të gjitha loget me kujdes. Si të kuptojmë se çfarë po ndodh?

Përsëri ngarkojmë me livecd, studiojmë me kujdes logët e sistemit dhe për çdo rast shohim në cron, pasi është një periudhë e tillë. Atje gjejmë problemin dhe çelësin e dytë — Alan1912MathisonTuring!

Duhet në /etc/crontab të fshijmë ose të komentojmë rreshtin echo b > /proc/sysrq-trigger.

3. Pas kësaj serveri u ngarkua, dhe mund të kryejmë detyrën e menaxherëve: «Cilat janë adresat e Afrikës?» Kjo informacion, në përgjithësi, është publik. Mund ta gjejmë këtë informacion në internet me frazat «ip address africa», «geoip database». Për zgjidhjen e detyrës mund të përdorim baza të dhënash për shpërndarjen e adresave që janë në dispozicion falas (geoip). Ne si standard përdorëm DB MaxMind GeoLite2, e disponueshme nën licencën Creative Commons Attribution-ShareAlike 4.0.

Do të mundohemi të zgjidhim detyrën tonë duke përdorur vetëm utilitetet e sistemit Linux, por në përgjithësi ajo mund të zgjidhet në shumë mënyra: me ndihmën e utiliteteve për filtrimin e tekstëve dhe me skripte në gjuhë të ndryshme programimi.

Për fillim, thjesht do të marrim çiftet «IP-dërguesi — marrësi» nga logu i postës /var/log/maillog (do të ndërtomë tabelën e marrësve të emailit — IP dërguesi). Kjo mund të bëhet me komandën e tillë:

$ 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

Dhe para se të vazhdojmë me përgatitjen e bazës së të dhënave për adresat në Afrikë, le të shqyrtojmë IP-të kryesore të dërguesve.

$ 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

Nga të gjithë, tre marrësit e parë dallohet me numrin e mesazheve të dërguara. Nëse bëjmë grep për IP-të e dërguesve që kanë dërguar në adresat e këtij top-3, mund të vërehet një dominim evident i disa rrjetesh:

$ 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

Shumica e rrjeteve 105/8, 41/8, 196/8, 197/8 është ndarë nga AFRINIC — një nga pesë regjistrat rajonalë të internetit që kryejnë shpërndarjen e burimeve të internetit. AFRINIC shpërndan hapësirën adresore në territorin e Afrikës. Ndërsa 41/8 iu përket plotësisht AFRINIC.

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

Prandaj, përgjigja e detyrës, në të vërtetë, ndodhet pikërisht në log.

$ 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

Në këtë fazë, ne marrim stringun «LinuxBenedictTorvadst».

Çelësi i saktë: «LinusBenedictTorvalds».

Stringu i marrë ka një gabim në krahasim me çelësin e saktë në 3 karakteret e fundit. Kjo ndodh për shkak se rrjetet që zgjodhëm nuk janë ndarë plotësisht për vendet e Afrikës dhe si janë shpërndarë email-et për IP-të në logun tonë.

Me një sqarim të mjaftueshëm të rrjeteve më të mëdha, të ndara për vendet e Afrikës, mund të marrim një përgjigje të saktë.

$ 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

Problemi mund të zgjidhet edhe në një tjetër mënyrë.
Shkarkojmë MaxMind, e shpaketojmë dhe këto tri komanda gjithashtu zgjidhin problemin tonë.

$ 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

Në një mënyrë ose një tjetër, në fund llogaritëm statistikat dhe menaxherët morën të dhënat e nevojshme për punë!

3. Hapi i tretë

Hapi i tretë është disi i ngjashëm me të parin - gjithashtu duhet të riparojmë shërbimin e ngrohtë, por është më e komplikuar se në detyrën e parë.

3.1. Fakte interesante

Në 15 minutat e para, tre lojtarë gjetën çelësin e parë, ndërsa 2 orë e 20 minuta pas fillimit të fazës, fituesi ynë përfundoi detyrën.

3.2. Detyra

Ke filluar punë në një kompani ku të gjithë dokumentet ruhen në serverin e brendshëm Wiki. Vitin e kaluar, inxhinieri kërkoi 3 disqe të rinj për serverin, përveç një ekzistuesi, duke argumentuar se për qëndrueshmërinë e sistemit duhej të vendoseshin disqet në disa grupe. Fatkeqësisht, disa javë pas instalimit të tyre, inxhinieri u largua për pushime në Indi dhe nuk u kthye.

Për disa vite serveri ka funksionuar pa probleme, por disa ditë më parë rrjeti i kompanisë u hackua. Sipas udhëzimeve, punonjësit e sigurisë nxorën disqet nga serveri dhe ia dërguan ty. Gjatë transportit, një disk u humb përfundimisht.

Duhet të rikthehet funksionaliteti i Wiki-t, përpara gjithçka nevojitet përmbajtja e faqeve të wiki-t. Një pjesë e tekstit që ndodhej në një nga këto faqe është passwordi për serverin 1C dhe është urgjentisht e nevojshme për bllokimin e tij.

Për më tepër, diku në faqet wiki ose ndonjë vend tjetër ishin fjalëkalimet për serverin e log-eve dhe serverin e videovigjilencës, të cilat gjithashtu është e dëshirueshme t'i rikuperojmë, pa to hulumtimi i incidentit është i pamundur. Si gjithmonë, presim një zgjidhje të shpejtë të çështjes!

3.3. Zgjidhja

1. Provoni të ngarkoni njëri pas tjetrit nga ato disqe që kemi dhe kudo marrim të njëjtin mesazh:

No bootable medium found! System halted 

Duhet të ngarkojmë nga ndonjë gjë. Përsëri na shpëton ngarkimi nga Live CD/DVD (Troubleshooting -> Rescue). Gjatë ngarkimit, përpiqemi të gjejmë pjesën ngarkuese, nuk e gjejmë, arrijmë në shell. Provoni të studioni se çfarë dhe si me disqet. Dihet se ata janë tre. Mjetet për këtë janë më shumë në versionin 7 të CentOS, ku ka komandat blkid ose lsblk, të cilat na tregojnë të gjitha informacionet në lidhje me disqet.

Si dhe çfarë bëjmë:

$ ls /dev/sd*

Menjëherë duket se

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

Mund të ngremë sdb1, duket se është pjesa ngarkuese e CentOS 6.

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

Qartë, shkojmë në pjesën grub dhe atje gjejmë çelësin e parë — James191955Gosling në një skedar të pazakontë.

2. Pohojim pvs dhe lvs, pasi punojmë me LVM. Shohim se duhet të jenë 2 volume fizike, njëra nuk gjendet dhe ankohet për uid të humbur. Shohim se duhet të jenë 2 volume logjike: root dhe swap, ndërsa root është pjesërisht i humbur (atributi P në volume). Nuk e kemi mundësinë ta montojmë, e cila është shpërthyese! Na nevojitet shumë.

Ka edhe 2 disqe të tjera, i shqyrtojmë, i mbledhim dhe i montojmë:

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

Shohim, është pjesa boot e CentOS 6 dhe një kopje e asaj që është tashmë në /dev/sdb1, dhe këtu sërish çelësi i njëjtë — DennisBMacAlistairCRitchie!
Shohim si është ndërtuar /dev/md127.

$ mdadm --detail /dev/md127

Shohim se duhet të ketë qenë ndërtuar nga 4 disqe, dhe është ndërtuar nga dy /dev/sda1 dhe /dev/sdc1, ata duhet të kenë qenë numrat 2 dhe 4 në sistem. Supozuam se nga /dev/sda2 dhe /dev/sdc2 mund të ndërtohet gjithashtu një grumbull. Nuk është e qartë pse nuk ka metadata mbi ta, por kjo është në dorën e administratorit, i cili ndodhet diku në Goa. Supozuam se këtu duhet të jetë RAID10, megjithatë ka variante. Ndërtojmë:

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

Shihni blkid, pvs, lvs. Zbulojmë se kemi ndërtuar volume fizike, të cilin na kishte munguar më parë.

Menjëherë u riparua lvroot, e montojmë, por paraprakisht aktivizojmë VG:

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

Dhe aty ka gjithçka, përfshirë çelësin në direktorinë shtëpiake root — /root/sweet.

3. Po përpiqemi ta ringjallim serverin tonë për ta bërë atë të fillojë normalisht. Të gjithë volume logjikë nga /dev/md0 (ku e gjetëm gjithçka) i zhvendosim në /dev/sdb2, ku fillimisht funksiononte i gjithë serveri.

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

Shkëputim serverin, heqim disqet 1 dhe 3, lëmë të dytin, ngarkojmë me Live CD/DVD në Rescue. Gjejmë ndarjen boot, rikthejmë bootloader në grub:

root (hd0,0)
setup (hd0)

Heqim diskun boot dhe ngarkojmë me sukses, por faqja nuk funksionon.

4. Ka dy mundësi për të nisur faqen: të konfigurojmë Apache nga fillimi ose të përdorim nginx të parakonfiguruar me php-fpm:

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

Më në fund, duhet të nisim MySQL:

$ /etc/init.d/mysqld start

Ai nuk nis, dhe zgjidhja është në /var/log/mysql. Sa herë që të zgjidhni problemin me MySQL, faqja do të funksionojë, në faqen kryesore do të jetë çelësi — RichardGCCMatthewGNUStallman! Tani kemi qasje në 1C, dhe punonjësit do të mund të marrin pagën. Ndërsa për ty mbetet shumë punë për të krijuar infrastrukturen dhe sigurinë në kompani.

Po ashtu, mund të ndajmë përsëri listën e librave që na ndihmuan ne dhe pjesëmarrësit tanë të përgatiten për lojën: linux.mail.ru/books.

Faleminderit që ishit me ne! Ndiqni njoftimet për lojërat e ardhshme!

Burimi: habr.com

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster