Mnamo Machi 25 tulifungua usajili kwa
- Alexander Teldekov alichukua nafasi ya kwanza.
Alexander alijisemea kuwa yeye ndiye msimamizi wa kawaida wa mfumo. Anaishi Volgograd, amekuwa akisimamia mifumo mbali mbali ya Unix kwa karibu miaka ishirini. Nilifanikiwa kufanya kazi katika watoa huduma za Intaneti, benki, na kiunganishi cha mfumo. Sasa anafanya kazi kwa mbali katika kampuni ndogo, akifanya kazi kwenye miundombinu ya wingu kwa mteja mkubwa wa kigeni. Anapenda kusoma na kusikiliza muziki. Kuhusu Mchezo, Alexander alisema kwamba alipenda mchezo kwa ujumla, anapenda kazi kama hizo. Wakati wa mahojiano katika moja ya makampuni nilifanya kitu sawa na Hackerrank, ilikuwa ya kuvutia. - Nafasi ya pili - Roman Suslov.
Riwaya kutoka Moscow. Ana miaka 37. Anafanya kazi kama mhandisi wa Linux/Unix katika Jet Infosystems. Kazini, lazima nisimamie na kusuluhisha mifumo ya Linux/Unix + SAN. Maslahi ni tofauti: Mifumo ya Linux, programu, uhandisi wa nyuma, usalama wa habari, Arduino. Kuhusu Mchezo Roman alibainisha kuwa alipenda mchezo kwa ujumla. "Nilinyoosha akili yangu kidogo na kuchukua mapumziko kutoka kwa maisha ya kila siku ya kijivu ya kazi ya kila siku. π Ningependa kuwa na kazi zaidi, vinginevyo kabla sijapata wakati wa kuionja, mchezo ulikuwa tayari umekwisha. - Tatu - alex3d.
Alex anaishi Moscow na anafanya kazi katika maendeleo ya programu. "Asante kwa shindano, ilipendeza kujaribu ujuzi wangu wa google-fu."
Pia katika orodha ya wachezaji 10 bora:
- Yevgeniy Saldayev
- Markel Mokhnachevsky
- Konstantin Konosov
- Pavel Sergeev
- Vladimir Bovaev
- Ivan Bubnov
- Pavlo Klets
Tunaelewa kuwa kuna chaguzi nyingi za kutatua shida zetu zote; baadhi ya suluhisho zinazowezekana zimefafanuliwa hapa chini.
1. Hatua ya kwanza
Tuliiita "Je, wewe ni msimamizi?", Kwa kuwa kazi ilikuwa rahisi sana - kurekebisha huduma ya taa ya joto.
1.1. Ukweli wa Kuvutia:
Wachezaji wawili walipata ufunguo wa kwanza katika dakika 15 za kwanza za mchezo, na katika saa ya kwanza tulikuwa na viongozi watatu ambao walikamilisha kazi hiyo.
1.2. Zoezi
Ulikwenda kufanya kazi katika kampuni ambapo kwa muda mrefu hapakuwa na mtaalamu wa teknolojia ya habari. Kabla ya kuanza kuweka mambo kwa utaratibu, unahitaji kutatua tatizo la kuungua ambalo linazuia kazi ya ofisi.
Mwanamke wa kusafisha alishika kebo ya umeme ya kabati la seva kwa mop. Nguvu imerejeshwa, lakini tovuti muhimu sana bado haifanyi kazi. Tovuti ni muhimu kwa sababu kampuni haina wasiwasi sana juu ya usalama wa habari, na kwenye ukurasa kuu wa hii unaweza kupata kwa maandishi wazi nenosiri la msimamizi kwa kompyuta ya Mkurugenzi Mtendaji.
Siku nyingine nenosiri lilibadilishwa, lakini kila mtu alisahau mpya, mkurugenzi hawezi kufanya kazi. Kuna uvumi kwamba kulikuwa na funguo zaidi kwenye mashine hii ambazo zinaweza kutusaidia kubainisha nakala rudufu ya hati za uhasibu.
Kila mtu anatarajia utatuzi wa haraka wa suala hilo!
1.3. Suluhisho
1. Awali ya yote, unahitaji kubadilisha nenosiri la mizizi kwenye mashine ya kawaida ili kupata upatikanaji wake. Wakati wa kuanza, tunagundua kuwa hii ni Ubuntu 16.04 Server.
Ili kuweka upya nenosiri la mizizi, tunaanzisha upya mashine, wakati wa kupakia, wakati orodha ya grub inavyoonyeshwa, nenda kuhariri kipengee cha Ubuntu na kifungo cha "e". Hariri linux ya mstari, uiongeze hadi mwisho init=/bin/bash
. Tunapakia kupitia Ctrl+x, tunapata bash. Weka tena mzizi na rw, badilisha nenosiri:
$ mount -o remount,rw /dev/mapper/ubuntu--vg-root
$ passwd
Usisahau kuhusu kusawazisha, anzisha upya.
2. Hali inasema kwamba seva yetu ya wavuti haifanyi kazi, angalia:
$ curl localhost
Not Found
The requested URL / was not found on this server.
Apache/2.4.18
Hiyo ni, kwa kweli, Apache inaendesha, lakini inajibu na msimbo 404. Hebu tuangalie usanidi:
$ vim /etc/apache2/sites-enabled/000-default.conf
Pia kuna ufunguo hapa - StevenPaulSteveJobs.
Kuangalia njia /usr/share/WordPress
- hakuna kitu kama hicho, lakini kuna /usr/share/wordpress
. Hariri usanidi na uanze tena Apache.
$ systemctl restart apache2
3. Jaribu tena, tunapata hitilafu:
Warning: mysqli_real_connect(): (HY000/2002): Connection refused in /usr/share/wordpress/wp-includes/wp-db.php on line 1488
Hifadhidata haifanyi kazi?
$ systemctl status mysql
Active: active (running)
Kuna nini? Tunahitaji kufikiri. Ili kufanya hivyo, unahitaji kupata ufikiaji wa MySQL, kama ilivyoelezewa katika skip-grant-tables
Π² /etc/mysql/mysql.conf.d/mysqld.cnf
. Pia kuna ufunguo hapa - AugustaAdaKingByron.
Kurekebisha haki za mtumiaji 'wp'@'localhost'
. Tunazindua MySQL, kuifanya ipatikane kwenye mtandao, tukitoa maoni juu ya chaguo katika usanidi skip-networking
.
4. Baada ya hatua hizi, seva ya wavuti huanza, lakini tovuti bado haifanyi kazi kwa sababu
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
Tunahariri haki za faili.
$ chmod 644 /usr/share/wordpress/wp-content/themes/twentysixteen/footer.php
Tunaburudisha ukurasa, nenda kwenye tovuti na upate ufunguo - BjarneStroustrup! Tulipata funguo zote tatu, mkurugenzi wetu anaweza kufanya kazi, tuliondoa faili za uhasibu. Kila mtu ana furaha, na una kazi nyingi mbele yako ya kuweka miundombinu, chelezo na usalama katika kampuni.
2. Hatua ya pili
Ilikuwa ni lazima kutatua tatizo la kukusanya analytics. Kila mtu anapenda uchanganuzi - ni nani anayetumia, wapi na kwa idadi gani. Tulikuja na kesi ambayo wahandisi wote wanaweza kukutana kwa namna moja au nyingine maishani.
2.1. Mambo ya Kuvutia
Mmoja wa wachezaji wetu aliingia ufunguo sahihi ndani ya dakika 10 za kwanza za mchezo, na ndani ya saa ya kwanza tulikuwa na kiongozi ambaye alikamilisha kazi.
2.2. Zoezi
Ulikwenda kufanya kazi kwenye kampuni, wasimamizi walikuja kwako na kukuuliza utafute barua zilitumwa kutoka Afrika. Tunahitaji kuunda anwani 21 za juu za wapokeaji kulingana nazo. Herufi za kwanza za anwani za wapokeaji ndizo ufunguo. Jambo moja: seva ya barua ambayo barua zilitumwa haipakia. Kila mtu anatarajia utatuzi wa haraka wa suala hilo!
2.3. Suluhisho
1. Seva haiwashi kwa sababu ya kizigeu cha ubadilishaji kisichokuwepo katika fstab; wakati wa kupakia, mfumo hujaribu kuiweka na kuacha kufanya kazi. Jinsi ya boot?
Pakua picha, tulipakua CentOS 7, boot kutoka Live CD/DVD (Troubleshooting -> Rescue), weka mfumo, hariri /etc/fstab
. Mara moja tunapata ufunguo wa kwanza - GottfriedWilhelm11646Leibniz!
Unda ubadilishaji:
$ lvcreate -n swap centos -L 256M
$ sync && reboot
2. Kama kawaida, hakuna nenosiri, unahitaji kubadilisha nenosiri la mizizi kwenye mashine ya kawaida. Tayari tulifanya hivi katika kazi ya kwanza. Tunabadilisha na kuingia kwa mafanikio kwenye seva, lakini mara moja huenda kwenye kuanzisha upya. Seva imejaa kwa kasi kiasi kwamba huna hata wakati wa kuangalia magogo yote kwa makini. Jinsi ya kuelewa kinachotokea?
Tena tunaanzisha kutoka kwa livecd, soma kwa uangalifu kumbukumbu za mfumo na, ikiwa tu, angalia kwenye cron, kwa kuwa periodicity kama hiyo. Huko tunapata shida na ufunguo wa pili - Alan1912MathisonTuring!
Haja ndani /etc/crontab
kufuta au kutoa maoni mstari nje echo b > /proc/sysrq-trigger
.
3. Baada ya hapo seva imepakia, na unaweza kukamilisha kazi ya wasimamizi: "Anwani gani barani Afrika?" Habari hii kwa ujumla inapatikana kwa umma. Unaweza kupata taarifa hii kwenye Mtandao kwa kutumia maneno "ip address africa", "geoip database". Ili kutatua tatizo, unaweza kutumia hifadhidata za usambazaji wa anwani zinazopatikana kwa uhuru (geoip). Tulitumia hifadhidata kama kiwango
Wacha tujaribu kusuluhisha shida yetu kwa kutumia huduma za mfumo wa Linux tu, lakini kwa ujumla inaweza kutatuliwa kwa idadi kubwa ya njia: kutumia huduma za kuchuja maandishi na kutumia maandishi katika lugha anuwai za programu.
Kuanza, tutapata tu jozi za "IP ya mpokeaji-mpokeaji" kutoka kwa kumbukumbu ya barua. /var/log/maillog
(hebu tujenge jedwali la wapokeaji wa barua pepe - IP ya mtumaji). Hii inaweza kufanywa kwa amri ifuatayo:
$ 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
Na kabla hatujaendelea na kuandaa hifadhidata ya anwani za Kiafrika, acheni tuangalie anwani kuu za IP za watumaji.
$ 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]
Kati ya wote, wapokeaji watatu wa kwanza kutoka juu wanasimama wazi kwa suala la idadi ya herufi. Ukiweka anwani za IP za watumaji waliotuma kwa anwani kutoka kwenye orodha hii 3 bora, utagundua uwepo wa mitandao fulani:
$ 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
Mitandao mingi ya 105/8, 41/8, 196/8,197/8 imetengwa kwa AFRINIC - mojawapo ya wasajili watano wa mtandao wa kikanda ambao husambaza rasilimali za mtandao. AFRINIC inasambaza nafasi ya anwani barani Afrika. Na 41/8 inahusu AFRINIC kabisa.
https://www.nic.ru/whois/?searchWord=105.0.0.0
https://www.nic.ru/whois/?searchWord=41.0.0.0
Kwa hivyo, jibu la shida ni, kwa kweli, kwenye logi yenyewe.
$ 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]
Katika hatua hii tunapata kamba "LinuxBenedictTorvadst".
Kitufe sahihi: "LinusBenedictTorvalds".
Mfuatano unaotokana una taipo kuhusiana na ufunguo sahihi katika herufi 3 za mwisho. Hii ni kutokana na ukweli kwamba mitandao tuliyochagua haijajitolea kabisa kwa nchi za Kiafrika na jinsi barua pepe zinavyosambazwa na anwani za IP katika kumbukumbu yetu.
Kwa maelezo ya kutosha ya mitandao mikubwa zaidi iliyopewa nchi za Kiafrika, jibu sahihi linaweza kupatikana:
$ 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]
Tatizo linaweza pia kutatuliwa kwa njia nyingine.
Pakua MaxMind, ifungue, na amri tatu zifuatazo pia kutatua tatizo letu.
$ 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
Kwa njia moja au nyingine, hatimaye tulihesabu takwimu, na wasimamizi walipokea data waliyohitaji kufanya kazi!
3. Hatua ya tatu
Hatua ya tatu ni sawa na ya kwanza - unahitaji pia kurekebisha huduma ya taa ya joto, lakini kila kitu ni ngumu zaidi kuliko kazi ya kwanza.
3.1. Mambo ya Kuvutia
Katika dakika 15 za kwanza, wachezaji watatu walipata ufunguo wa kwanza; saa 2 na dakika 20 baada ya kuanza kwa hatua, mshindi wetu alikamilisha kazi.
3.2. Zoezi
Ulienda kufanya kazi kwa kampuni ambapo hati zote za kampuni zimehifadhiwa kwenye seva ya ndani ya Wiki. Mwaka jana, mhandisi aliamuru diski 3 mpya kwa seva pamoja na moja iliyopo, akisema kwamba ili mfumo ustahimili makosa, diski zinahitajika kuwekwa katika safu fulani. Kwa bahati mbaya, wiki chache baada ya ufungaji wao, mhandisi alikwenda likizo kwenda India na hakurudi.
Seva ilifanya kazi bila kushindwa kwa miaka kadhaa, lakini siku chache zilizopita mtandao wa kampuni hiyo ulidukuliwa. Kwa mujibu wa maagizo, wafanyakazi wa usalama waliondoa disks kutoka kwa seva na kukupeleka kwako. Wakati wa usafirishaji, diski moja ilipotea bila kurudi.
Tunahitaji kurejesha utendakazi wa Wiki; kwanza kabisa, tunavutiwa na yaliyomo kwenye kurasa za wiki. Sehemu fulani ya maandishi ambayo ilikuwa kwenye mojawapo ya kurasa za wiki hii ni nenosiri la seva ya 1C na inahitajika haraka ili kuifungua.
Kwa kuongezea, mahali fulani kwenye kurasa za wiki au mahali pengine palikuwa na nywila za seva ya logi na seva ya ufuatiliaji wa video, ambayo pia ingehitajika kupona; bila wao, uchunguzi wa tukio hilo hauwezekani. Kama kawaida, tunatarajia utatuzi wa haraka wa suala hilo!
3.3. Suluhisho
1. Tunajaribu boot moja baada ya nyingine kutoka kwa diski ambazo tunazo na kila mahali tunapokea ujumbe sawa:
No bootable medium found! System halted
Unahitaji boot kutoka kwa kitu. Kuanzisha kutoka kwa CD/DVD ya Moja kwa Moja (Utatuzi wa Shida -> Uokoaji) husaidia tena. Wakati wa kupakia, tunajaribu kupata ugawaji wa boot, hatuwezi kuipata, tunaishia kwenye shell. Tunajaribu kujifunza nini na jinsi ya kufanya na disks. Inajulikana kuwa kuna watatu kati yao. Kuna zana zaidi za hii katika toleo la 7 la CentOS, ambapo kuna amri blkid
au lsblk
, ambayo inatuonyesha habari zote kuhusu disks.
Jinsi na nini tunafanya:
$ ls /dev/sd*
Mara moja ni dhahiri kwamba
/dev/sdb1 - ext4
/dev/sdb2 - ΡΠ°ΡΡΡ lvm
/dev/sda1 ΠΈ /dev/sdc1 - ΡΠ°ΡΡΠΈ ΡΠ΅ΠΉΠ΄Π°
/dev/sda2 ΠΈ /dev/sdc2 - ΠΏΡΠΎ Π½ΠΈΡ
Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ Π½Π° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ
Tunaweka sdb1, ni wazi kuwa hii ni kizigeu cha buti cha CentOS 6.
$ mkdir /mnt/sdb1 && mount /dev/sdb1 /mnt/sdb1
Ni wazi, tunaenda kwenye sehemu ya grub na kupata ufunguo wa kwanza hapo - James191955Gosling katika faili isiyo ya kawaida.
2. Tunasoma pvs na lvs, kwa kuwa tunafanya kazi na LVM. Tunaona kwamba kunapaswa kuwa na kiasi 2 cha kimwili, moja haipatikani na inalalamika kuhusu uid iliyopotea. Tunaona kwamba kunapaswa kuwa na kiasi 2 cha kimantiki: mzizi na ubadilishaji, wakati mzizi umepotea kwa kiasi (sifa ya P ya kiasi). Haiwezekani kupanda, ambayo ni huruma! Tunamuhitaji sana.
Kuna diski 2 zaidi, tunaziangalia, kukusanyika na kuziweka:
$ mdadm --examine --verbose --scan
$ mdadm --assemble --verbose --scan
$ mkdir /mnt/md127 && mount /dev/md127 /mnt/md127
Tunaangalia, tunaweza kuona kuwa hii ni kizigeu cha buti cha CentOS 6 na nakala ya kile ambacho tayari kimewashwa. /dev/sdb1
, na hapa tena ufunguo sawa - DennisBMacAlistairCritchie!
Wacha tuone jinsi inavyokusanywa /dev/md127
.
$ mdadm --detail /dev/md127
Tunaona kwamba inapaswa kukusanywa kutoka kwa diski 4, lakini ilikusanywa kutoka kwa mbili /dev/sda1
ΠΈ /dev/sdc1
, zinapaswa kuwa nambari 2 na 4 kwenye mfumo. Tunadhani kwamba kutoka /dev/sda2
ΠΈ /dev/sdc2
Unaweza pia kukusanya safu. Haijulikani kwa nini hakuna metadata juu yao, lakini hii ni kwa dhamiri ya msimamizi, ambaye yuko mahali fulani huko Goa. Tunadhania kuwa kunapaswa kuwa na RAID10, ingawa kuna chaguzi. Tunakusanya:
$ mdadm --create --verbose /dev/md0 --assume-clean --level=10 --raid-devices=4 missing /dev/sda2 missing /dev/sdc2
Tunaangalia blkid, pvs, lvs. Tunagundua kwamba tumekusanya kiasi halisi ambacho tulikosa hapo awali.
lvroot ilirekebishwa mara moja, tukaiweka, lakini kwanza washa VG:
$ vgchange -a y
$ mkdir /mnt/lvroot && mount /dev/mapper/vg_c6m1-lv_root /mnt/lvroot
Na kila kitu kiko, pamoja na ufunguo kwenye saraka ya nyumba ya mizizi - /root/sweet.
3. Bado tunajaribu kufufua seva yetu ili ianze kama kawaida. Kiasi zote za kimantiki kutoka kwa yetu /dev/md0
(ambapo tulipata kila kitu) kiburute hadi /dev/sdb2
, ambapo seva nzima ilifanya kazi hapo awali.
$ pvmove /dev/md0 /dev/sdb2
$ vgreduce vg_c6m1 /dev/md0
Tunazima seva, toa disks 1 na 3, kuondoka pili, boot kutoka Live CD / DVD katika Uokoaji. Pata kizigeu cha buti na urejeshe bootloader kwenye grub:
root (hd0,0)
setup (hd0)
Tunaondoa diski ya boot na kupakia kwa mafanikio, lakini tovuti haifanyi kazi.
4. Kuna chaguzi mbili za kuzindua tovuti: sanidi Apache kutoka mwanzo au tumia nginx na php-fpm tayari imesanidiwa mapema:
$ /etc/init.d/nginx start
$ /etc/init.d/php-fpm start
Hatimaye, unahitaji kuanza MySQL:
$ /etc/init.d/mysqld start
Haitaanza, na jibu liko ndani /var/log/mysql
. Mara tu unapotatua tatizo na MySQL, tovuti itafanya kazi, kwenye ukurasa kuu kutakuwa na ufunguo - RichardGCCMatthewGNUStallman! Sasa tunaweza kufikia 1C, na wafanyakazi wataweza kupokea mishahara yao. Na kama kawaida, una kazi nyingi mbele ya kuanzisha miundombinu na usalama katika kampuni.
Tunaweza pia kushiriki tena orodha ya vitabu ambavyo vilitusaidia sisi na washiriki wetu kujiandaa kwa ajili ya mchezo:
Asante kwa kuwa nasi! Endelea kufuatilia matangazo ya michezo inayofuata!
Chanzo: mapenzi.com