Linux Quest. Жеңімпаздарды құттықтаймыз және тапсырмалардың шешімдері туралы айтып береміз

Linux Quest. Жеңімпаздарды құттықтаймыз және тапсырмалардың шешімдері туралы айтып береміз

25 наурызда біз тіркеуді бастадық Linux Quest, бұл Linux операциялық жүйесінің әуесқойлары мен сарапшыларына арналған ойын. Кейбір статистика: ойынға 1117 адам тіркелді, оның 317-сі кем дегенде бір кілт тапты, 241-і бірінші кезеңнің тапсырмасын сәтті орындады, 123-і екінші кезеңді және 70-і үшінші кезеңнен өтті. Бүгінгі ойынымыз өз мәресіне жетті және жеңімпаздарымызды құттықтаймыз!

  • Александр Телдеков бірінші орынды иеленді.
    Александр өзіне ең типтік жүйелік әкімші екенін айтты. Волгоградта тұрады, шамамен жиырма жыл бойы Unix тәрізді әртүрлі жүйелерді басқарады. Мен интернет-провайдерлерде, банкте және жүйелік интеграторда жұмыс істей алдым. Қазір ол шағын компанияда қашықтан жұмыс істейді, ірі шетелдік тұтынушы үшін бұлттық инфрақұрылымда жұмыс істейді. Кітап оқығанды, музыка тыңдағанды ​​ұнатады. Ойын туралы Александр ойынның жалпы ұнағанын, мұндай тапсырмаларды жақсы көретінін айтты. Компаниялардың бірінде сұхбат кезінде мен Hackerrank-қа ұқсас нәрсе жасадым, бұл қызықты болды.
  • Екінші орын – Роман Суслов.
    Мәскеуден шыққан роман. Ол 37 жаста. Jet Infosystems компаниясында Linux/Unix инженері болып жұмыс істейді. Жұмыста Linux/Unix жүйелерін + SAN жүйесін басқаруға және ақаулықтарды жоюға тура келеді. Қызығушылықтары әртүрлі: Linux жүйелері, бағдарламалау, кері инженерия, ақпараттық қауіпсіздік, Arduino. Ойын туралы Роман ойын жалпы ұнағанын атап өтті. «Мен миымды аздап созып, күнделікті жұмыстың сұр күнделікті өмірінен үзіліс алдым. 🙂 Мен көбірек тапсырмалар алғым келеді, әйтпесе оның дәмін татып үлгергенше, ойын аяқталды.
  • Үшінші - alex3d.
    Алекс Мәскеуде тұрады және бағдарламалық жасақтаманы әзірлеуде жұмыс істейді. «Байқау үшін рахмет, менің google-фу дағдыларымды тексеру қызықты болды».

Сондай-ақ 10 үздік ойыншының рейтингінде:

  • Евгений Салдаев
  • Маркел Мохначевский
  • Константин Коносов
  • Павел Сергеев
  • Владимир Боваев
  • Иван Бубнов
  • Павло Клец

Біз барлық мәселелерімізді шешудің көптеген нұсқалары бар екенін түсінеміз, кейбір ықтимал шешімдер төменде сипатталған.

1. Бірінші кезең

Біз оны «Сіз шынымен де әкімшісіз бе?» деп атадық, өйткені тапсырма өте қарапайым болды - жылы шам қызметін жөндеу.

1.1. Қызықты фактілер:

Ойынның алғашқы 15 минутында екі ойыншы бірінші кілтті тапты, ал бірінші сағатта бізде үш көшбасшы тапсырманы орындады.

1.2. Жаттығу

Сіз ұзақ уақыт бойы ақпараттық технологиялардың құзыретті маманы болмаған компанияға жұмысқа тұрдыңыз. Заттарды ретке келтіруді бастамас бұрын, кеңсе жұмысына кедергі келтіретін жанып жатқан мәселені шешу керек.

Тазалаушы әйел швабрамен серверлік шкафтың қуат кабелін ұстады. Қуат қалпына келтірілді, бірақ өте маңызды веб-сайт әлі жұмыс істемейді. Веб-сайт маңызды, себебі компания ақпараттық қауіпсіздік мәселесіне аса мән бермейді және оның басты бетінде бас директор компьютеріне арналған әкімші құпия сөзін анық мәтінде табуға болады.

Өткенде пароль ауыстырылды, бірақ бәрі жаңасын ұмытып кетті, директор жұмыс істей алмайды. Бұл машинада есеп құжаттарының сақтық көшірмесін ашуға көмектесетін кілттер көп болды деген қауесет бар.

Барлығы мәселенің тез шешілуін күтеді!

1.3. Шешім

1. Виртуалды машинаға кіру үшін ең алдымен түбірлік құпия сөзді өзгерту керек. Іске қосу кезінде біз бұл Ubuntu 16.04 сервері екенін байқаймыз.

Түбірлік құпия сөзді қалпына келтіру үшін біз машинаны қайта іске қосамыз, жүктеу кезінде топ мәзірі көрсетілген кезде «e» түймешігімен Ubuntu элементін өңдеуге өтіңіз. Linux жолын өңдеңіз, оны соңына қосыңыз init=/bin/bash. Біз Ctrl+x арқылы жүктейміз, біз bash аламыз. Түбірді rw арқылы қайта орнатыңыз, құпия сөзді өзгертіңіз:

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

Синхрондау, қайта жүктеу туралы ұмытпаңыз.

2. Шарт біздің веб-сервер жұмыс істемейтінін айтады, қараңыз:

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

Яғни, шын мәнінде, Apache жұмыс істейді, бірақ 404 кодымен жауап береді. Конфигурацияны қарастырайық:

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

Мұнда да кілт бар - СтивенПолСтив Джобс.

Жолды тексеру /usr/share/WordPress - ондай жоқ, бірақ бар /usr/share/wordpress. Конфигурацияны өңдеңіз және Apache қайта іске қосыңыз.

$ systemctl restart apache2

3. Қайталап көріңіз, біз қатені аламыз:

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

Деректер базасы жұмыс істемейді ме?

$ systemctl status mysql
Active: active (running)

Не болды? Біз оны анықтауымыз керек. Бұл әрекетті орындау үшін, бөлімде сипатталғандай MySQL-ге қол жеткізу қажет құжаттама. Құжаттама пункттерінің бірі опцияны тіркеуді ұсынады skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf. Мұнда да кілт бар - AugustaAdaKingByron.

Пайдаланушы құқықтарын түзету 'wp'@'localhost'. Біз MySQL іске қосамыз, конфигурациядағы опцияны түсіндіре отырып, оны желі арқылы қол жетімді етеміз skip-networking.

4. Осы қадамдардан кейін веб-сервер іске қосылады, бірақ сайт әлі жұмыс істемейді, себебі

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

Біз файлға құқықтарды өңдейміз.

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

Біз бетті жаңартамыз, сайтқа өтіп, кілтті табамыз - BjarneStroustrup! Біз үш кілтті де таптық, директорымыз жұмыс істей алады, бухгалтерлік файлдардың шифрын шештік. Барлығы бақытты және сізді компанияда инфрақұрылымды, сақтық көшірмелерді және қауіпсіздікті орнату бойынша көп жұмыс күтіп тұр.

2. Екінші кезең

Аналитиканы жинау мәселесін шешу қажет болды. Барлығы аналитиканы жақсы көреді - оны кім, қайда және қандай мөлшерде пайдаланады. Біз барлық инженерлер өмірде бір немесе басқа түрде кездесетін жағдайды ойлап таптық.

2.1. Қызықты фактілер

Біздің ойыншыларымыздың бірі ойынның алғашқы 10 минутында дұрыс кілтті енгізді, ал бірінші сағатта тапсырманы орындаған көшбасшы болды.

2.2. Жаттығу

Сіз компанияға жұмысқа бардыңыз, менеджерлер сізге келіп, Африкадан кімге хаттар жіберілгенін табуды сұрады. Біз олардың негізінде ең жақсы 21 алушы мекенжайын құруымыз керек. Алушылардың мекенжайларының бірінші әріптері кілт болып табылады. Бір нәрсе: хаттар жіберілген пошта сервері жүктелмейді. Барлығы мәселенің тез шешілуін күтеді!

2.3. Шешім

1. Сервер fstab ішінде жоқ своп бөліміне байланысты жүктелмейді, жүктеп жатқанда жүйе оны орнатуға тырысады және бұзылады. Қалай жүктеу керек?

Суретті жүктеп алыңыз, біз CentOS 7 жүктеп алдық, Live CD/DVD дискісінен жүктеңіз (Ақаулықтарды жою -> Құтқару), жүйені орнатыңыз, өңдеңіз /etc/fstab. Біз бірден бірінші кілтті табамыз - Готфрид Вильгельм11646Лейбниц!

Своп жасау:

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

2. Әдеттегідей, құпия сөз жоқ, виртуалды машинада түбірлік құпия сөзді өзгерту керек. Біз мұны бірінші тапсырмада орындадық. Біз серверге өзгеріп, сәтті кіреміз, бірақ ол бірден қайта жүктеледі. Сервердің шамадан тыс жүктелгені сонша, сізде барлық журналдарды мұқият қарап шығуға уақыт болмайды. Не болып жатқанын қалай түсінуге болады?

Біз қайтадан livecd-ден жүктейміз, жүйелік журналдарды мұқият зерттейміз және мұндай кезеңділік болғандықтан, cronға қараймыз. Мұнда біз мәселені және екінші кілтті табамыз - Alan1912MathisonTuring!

Керек /etc/crontab жолды жою немесе түсініктеме беру echo b > /proc/sysrq-trigger.

3. Осыдан кейін сервер жүктелді және сіз менеджерлердің тапсырмасын орындай аласыз: «Африкадағы мекенжайлар қандай?» Бұл ақпарат жалпыға ортақ. Сіз бұл ақпаратты Интернетте «ip address africa», «geoip дерекқоры» тіркестері арқылы таба аласыз. Мәселені шешу үшін сіз еркін қол жетімді мекенжайды тарату деректер қорын (geoip) пайдалана аласыз. Біз деректер базасын стандарт ретінде қолдандық MaxMind GeoLite2, Creative Commons Attribution-ShareAlike 4.0 лицензиясы бойынша қол жетімді.

Мәселені тек Linux жүйелік утилиталарын пайдаланып шешуге тырысайық, бірақ жалпы оны көптеген жолдармен шешуге болады: мәтінді сүзу утилиталарын пайдалану және әртүрлі бағдарламалау тілдеріндегі сценарийлерді пайдалану.

Алдымен біз пошта журналынан «жіберуші-алушы IP» жұптарын аламыз. /var/log/maillog (электрондық поштаны алушылардың кестесін құрастырайық – жіберуші IP). Мұны келесі пәрмен арқылы жасауға болады:

$ 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

Африкалық мекенжайлардың дерекқорын құрастыруды жалғастырмас бұрын, жіберушілердің ең жақсы IP мекенжайларын қарастырайық.

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

Олардың барлығының ішінде жоғарыдан келген алғашқы үш алушы әріп саны жағынан айқын көзге түседі. Егер сіз осы алғашқы 3 мекенжайға жіберілген жіберушілердің IP мекенжайларын анықтасаңыз, белгілі бір желілердің айқын басымдылығын байқайсыз:

$ 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 желілерінің көпшілігі AFRINIC-ке бөлінген - Интернет ресурстарын тарататын бес аймақтық Интернет-тіркеушілердің бірі. AFRINIC бүкіл Африка бойынша мекенжай кеңістігін таратады. Ал 41/8 толығымен AFRINIC-ке қатысты.

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

Осылайша, мәселенің жауабы, шын мәнінде, журналдың өзінде.

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

Бұл кезеңде біз «LinuxBenedictTorvadst» жолын аламыз.

Дұрыс кілт: «ЛинусБенедикт Торвальдс».

Алынған жолда соңғы 3 таңбадағы дұрыс пернеге қатысты теру қатесі бар. Бұл біз таңдаған желілердің толығымен Африка елдеріне арналмағандығына және электрондық пошталардың біздің журналдағы IP мекенжайлары арасында таратылу тәсіліне байланысты.

Африка елдеріне бөлінген ең үлкен желілердің жеткілікті сипаттамасымен нақты жауап алуға болады:

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

Мәселені басқа жолмен де шешуге болады.
MaxMind жүктеп алыңыз, оны орауыштан шығарыңыз және келесі үш команда да біздің мәселемізді шешеді.

$ 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

Қалай болғанда да, біз статистиканы есептедік, ал менеджерлер жұмыс істеуге қажетті деректерді алды!

3. Үшінші кезең

Үшінші кезең біріншісіне біршама ұқсас - сіз жылы шам қызметін де түзетуіңіз керек, бірақ бәрі бірінші тапсырмаға қарағанда күрделірек.

3.1. Қызықты фактілер

Алғашқы 15 минутта үш ойыншы бірінші кілтті тапты, кезең басталғаннан кейін 2 сағат 20 минуттан кейін жеңімпазымыз тапсырманы орындады.

3.2. Жаттығу

Сіз компанияның барлық құжаттары ішкі Wiki серверінде сақталатын компанияға жұмысқа бардыңыз. Өткен жылы инженер жүйе ақауларға төзімді болуы үшін дискілерді қандай да бір массивтерге орналастыру керек деп дәлелдеп, серверге бұрыннан бар біреуіне қосымша 3 жаңа дискіге тапсырыс берді. Өкінішке орай, оларды орнатқаннан кейін бірнеше аптадан кейін инженер Үндістанға демалысқа кетіп, оралмады.

Сервер бірнеше жыл бойы ақаусыз жұмыс істеді, бірақ бірнеше күн бұрын компанияның желісі бұзылды. Нұсқауларға сәйкес қауіпсіздік қызметкерлері дискілерді серверден шығарып, сізге жіберді. Тасымалдау кезінде бір диск қалпына келтірілмейтін түрде жоғалды.

Бізге Wiki функционалдығын қалпына келтіру керек, ең алдымен, бізді вики беттерінің мазмұны қызықтырады. Осы вики беттерінің бірінде болған мәтіннің белгілі бір бөлігі 1С серверінің құпия сөзі болып табылады және оның құлпын ашу үшін шұғыл қажет.

Сонымен қатар, вики-парақтардың бір жерінде немесе басқа жерде журнал сервері мен бейнебақылау сервері үшін құпия сөздер болды, оларды қалпына келтіру қажет, оларсыз оқиғаны зерттеу мүмкін емес. Әдеттегідей, мәселенің тез шешілуін күтеміз!

3.3. Шешім

1. Бізде бар дискілерден бір-бірлеп жүктеуге тырысамыз және барлық жерде бірдей хабарлама аламыз:

No bootable medium found! System halted 

Сізге бір нәрседен жүктеу керек. Live CD/DVD дискісінен жүктеу (Ақаулықтарды жою -> Құтқару) қайтадан көмектеседі. Жүктеу кезінде біз жүктеу бөлімін табуға тырысамыз, оны таба алмаймыз, біз қабықшаға түсеміз. Біз дискілермен не және қалай істеу керектігін зерттеуге тырысамыз. Олардың үшеуі екені белгілі. Бұл үшін командалар бар CentOS-тың 7-ші нұсқасында көбірек құралдар бар blkid немесе lsblk, ол бізге дискілер туралы барлық ақпаратты көрсетеді.

Біз қалай және не істейміз:

$ ls /dev/sd*

Бұл бірден байқалады

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

Біз sdb1 орнатамыз, бұл CentOS 6 жүктеу бөлімі екені анық.

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

Әлбетте, біз grub бөліміне өтіп, сол жерден бірінші кілтті табамыз - Джеймс191955Гослинг әдеттен тыс файлда.

2. Біз pvs және lvs оқимыз, өйткені біз LVM-мен жұмыс істейміз. Біз 2 физикалық том болуы керек екенін көреміз, біреуі орналаспаған және жоғалған uid туралы шағымданады. Біз 2 логикалық том болуы керек екенін көреміз: түбір және своп, ал түбір ішінара жоғалған (көлемнің P атрибуты). Оны көтеру мүмкін емес, бұл өкінішті! Бізге ол шынымен керек.

Тағы 2 диск бар, біз оларды қараймыз, жинаймыз және орнатамыз:

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

Қарап отырсақ, бұл CentOS 6 жүктеу бөлімі және қазірдің өзінде қосылғанның көшірмесі екенін көреміз. /dev/sdb1, және тағы да сол кілт - DennisBMacAlistairCRitchie!
Оның қалай жиналғанын көрейік /dev/md127.

$ mdadm --detail /dev/md127

Қарап отырсақ, оны 4 дискіден құрастыру керек еді, бірақ екеуінен құрастырылған /dev/sda1 и /dev/sdc1, олар жүйеде 2 және 4 сандары болуы керек еді. бастап деп болжаймыз /dev/sda2 и /dev/sdc2 Сіз сондай-ақ массив жинай аласыз. Неліктен оларда метадеректер жоқ екені белгісіз, бірақ бұл Гоадағы әкімшінің ар-ожданында. Біз RAID10 болуы керек деп есептейміз, бірақ опциялар бар. Біз жинаймыз:

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

Біз blkid, pvs, lvs қараймыз. Біз бұрын жетіспейтін физикалық көлемді жинағанымызды анықтадық.

lvroot дереу жөнделді, біз оны орнатамыз, бірақ алдымен VG іске қосыңыз:

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

Мұнда бәрі бар, соның ішінде негізгі негізгі каталогтағы кілт - /root/sweet.

3. Біз әлі де серверді қалыпты түрде іске қосу үшін жандандыруға тырысамыз. Барлық логикалық томдар біздің /dev/md0 (бәрін тапқан жер) оны сүйреңіз /dev/sdb2, мұнда бүкіл сервер бастапқыда жұмыс істеді.

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

Біз серверді өшіреміз, 1 және 3 дискілерді алып тастаймыз, екіншісін қалдырамыз, Live CD/DVD дискісінен Rescue-ге жүктейміз. Жүктеу бөлімін табыңыз және жүктегішті топта қалпына келтіріңіз:

root (hd0,0)
setup (hd0)

Біз жүктеу дискісін жыртып, сәтті жүктейміз, бірақ сайт жұмыс істемейді.

4. Веб-сайтты іске қосудың екі нұсқасы бар: Apache бағдарламасын нөлден конфигурациялаңыз немесе алдын ала конфигурацияланған php-fpm бар nginx пайдаланыңыз:

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

Соңында, MySQL-ді бастау керек:

$ /etc/init.d/mysqld start

Ол басталмайды және жауап мынада /var/log/mysql. MySQL-мен мәселені шешкеннен кейін сайт жұмыс істейді, негізгі бетте кілт болады - RichardGCCMatthewGNUStallman! Енді бізде 1С қолжетімді, ал қызметкерлер жалақысын ала алады. Әдеттегідей, сізді компанияда инфрақұрылым мен қауіпсіздікті орнату бойынша көп жұмыс күтіп тұр.

Біз сондай-ақ бізге және қатысушыларымызға ойынға дайындалуға көмектескен кітаптардың тізімін тағы да бөлісе аламыз: linux.mail.ru/books.

Бізбен бірге болғандарыңызға рахмет! Келесі ойындар туралы хабарландыруларды күтіңіз!

Ақпарат көзі: www.habr.com

пікір қалдыру