
Më 25 mars hapëm regjistrimin për , kjo është një lojë për adhuruesit dhe njohësit e sistemit operativ Linux. Disa statistika: në lojë u regjistruan 1117 persona, prej të cilëve 317 gjetën të paktën një çelës, 241 e përfunduan me sukses detyrën e fazës së parë, 123 të dytës dhe 70 kaluan fazën e tretë. Sot loja jonë ka përfunduar dhe ne përgëzojmë fituesit tanë!
- Vendi i parë e zuri Aleksandër Teldakov.
Aleksandri tha për veten se është një administrator tipik. Jeton në Volgograd, ka administruar sisteme të ndryshme Unix-like për rreth 20 vjet. Ka punuar për furnizuesit e internetit, në bankë dhe integrues sistemi. Tani punon në distancë në një firmë të vogël, duke u marrë me infrastrukturën cloud për një klient të madh në huaj. I pëlqen të lexojë dhe të dëgjojë muzikë. Rreth lojës, Aleksandri tha se i pëlqeu loja në përgjithësi, ai i pëlqen këto lloj detyrash. Në një nga kompanitë në intervistën e punës, u angazhua në diçka të ngjashme me Hackerrank, ishte interesante. - Vendi i dytë — Roman Suslov.
Roman është nga Moska. Ai është 37 vjeç. Punon si inxhinier Linux/Unix në kompaninë 'Infosistem Jet'. Për punën e tij, i është dashur të merret me administrimin dhe zgjidhjen e problemeve në sistemet Linux/Unix + SAN. Interesat e tij janë të ndryshme: sistemet Linux, programimi, inxhinieria e kthimit, siguria e informacionit, Arduino. Rreth lojës Roman vuri në dukje se i pëlqeu loja në përgjithësi. 'E ngroha pak mendjen time dhe u çlirova nga monotonitë e punës së përditshme. 🙂 Do të doja më shumë detyra, sepse nuk arrita të hyj në shije përpara se loja të përfundonte'. - E treta — alex3d.
Aleks jeton në Moskë, merret me zhvillimin e softuerit. 'Faleminderit për konkursin, ishte interesante të testoja aftësinë time google-fu'.
Gjithashtu në renditjen e 10 lojtarëve më të mirë:
- Yevgeniy Saldayev
- Markel Moxnachevskiy
- Konstantin Konosov
- Pavel Sergeev
- Vladimir Bovaev
- Ivan Bubnov
- Pavlo Klets
Ne e kuptojmë se ka shumë mundësi për zgjidhjen e të gjitha detyrave tona, më poshtë janë disa nga mundësitë e mundshme të zgjidhjes.
1. Faza e parë
Ne e quajtim 'A je padyshim admin?', pasi detyra ishte mjaft e thjeshtë — të riparosh shërbimin e ngrohtë dhe të butë.
1.1. Fakte interesante:
Dy lojtarë gjetën çelësin e parë brenda 15 minuta të para të lojës, dhe brenda një ore kishim tre liderë që e përfunduan detyrën.
1.2. Detyra
Ke ke ti punuar në një kompani ku për një kohë të gjatë nuk kishte një specialist të kualifikuar në teknologjinë e informacionit. Para se të fillosh të vendosësh rend, duhet të zgjidhësh një problem të nxehtë që po bllokon punën e zyrës.
Pastruesja preku kabllon e furnizimit të kabinetit të serverit me mop. Energjia u rikthye, por një faqe e rëndësishme krijimi ende nuk funksionon. Faqja është e rëndësishme për shkak se kompania nuk është shumë e shqetësuar për sigurinë informative, dhe mund të gjesh në faqe të parë fjalëkalimin e administratorit të kompjuterit të drejtorit të përgjithshëm në mënyrë të hapur.
Disa ditë më parë fjalëkalimi u ndryshua, por të gjithë e harruan, dhe drejtori nuk mund të punojë. Ka thashetheme që ky aparat kishte edhe çelësa që mund të na ndihmojnë në dekriptimin e kopjës rezervë të dokumenteve të kontabilitetit.
Të gjithë presin një zgjidhje operative për këtë çështje!
1.3. Zgjidhja
1. E para duhet të ndryshosh fjalëkalimin root në makinën virtuale për të marrë qasje në të. Kur e nisim, vëmë re se kjo është Ubuntu 16.04 Server.
Për të ripërsëritur fjalëkalimin e root-it, rindezim makinën, në momentin e shfaqjes së menusë grub, kalojmë në redaktimin e opsionit Ubuntu duke shtypur butonin «e». Redaktojmë rreshtin linux, duke shtuar në fund init=/bin/bash. Ngarkojmë përmes Ctrl+x dhe marrim bash. Rimontojmë rrënjën me rw dhe ndryshojmë fjalëkalimin:
$ mount -o remount,rw /dev/mapper/ubuntu--vg-root
$ passwdMos harro për sync, dhe rindezim.
2. Në kushtet thuhet se ne nuk kemi një server web, shikojmë:
$ curl localhost
Not Found
The requested URL / was not found on this server.
Apache/2.4.18 Pra, faktikisht Apache është i aktivizuar, por përgjigjet me kodin 404. Shikojmë konfigurimin:
$ vim /etc/apache2/sites-enabled/000-default.confKëtu e gjejmë çelësin — StevenPaulSteveJobs.
Kontrollojmë rrugën /usr/share/WordPress — nuk ekziston, por ka /usr/share/wordpress. Korrigjojmë konfigurimin dhe rindezim apache.
$ systemctl restart apache23. 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 1488A nuk është e aktivizuar BD?
$ systemctl status mysql
Active: active (running) Çfarë po ndodh? Duhet të shqyrtojmë. Për këtë, duhet të marrim qasje në MySQL, si të bëhet kjo është përshkruar në . Një nga pikat e dokumentacionit na rekomandon të shkruajmë opsionin skip-grant-tables në /etc/mysql/mysql.conf.d/mysqld.cnf. Këtu gjithashtu ndodhet çelësi — AugustaAdaKingByron.
Korrigjojmë të drejtat për përdoruesin 'wp'@'localhost'. Aktivizojmë MySQL, e bëjmë atë të qasshëm përmes rrjetit, duke komentuar në konfigurim opsionin skip-networking.
4. Pas veprimeve të kryera, serveri web aktivizohet, por faqja ende nuk funksionon, pasi
Kujdes: require_once( /usr/share/wordpress/wp-content/themes/twentysixteen/footer.php): dështim për të hapur rrjedhën: Leje e mohuar në /usr/share/wordpress/wp-includes/template.php në linjën 562Rregullojmë të drejtat në skedarin.
$ chmod 644 /usr/share/wordpress/wp-content/themes/twentysixteen/footer.php
Rivendosim faqen, hyjmë në faqen e internetit dhe gjejmë çelësin — BjarneStroustrup! Gjetëm të tre çelësat, drejtori ynë mund të punojë, dekriptuam skedarët e kontabilitetit. Të gjithë janë të lumtur, ndërsa ty të mbeten shumë punë për të vendosur infrastrukturën, backups dhe sigurinë në kompani.
2. Fazë e dytë
Duhej të zgjidhet detyra për mbledhjen e analitikës. Të gjithë i pëlqejnë analitikët — kush dhe nga ku dhe me çfarë sasish vijnë. Ne shpikëm një rast, por me të cilin çdo inxhinier mund të përballet në jetën e tij.
2.1. Fakte interesante
Një nga lojtarët tanë hyri me çelësin e saktë brenda 10 minutave të para të lojës, dhe pas një ore kishim një lider që përfundoi detyrën.
2.2. Detyra
Ti ke filluar punë në kompani, menaxherët erdhën dhe të kërkuan të gjejnë, kujt iu dërguan emailet nga Afrika. Duhet të ndërtohet një top-21 adresash marrësish për to. Shkronjat e para të adresave të marrësve janë çelësi. Një porosi: serveri i postës, përmes të cilit janë dërguar emailet, nuk ngarkohet. Të gjithë presin një zgjidhje të shpejtë!
2.3. Zgjidhja
1. Serveri nuk ngarkohet për shkak të një seksi swap që nuk ekziston në fstab, gjatë ngarkimit sistemi përpiqet ta montohet dhe bie. Si të ngarkohet?
Shkarkojmë imazhin, ne shkarkuam CentOS 7, ngarkohemi me Live CD/DVD (Troubleshooting -> Rescue), montohemi në sistem, rregullojmë /etc/fstab. Këtu gjejmë çelësin e parë — GottfriedWilhelm11646Leibniz!
Krijojmë swap:
$ lvcreate -n swap centos -L 256M
$ sync && reboot2. Si gjithmonë nuk ka fjalëkalim, duhet të ndryshojmë fjalëkalimin root në makinë virtuale. Të gjitha këto i kemi bërë në detyrën e parë. E ndryshojmë dhe hyjmë me sukses në server, por ai menjëherë rinis. Serveri rinarohet me një shpejtësi që nuk arrijmë as të shohim log-et me vëmendje. Si të kuptojmë çfarë po ndodh?
Sërish ngarkohemi me livecd, studiojmë me kujdes log-et e sistemit dhe për siguri shqyrtojmë cron-in, për shkak të një frekuence të tillë. Atje gjejmë problemin dhe çelësin e dytë — Alan1912MathisonTuring!
Duhet të /etc/crontab hiqni ose komentonjë këtë rresht echo b > /proc/sysrq-trigger.
3. Pas serveri ngarkohet, mund të kryhen detyrat e menaxherëve: "Cilat janë adresat e Afrikës?" Këto informacione, në përgjithësi, janë publik. Informacioni mund të gjendet në internet duke përdorur shprehjet "ip address africa", "geoip database". Për të zgjidhur këtë problem, mund të përdoren bazat e të dhënave të shpërndarjes së adresave (geoip) që janë të qasshme falas. Ne përdorëm një bazë të dhënash si sistem standard. , e cila është në dispozitë me licencën Creative Commons Attribution-ShareAlike 4.0.
Le të provojmë të zgjidhim problemin tonë duke përdorur vetëm utilitetet e sistemit Linux, megjithatë kjo mund të zgjidhet në shumë mënyra, si përmes utiliteteve të filtrimit të tekstit dhe skripteve në gjuhë të ndryshme programimi.
Për fillim, le të nxjerrim çiftet "IP-dërguesi - marrësi" nga logu i postës elektronike /var/log/maillog (do të ndërtojmë një tabelë të marrësve të emailit - IP të dërguesit). Kjo mund të bëhet me këtë komandë:
$ 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.txtDhe përpara se të vazhdojmë me krijimin e bazës së të dhënave për adresat e Afrikës, le të shohim 40 adresat e IP-ve të dërguesve më të shquar.
$ 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
Mes të gjithë dërguesve, tre marrësit e parë të topit bien në sy për numrin e tyre të mesazheve. Nëse grep-ojmë adresat IP të dërguesve që kanë dërguar në adresat e këtyre tre, mund të vërejmë një dominim të caktuar të disa rrjeteve:
$ 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 165Shumica e rrjeteve 105/8, 41/8, 196/8, 197/8 janë të ndara nga AFRINIC - një nga pesë regjistrat rajonalë të internetit që menaxhojnë shpërndarjen e burimeve të internetit. AFRINIC shpërndan hapësirën adresë në territorin e Afrikës. Dhe 41/8 është plotësisht në pronësi të AFRINIC.
https://www.nic.ru/whois/?searchWord=105.0.0.0
https://www.nic.ru/whois/?searchWord=41.0.0.0
Kështu, përgjigja për problemin është në vetë logun.
$ 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.ruNë këtë fazë ne marrim stringun «LinuxBenedictTorvadst».
Çelësi i saktë: «LinusBenedictTorvalds».
Stringu i marrë përmban një gabim në tre karakteret e fundit në krahasim me çelësin e saktë. Kjo lidhet me faktin se rrjetet që kemi zgjedhur nuk janë plotësisht të dedikuara për vendet e Afrikës dhe mënyrës se si janë shpërndarë email-et sipas IP-adresave në logun tonë.
Me një sqarim të mjaftueshëm të rrjeteve më të mëdha të dedikuara vendeve të 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 Detyra mund të zgjidhet edhe në një mënyrë tjetër.
Shkarkojmë MaxMind, e nxjerrim, dhe këto tri komanda gjithashtu zgjidhin detyrën 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 në një tjetër, ne përfundimisht llogaritëm statistikën dhe menaxherët morën të dhënat e nevojshme për punë!
3. Faza e tretë
Faza e tretë është disi e ngjashme me të parën — gjithashtu duhet të riparojmë shërbimin e ngrohtë lampë, por gjithçka ë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ë, pas 2 orësh dhe 20 minutash nga fillimi i fazës, fituesi ynë e përfundoi detyrën.
3.2. Detyra
Je angazhuar në një kompani ku të gjitha dokumentet e kompanisë ruhen në serverin e brendshëm Wiki. Vitin e kaluar një inxhinier porositi 3 disqe të reja për serverin përveç një ekzistuesi, duke argumentuar se për besueshmërinë e sistemit duhet të vendosen disqet në disa grupe. Fatkeqësisht, disa javë pas instalimit të tyre, inxhinieri u nis për të pushuar në Indi dhe nuk u kthye.
Për disa vite, serveri punoi pa probleme, por disa ditë më parë rrjeti i kompanisë u hakuar. Sipas udhëzimeve, punonjësit e sigurisë e nxorrën disqet nga serveri dhe i dërguan ty. Në procesin e transportit, një disk u humb përfundimisht.
Duhet të rikthehet funksionaliteti i Wiki-s, kryesisht na intereson përmbajtja e faqeve të wiki-t. Një pjesë tekstuale që ishte në njërën nga faqet e kësaj wiki është fjalëkalimi për serverin 1C dhe na nevojitet me urgjencë për ta çelur atë.
Përveç kësaj, diku në faqet e wiki-t ose në një vend tjetër ishin fjalëkalime për serverin e regjistrave dhe serverin për monitorim, të cilat gjithashtu preferohet të rikuperohen, pa to hetimi i incidentit është i pamundur. Si gjithmonë, presin zgjidhje të shpejtë të problemit!
3.3. Zgjidhja
1. Provojmë të ngarkohemi nd Sequentially nga disqet që kemi dhe kudo marrim mesazhin e njëjtë:
No bootable medium found! System halted
Duhet të ngarkohemi nga dikush. Përsëri, ngarkimi nga Live CD/DVD shpëton (Troubleshooting -> Rescue). Gjatë ngarkimit, përpiqemi të gjejmë seksionin e ngarkueshëm, por nuk e gjejmë, arrijmë në shell. Provojmë të studiojmë se çfarë dhe si me disqet. Dihet se janë tre. Kemi më shumë mjete në versionin e 7-të të CentOS, ku ka komandat blkid ose lsblk, të cilat na tregojnë të gjitha informacionet në lidhje me disqet.
Çfarë dhe si bëjmë:
$ ls /dev/sd*Menjëherë duket se
/dev/sdb1 - ext4
/dev/sdb2 - часть lvm
/dev/sda1 и /dev/sdc1 - части рейда
/dev/sda2 и /dev/sdc2 - про них ничего не известно на текущий моментMontojmë sdb1, duket se ky është seksioni ngarkues i CentOS 6.
$ mkdir /mnt/sdb1 && mount /dev/sdb1 /mnt/sdb1Dukshëm shkojmë në seksionin grub dhe atje gjejmë çelësin e parë — James191955Gosling në një skedar të pazakontë.
2. Studjojmë pvs dhe lvs, pasi punojmë me LVM. Shohim se duhet të jenë 2 volume fizike, njëri nuk gjendet dhe ankohet për uid të humbur. Shohim se duhet të jenë 2 volume logjik: root dhe swap, ku root është pjesërisht i humbur (atributi P te volume). Nuk arrijmë ta montojmë, gjë që është një dështim! Na nevojitet shumë.
Ka edhe 2 disqe të tjera, i shohim ato, masoni dhe montoni:
$ mdadm --examine --verbose --scan
$ mdadm --assemble --verbose --scan
$ mkdir /mnt/md127 && mount /dev/md127 /mnt/md127 Shohim, duket se ky është seksioni ngarkues i CentOS 6 dhe një kopje e asaj që kemi tashmë /dev/sdb1, dhe këtu përsëri ai i njëjti çelës — DennisBMacAlistairCRitchie!
Shohim si është ndërtuar /dev/md127.
$ mdadm --detail /dev/md127
Shohim se duhet të ketë qenë ndërtuar nga 4 disqe, u ndërtua nga dy /dev/sda1 dhe /dev/sdc1, ata duhet të kenë qenë numrat 2 dhe 4 në sistem. Supozuam se /dev/sda2 dhe /dev/sdc2 mund të ndërtohet një array. Nuk kuptohet pse nuk ka metadata mbi to, por kjo është në përgjegjësinë 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
Shohim blkid, pvs, lvs. Zbulojmë se kemi ndërtuar një volume fizik që na mungonte më parë.
Menjëherë u rivendos lvroot, e mountojmë atë, por fillimisht aktivizojmë VG:
$ vgchange -a y
$ mkdir /mnt/lvroot && mount /dev/mapper/vg_c6m1-lv_root /mnt/lvroot
Dhe atje ka gjithçka, duke përfshirë çelësin në direktorinë e shtëpisë root — /root/sweet.
3. Po përpiqemi përsëri të rikthejmë serverin tonë në funksionim normal. Të gjitha volumet logjike nga /dev/md0 (ku kemi gjetur gjithçka) i shtyjmë në /dev/sdb2, ku fillimisht ka funksionuar gjithë serveri.
$ pvmove /dev/md0 /dev/sdb2
$ vgreduce vg_c6m1 /dev/md0Fikim serverin, heqim disqet 1 dhe 3, mbajmë të dytin, ngarkojmë nga Live CD/DVD në Rescue. Gjejmë particionin e ngarkesës, rikthejmë ngarkuesin në grub:
root (hd0,0)
setup (hd0)
Heqim diskun e ngarkesës dhe ngarkojmë me sukses, por faqja nuk punon.
4. Ka dy mundësi për ta ndezur faqen: ta konfigurojmë nga fillimi Apache ose të përdorim nginx të konfiguruar më parë 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 ngarkohet, dhe zgjidhja fshihet 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 pagat. Ndërkohë, ti ke gjithmonë përpara punë të shumtë për të rregulluar infrastrukturën dhe sigurinë në kompani.
Po ashtu mund të ndajmë përsëri listën e librave, që na ndihmuan neve dhe pjesëmarrësve tanë të përgatitemi për lojën: .
Faleminderit që ishit me ne! Ndiqni njoftimet për lojërat e ardhshme!
Burimi: habr.com
