25 mart kuni biz ro'yxatdan o'tdik
- Birinchi o‘rinni Aleksandr Teldekov egalladi.
Aleksandr o'zini eng tipik tizim ma'muri deb aytdi. Volgogradda yashaydi, taxminan yigirma yil davomida Unix-ga o'xshash turli xil tizimlarni boshqaradi. Men internet provayderlarida, bankda va tizim integratorida ishlashga muvaffaq bo'ldim. Endi u yirik xorijiy mijoz uchun bulutli infratuzilmada ishlaydigan kichik kompaniyada masofadan turib ishlaydi. O'qishni va musiqa tinglashni yaxshi ko'radi. O'yin haqida Aleksandr o'yinni umuman yoqtirishini, bunday vazifalarni yaxshi ko'rishini aytdi. Kompaniyalardan birida intervyu paytida men Hackerrank-ga o'xshash narsani qildim, bu qiziq edi. - Ikkinchi o'rin - Roman Suslov.
Moskvadan bir roman. U 37 yoshda. Jet Infosystems kompaniyasida Linux/Unix muhandisi sifatida ishlaydi. Ishda men Linux/Unix tizimlari + SAN ni boshqarishim va muammolarni bartaraf etishim kerak. Qiziqishlar turlicha: Linux tizimlari, dasturlash, teskari muhandislik, axborot xavfsizligi, Arduino. O'yin haqida Roman umuman o'yinni yoqtirishini ta'kidladi. “Men miyamni biroz cho'zdim va kundalik ishning kulrang kundalik hayotidan tanaffus oldim. 🙂 Menda ko'proq vazifalar bo'lishini xohlardim, aks holda men buni tatib ko'rishga ulgurmadim, o'yin allaqachon tugagan edi. - Uchinchi - alex3d.
Aleks Moskvada yashaydi va dasturiy ta'minotni ishlab chiqishda ishlaydi. "Tanlov uchun rahmat, mening google-fu ko'nikmalarimni sinab ko'rish qiziqarli bo'ldi."
Shuningdek, 10 ta eng yaxshi futbolchi reytingida:
- Yevgeniy Saldayev
- Markel Moxnachevskiy
- Konstantin Konosov
- Pavel Sergeev
- Vladimir Bovaev
- Ivan Bubnov
- Pavlo Klets
Biz barcha muammolarimizni hal qilishning ko'plab variantlari mavjudligini tushunamiz, ba'zi mumkin bo'lgan echimlar quyida tavsiflanadi.
1. Birinchi bosqich
Biz buni "Siz haqiqatan ham administratormisiz?" Deb chaqirdik, chunki vazifa juda oddiy edi - issiq chiroq xizmatini tuzatish.
1.1. Qiziq faktlar:
Ikki futbolchi o'yinning dastlabki 15 daqiqasida birinchi kalitni topdi va birinchi soatda bizda uchta etakchi vazifani bajardi.
1.2. Mashq qilish
Siz uzoq vaqt davomida axborot texnologiyalari bo'yicha malakali mutaxassis bo'lmagan kompaniyaga ishlashga borgansiz. Ishlarni tartibga solishni boshlashdan oldin, siz ofis ishiga to'sqinlik qiladigan yonish muammosini hal qilishingiz kerak.
Tozalashchi xonim server kabinetining elektr kabelini shvav bilan ushladi. Quvvat tiklandi, lekin juda muhim veb-sayt hali ham ishlamayapti. Veb-sayt muhim ahamiyatga ega, chunki kompaniya axborot xavfsizligi haqida juda tashvishlanmaydi va uning asosiy sahifasida siz aniq matnda bosh direktor kompyuteri uchun administrator parolini topishingiz mumkin.
Boshqa kuni parol o'zgartirildi, lekin hamma yangisini unutdi, direktor ishlay olmaydi. Ushbu mashinada buxgalteriya hujjatlarining zaxira nusxasini ochishga yordam beradigan ko'proq kalitlar borligi haqida mish-mishlar mavjud.
Hamma muammoning tezkor hal etilishini kutmoqda!
1.3. Yechim
1. Avvalo, virtual mashinaga kirish uchun root parolini o'zgartirishingiz kerak. Ishga tushganda, bu Ubuntu 16.04 Server ekanligini ko'ramiz.
Ildiz parolini tiklash uchun biz mashinani qayta ishga tushiramiz, yuklashda grub menyusi ko'rsatilganda "e" tugmasi bilan Ubuntu elementini tahrirlashga o'ting. Linux qatorini tahrirlang, uni oxiriga qo'shing init=/bin/bash
. Biz Ctrl+x orqali yuklaymiz, bash olamiz. Ildizni rw bilan qayta o'rnating, parolni o'zgartiring:
$ mount -o remount,rw /dev/mapper/ubuntu--vg-root
$ passwd
Sinxronizatsiya, qayta ishga tushirish haqida unutmang.
2. Shartda bizning veb-serverimiz ishlamayapti, qarang:
$ curl localhost
Not Found
The requested URL / was not found on this server.
Apache/2.4.18
Ya'ni, aslida Apache ishlayapti, lekin 404 kodi bilan javob beradi. Keling, konfiguratsiyani ko'rib chiqaylik:
$ vim /etc/apache2/sites-enabled/000-default.conf
Bu erda kalit ham bor - StevenPaulSteveJobs.
Yo'lni tekshirish /usr/share/WordPress
- bunday narsa yo'q, lekin bor /usr/share/wordpress
. Konfiguratsiyani tahrirlang va Apache-ni qayta ishga tushiring.
$ systemctl restart apache2
3. Qayta urinib ko'ring, xatoga duch kelamiz:
Warning: mysqli_real_connect(): (HY000/2002): Connection refused in /usr/share/wordpress/wp-includes/wp-db.php on line 1488
Ma'lumotlar bazasi ishlamayaptimi?
$ systemctl status mysql
Active: active (running)
Nima bo'ldi? Biz buni aniqlab olishimiz kerak. Buni amalga oshirish uchun siz maqolada tasvirlanganidek MySQL-ga kirishingiz kerak skip-grant-tables
в /etc/mysql/mysql.conf.d/mysqld.cnf
. Bu erda kalit ham bor - AugustaAdaKingByron.
Foydalanuvchi huquqlarini tuzatish 'wp'@'localhost'
. Biz MySQL-ni ishga tushiramiz, uni tarmoq orqali foydalanish imkoniyatini yaratamiz, konfiguratsiyadagi variantni sharhlaymiz skip-networking
.
4. Ushbu bosqichlardan so'ng veb-server ishga tushadi, lekin sayt hali ham ishlamayapti, chunki
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
Biz faylga bo'lgan huquqlarni tahrirlaymiz.
$ chmod 644 /usr/share/wordpress/wp-content/themes/twentysixteen/footer.php
Biz sahifani yangilaymiz, saytga o'tamiz va kalitni topamiz - BjarneStroustrup! Biz uchta kalitni topdik, direktorimiz ishlashi mumkin, biz buxgalteriya fayllarini parolini hal qildik. Hamma xursand, sizning oldingizda kompaniyada infratuzilma, zaxira va xavfsizlikni o‘rnatish bo‘yicha ko‘p ishlar turibdi.
2. Ikkinchi bosqich
Tahlillarni yig'ish muammosini hal qilish kerak edi. Har bir inson tahlilni yaxshi ko'radi - kim, qaerda va qanday miqdorda foydalanadi. Biz barcha muhandislar hayotda u yoki bu shaklda duch kelishi mumkin bo'lgan ishni o'ylab topdik.
2.1. Qiziq faktlar
O'yinchilarimizdan biri o'yinning dastlabki 10 daqiqasida to'g'ri kalitni kiritdi va birinchi soat ichida bizda vazifani bajargan etakchi bor edi.
2.2. Mashq qilish
Siz kompaniyaga ishlash uchun borgan edingiz, menejerlar sizning oldingizga kelib, Afrikadan kimga xatlar yuborilganligini bilib olishingizni so'rashdi. Biz ular asosida 21 ta eng yaxshi qabul qiluvchi manzillarini yaratishimiz kerak. Qabul qiluvchilarning manzillarining birinchi harflari kalit hisoblanadi. Bir narsa: xatlar yuborilgan pochta serveri yuklanmaydi. Hamma muammoning tezkor hal etilishini kutmoqda!
2.3. Yechim
1. Server fstab-da mavjud bo'lmagan almashtirish bo'limi tufayli ishga tushmaydi, yuklash paytida tizim uni o'rnatishga harakat qiladi va ishlamay qoladi. Qanday yuklash kerak?
Rasmni yuklab oling, biz CentOS 7-ni yuklab oldik, Live CD/DVD-dan yuklaymiz (Muammolarni bartaraf etish -> Qutqarish), tizimni o'rnatamiz, tahrirlaymiz /etc/fstab
. Biz darhol birinchi kalitni topamiz - GottfriedWilhelm11646Leibniz!
Swap yaratish:
$ lvcreate -n swap centos -L 256M
$ sync && reboot
2. Har doimgidek, parol yo'q, virtual mashinada ildiz parolini o'zgartirishingiz kerak. Biz buni birinchi vazifada allaqachon qildik. Biz serverni o'zgartiramiz va muvaffaqiyatli tizimga kiramiz, lekin u darhol qayta ishga tushadi. Server shu qadar yuklanganki, siz barcha jurnallarni diqqat bilan ko'rib chiqishga vaqtingiz ham yo'q. Nima bo'layotganini qanday tushunish mumkin?
Biz yana livecd-dan yuklaymiz, tizim jurnallarini sinchkovlik bilan o'rganamiz va har qanday holatda, cronga qaraymiz, chunki bunday davriylik. U erda biz muammoni va ikkinchi kalitni topamiz - Alan1912MathisonTuring!
Kirish kerak /etc/crontab
o'chirish yoki sharhlash qatorini o'chirish echo b > /proc/sysrq-trigger
.
3. Shundan so'ng server yuklandi va siz menejerlarning topshirig'ini bajarishingiz mumkin: "Afrikadagi manzillar qanday?" Ushbu ma'lumotlar odatda jamoatchilikka ochiqdir. Ushbu ma'lumotni Internetda "ip address africa", "geoip ma'lumotlar bazasi" iboralari yordamida topishingiz mumkin. Muammoni hal qilish uchun siz erkin foydalanish mumkin bo'lgan manzillarni tarqatish ma'lumotlar bazalaridan (geoip) foydalanishingiz mumkin. Biz ma'lumotlar bazasidan standart sifatida foydalandik
Keling, muammoni faqat Linux tizim yordam dasturlari yordamida hal qilishga harakat qilaylik, lekin umuman olganda, uni juda ko'p usullar bilan hal qilish mumkin: matnni filtrlash yordam dasturlari va turli dasturlash tillarida skriptlardan foydalanish.
Boshlash uchun biz shunchaki pochta jurnalidan "yuboruvchi-oluvchi IP" juftligini olamiz. /var/log/maillog
(elektron pochtani qabul qiluvchilar jadvalini tuzamiz - jo'natuvchi IP). Buni quyidagi buyruq yordamida amalga oshirish mumkin:
$ 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
Afrika manzillari ma'lumotlar bazasini tuzishni davom ettirishdan oldin, keling, jo'natuvchilarning eng yaxshi IP manzillarini ko'rib chiqaylik.
$ 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]
Ularning barchasi orasida yuqoridan kelgan dastlabki uchta oluvchilar harflar soni bo'yicha aniq ajralib turadi. Agar siz ushbu uchta yuqoridagi manzillarga yuborilgan jo'natuvchilarning IP-manzillarini o'rgansangiz, ba'zi tarmoqlarning aniq ustunligini ko'rasiz:
$ 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
105/8, 41/8, 196/8,197/8 tarmoqlarining aksariyati AFRINIC-ga ajratilgan - Internet-resurslarni tarqatuvchi beshta mintaqaviy Internet registratorlaridan biri. AFRINIC butun Afrika bo'ylab manzil maydonini tarqatadi. Va 41/8 to'liq AFRINICga tegishli.
https://www.nic.ru/whois/?searchWord=105.0.0.0
https://www.nic.ru/whois/?searchWord=41.0.0.0
Shunday qilib, muammoning javobi, aslida, jurnalning o'zida.
$ 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]
Ushbu bosqichda biz "LinuxBenedictTorvadst" qatorini olamiz.
To'g'ri kalit: "LinusBenedictTorvalds".
Olingan satr oxirgi 3 ta belgidagi to'g'ri kalitga nisbatan xatoni o'z ichiga oladi. Buning sababi, biz tanlagan tarmoqlar Afrika mamlakatlariga to'liq bag'ishlanmaganligi va elektron pochta xabarlari jurnalimizdagi IP manzillar bo'yicha tarqatilishi bilan bog'liq.
Afrika mamlakatlariga ajratilgan eng yirik tarmoqlarning etarli spetsifikatsiyasi bilan aniq javobni olish mumkin:
$ 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]
Muammoni boshqa yo'l bilan ham hal qilish mumkin.
MaxMind-ni yuklab oling, uni oching va keyingi uchta buyruq ham bizning muammomizni hal qiladi.
$ 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
Qanday bo'lmasin, biz oxir-oqibat statistikani hisoblab chiqdik va menejerlar ishlashlari uchun kerakli ma'lumotlarni olishdi!
3. Uchinchi bosqich
Uchinchi bosqich birinchisiga biroz o'xshaydi - siz ham issiq chiroq xizmatini tuzatishingiz kerak, ammo hamma narsa birinchi vazifaga qaraganda ancha murakkab.
3.1. Qiziq faktlar
Dastlabki 15 daqiqada uchta o'yinchi birinchi kalitni topdi, bosqich boshlanganidan 2 soat 20 daqiqa o'tgach, g'olibimiz vazifani bajardi.
3.2. Mashq qilish
Siz kompaniyaning barcha hujjatlari ichki Wiki serverida saqlanadigan kompaniyaga ishga borgansiz. O'tgan yili muhandis tizim nosozliklarga chidamli bo'lishi uchun disklarni qandaydir massivlarga joylashtirish kerakligini ta'kidlab, mavjud bo'lganiga qo'shimcha ravishda server uchun 3 ta yangi diskni buyurtma qildi. Afsuski, ular o'rnatilganidan bir necha hafta o'tgach, muhandis Hindistonga ta'tilga chiqdi va qaytib kelmadi.
Server bir necha yil davomida nosozliklarsiz ishladi, biroq bir necha kun oldin kompaniya tarmog'i buzilgan. Ko'rsatmalarga ko'ra, xavfsizlik xodimlari disklarni serverdan olib tashlashdi va ularni sizga jo'natishdi. Tashish paytida bitta disk qaytarib bo'lmaydigan darajada yo'qolgan.
Biz Wiki funksiyasini tiklashimiz kerak, birinchi navbatda, bizni wiki-sahifalarning mazmuni qiziqtiradi. Ushbu wiki sahifalaridan birida joylashgan matnning ma'lum bir qismi 1C serveri uchun parol bo'lib, uni ochish uchun zudlik bilan kerak bo'ladi.
Bundan tashqari, wiki-sahifalarning biron bir joyida yoki boshqa joyda jurnal serveri va video kuzatuv serveri uchun parollar mavjud bo'lib, ularni tiklash ham maqsadga muvofiqdir, ularsiz hodisani tekshirish mumkin emas. Har doimgidek, muammoning tezkor hal etilishini kutamiz!
3.3. Yechim
1. Bizda mavjud bo'lgan disklardan birma-bir yuklashga harakat qilamiz va hamma joyda bir xil xabarni olamiz:
No bootable medium found! System halted
Siz biror narsadan yuklashingiz kerak. Jonli CD/DVD dan yuklash (Muammolarni bartaraf etish -> Qutqarish) yana yordam beradi. Yuklashda biz yuklash bo'limini topishga harakat qilamiz, uni topa olmayapmiz, biz qobiqqa tushamiz. Biz disklar bilan nima va qanday qilishni o'rganishga harakat qilmoqdamiz. Ma'lumki, ularning uchtasi bor. Buning uchun CentOS-ning 7-versiyasida buyruqlar mavjud bo'lgan ko'proq vositalar mavjud blkid
yoki lsblk
, bu bizga disklar haqidagi barcha ma'lumotlarni ko'rsatadi.
Biz qanday va nima qilamiz:
$ ls /dev/sd*
Bu darhol ayon bo'ladi
/dev/sdb1 - ext4
/dev/sdb2 - часть lvm
/dev/sda1 и /dev/sdc1 - части рейда
/dev/sda2 и /dev/sdc2 - про них ничего не известно на текущий момент
Biz sdb1 ni o'rnatamiz, bu CentOS 6 ning yuklash qismi ekanligi aniq.
$ mkdir /mnt/sdb1 && mount /dev/sdb1 /mnt/sdb1
Shubhasiz, biz grub bo'limiga o'tamiz va u erda birinchi kalitni topamiz - James191955Gosling noodatiy faylda.
2. Biz pvs va lvsni o'rganamiz, chunki biz LVM bilan ishlaymiz. Biz 2 ta jismoniy jild bo'lishi kerakligini ko'ramiz, biri joylashmagan va yo'qolgan uid haqida shikoyat qilmoqda. Biz 2 mantiqiy jild bo'lishi kerakligini ko'ramiz: ildiz va almashtirish, ildiz qisman yo'qolgan (hajmning P atributi). O'rnatish mumkin emas, bu juda achinarli! Biz unga haqiqatan ham muhtojmiz.
Yana ikkita disk bor, biz ularni ko'rib chiqamiz, yig'amiz va o'rnatamiz:
$ mdadm --examine --verbose --scan
$ mdadm --assemble --verbose --scan
$ mkdir /mnt/md127 && mount /dev/md127 /mnt/md127
Biz qaraymiz, bu CentOS 6-ning yuklash bo'limi va allaqachon yoqilgan narsaning dublikati. /dev/sdb1
, va bu erda yana bir xil kalit - DennisBMacAlistairCRitchie!
Keling, qanday yig'ilganini ko'rib chiqaylik /dev/md127
.
$ mdadm --detail /dev/md127
Biz uni 4 ta diskdan yig'ish kerakligini ko'ramiz, lekin ikkitadan yig'ilgan /dev/sda1
и /dev/sdc1
, ular tizimda 2 va 4 raqamlari bo'lishi kerak edi. dan deb taxmin qilamiz /dev/sda2
и /dev/sdc2
Shuningdek, siz massivni to'plashingiz mumkin. Nima uchun ularda metama'lumotlar yo'qligi aniq emas, lekin bu Goa shahrida bo'lgan administratorning vijdoniga bog'liq. Variantlar mavjud bo'lsa-da, biz RAID10 bo'lishi kerak deb o'ylaymiz. Biz yig'amiz:
$ mdadm --create --verbose /dev/md0 --assume-clean --level=10 --raid-devices=4 missing /dev/sda2 missing /dev/sdc2
Biz blkid, pvs, lvs ga qaraymiz. Biz ilgari etishmayotgan jismoniy hajmni to'plaganimizni aniqladik.
lvroot darhol ta'mirlandi, biz uni o'rnatamiz, lekin avval VGni faollashtiramiz:
$ vgchange -a y
$ mkdir /mnt/lvroot && mount /dev/mapper/vg_c6m1-lv_root /mnt/lvroot
Va hamma narsa mavjud, shu jumladan asosiy asosiy katalogdagi kalit - /root/sweet.
3. Biz hali ham serverimizni normal ishga tushirish uchun qayta tiklashga harakat qilmoqdamiz. Bizdan barcha mantiqiy jildlar /dev/md0
(biz hamma narsani qaerdan topdik) uni sudrab olib boring /dev/sdb2
, bu erda butun server dastlab ishlagan.
$ pvmove /dev/md0 /dev/sdb2
$ vgreduce vg_c6m1 /dev/md0
Biz serverni o'chiramiz, 1 va 3-disklarni olib tashlaymiz, ikkinchisini qoldiramiz, Live CD/DVD-dan Rescue-ga yuklaymiz. Yuklash bo'limini toping va bootloaderni grubda tiklang:
root (hd0,0)
setup (hd0)
Biz yuklash diskini yirtib tashlaymiz va muvaffaqiyatli yuklaymiz, lekin sayt ishlamayapti.
4. Veb-saytni ishga tushirishning ikkita varianti mavjud: Apache-ni noldan sozlang yoki nginx-ni oldindan sozlangan php-fpm bilan ishlating:
$ /etc/init.d/nginx start
$ /etc/init.d/php-fpm start
Nihoyat, MySQL-ni ishga tushirishingiz kerak:
$ /etc/init.d/mysqld start
U boshlamaydi va javob ichida /var/log/mysql
. MySQL bilan muammoni hal qilganingizdan so'ng, sayt ishlaydi, asosiy sahifada kalit bo'ladi - RichardGCCMatthewGNUStallman! Endi bizda 1C ga kirish imkoni bor va xodimlar o'z maoshlarini olishlari mumkin. Va har doimgidek, sizning oldingizda kompaniyada infratuzilma va xavfsizlikni o'rnatish uchun juda ko'p ish bor.
Shuningdek, biz va ishtirokchilarimizga o'yinga tayyorgarlik ko'rishda yordam bergan kitoblar ro'yxatini yana bir bor baham ko'rishimiz mumkin:
Biz bilan bo'lganingiz uchun tashakkur! Keyingi o'yinlar haqidagi anonslarni kuzatib boring!
Manba: www.habr.com