Linux Quest. Віншуем пераможцаў і расказваем пра рашэнні заданняў

Linux Quest. Віншуем пераможцаў і расказваем пра рашэнні заданняў

25 сакавіка мы адкрылі рэгістрацыю на Linux Quest, гэта Гульня для аматараў і знаўцаў аперацыйнай сістэмы Linux. Крыху статыстыкі: зарэгістравалася на гульню 1117 чалавек, з іх 317 — знайшлі хаця б адзін ключ, 241 паспяхова справіліся з заданнем першага этапа, 123 — другога і 70 прайшлі трэці этап. Сёння наша гульня падышла да канца, і мы віншуем нашых пераможцаў!

  • Першае месца заняў Аляксандр Тэльдэкаў.
    Аляксандр сам сабе сказаў, што ён самы тыповы сісадмін. Жыве ў Валгаградзе, розныя Unix-like сістэмы адмініструе ўжо лёт дваццаць. Паспеў папрацаваць у інтэрнет-правайдэрах, банку, сістэмным інтэгратары. Цяпер працуе аддалена ў невялікай фірме, займаецца хмарнай інфраструктурай для буйнога замежнага заказчыка. Любіць чытаць, слухаць музыку. Пра Гульню Аляксандр сказаў, што гульня ў цэлым спадабалася, ён любіць такія задачкі. У адной з кампаній на сумоўі займаўся падобным на Hackerrank, было цікава.
  • Другое месца - Раман Суслаў.
    Раман з Масквы. Яму 37 гадоў. Працуе Linux/Unix-інжынерам у кампаніі "Інфасістэмы Джет". Па працы даводзіцца займацца адміністраваннем і траблшутынгам Linux/Unix-сістэм + SAN. Інтарэсы самыя розныя: Linux-сістэмы, праграмаванне, reverse engineering, інфармацыйная бяспека, Arduino. Пра Гульню Раман адзначыў, што гульня ў цэлым спадабалася. «Размяў крыху свае звіліны і адцягнуўся ад шэрых будняў паўсядзённай працы. 🙂 Хацелася б пабольш заданняў, а то не паспеў увайсці смак як гульня ўжо скончылася ».
  • Трэцяе - alex3d.
    Алекс жыве ў Маскве, займаецца распрацоўкай ПЗ. "Дзякуй за кантэст, было цікава праверыць свой скіл google-fu".

Таксама ў рэйтынгу 10-ці лепшых гульцоў:

  • Yevgeniy Saldayev
  • Маркел Махначэўскі
  • Канстанцін Коносаў
  • Павел Сяргееў
  • Уладзімір Баваеў
  • Іван Бубнаў
  • Pavlo Klets

Мы разумеем, што варыянтаў рашэння ўсіх нашых задач шмат, ніжэй апісаны адны з магчымых варыянтаў рашэння.

1. Першы этап

Мы назвалі яго «А ты сапраўды адмін?», бо заданне было даволі простае - паправіць цёплы лямпавы сэрвіс.

1.1. Цікавыя факты:

Двое гульцоў знайшлі першы ключ за першыя 15 хвілін гульні, а за першую гадзіну ў нас з'явілася тры лідэры, якія справіліся з заданнем.

1.2. Заданне

Ты выйшаў на працу ў кампанію, дзе доўгі час не было пісьменнага спецыяліста па інфармацыйных тэхналогіях. Перш чым пачаць наводзіць парадак, трэба вырашыць падпаленую праблему, якая блакуе працу офіса.

Прыбіральшчыца зачапіла швабрай кабель харчавання сервернай шафы. Сілкаванне аднавілі, але вельмі важны вэб-сайт усё роўна не працуе. Вэб-сайт важны, таму што кампанія не вельмі заклапочаная інфармацыйнай бяспекай, і на галоўнай старонцы гэтага можна знайсці ў адчыненым выглядзе пароль адміністратара ад кампутара генеральнага дырэктара.

На днях пароль памянялі, а новы ўсё забыліся, дырэктар не можа працаваць. Ходзяць чуткі, што на гэтай машыне былі яшчэ ключы, якія могуць дапамагчы нам у дэшыфроўцы рэзервовай копіі бухгалтарскіх дакументаў.

Усе чакаюць ад аператыўнага вырашэння пытання!

1.3. Рашэнне

1. Перш за ўсё трэба памяняць пароль root на віртуальнай машыне, каб атрымаць на яе доступ. Пры запуску заўважаем, што гэта Ubuntu 16.04/XNUMX Server.

Для скіду пароля рута рэстартуем машыну, пры загрузцы, у момант адлюстравання меню grub-а, пераходзім у рэдагаванне пункта Ubuntu кнопкай "e". Рэдагуем радок linux, дадаем у канец init=/bin/bash. Грузімся праз Ctrl+x, атрымліваем Баш. Перамантуем корань з rw, памяняем пароль:

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

Не забываем пра sync, рэбутаем.

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

Тут жа знаходзіцца ключ - StevenPaulSteveJobs.

Правяраем шлях /usr/share/WordPress - такога няма, але ёсць /usr/share/wordpress. Кіруем канфіг і перазапускаем апач.

$ 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. Тут таксама знаходзіцца rлюч - 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. Сервер не грузіцца з-за неіснуючай часткі swap у fstab, пры загрузцы сістэма спрабуе яго прымантаваць і падае. Як загрузіцца?

Спампоўваем выяву, мы запампавалі CentOS 7, грузімся з Live CD/DVD (Troubleshooting -> Rescue), мантуем сістэму, правім /etc/fstab. Тут жа знаходзім першы ключ - GottfriedWilhelm11646Leibniz!

Ствараем swap:

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

2. Пароля як заўсёды няма, трэба памяняць пароль root на віртуальнай машыне. Мы гэта ўжо рабілі ў першым заданні. Змяняем і паспяхова заходзім на сервер, але ён адразу сыходзіць у перазагрузку. Сервер перагружаецца з такой хуткасцю, што не паспець нават паглядзець усе логі ўважліва. Як зразумець, што адбываецца?

Ізноў загружаемся з livecd, уважліва вывучаем логі сістэмы і на ўсялякі выпадак зазіраем у крон, раз такая перыядычнасць. Там знаходзім праблему і другі ключ - Alan1912MathisonTuring!

Трэба ў /etc/crontab выдаліць ці закаментаваць радок echo b > /proc/sysrq-trigger.

3. Пасля чаго сервер загрузіўся, і можна выканаць заданне менеджэраў: "Якія адрасы Афрыкі?" Дадзеная інфармацыя, у цэлым, агульнадаступная. Знайсці гэтую інфармацыю можна ў інтэрнэце па словазлучэннях "ip address africa", "geoip database". Для рашэння задачы можна выкарыстоўваць свабодна даступныя базы размеркавання адрасоў (geoip). Мы ў якасці эталона выкарыстоўвалі БД MaxMind GeoLite2, даступную па ліцэнзіі Creative Commons Attribution-ShareAlike 4.0.

Паспрабуем вырашыць нашу задачу, выкарыстоўваючы толькі сістэмныя ўтыліты Linux, але наогул яе можна вырашаць вялікай колькасцю спосабаў: з дапамогай утыліт фільтрацыі тэксту і з дапамогай скрыптоў на розных мовах праграмавання.

Для пачатку, проста атрымаем пары «IP-адпраўніка - атрымальнік» з паштовага лога /var/log/maillog (пабудуем табліцу email атрымальнікаў - 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]

Сярод усіх відавочна вылучаюцца па кол-у лістоў тры першыя атрымальнікі з топу. Калі grep-нуць IP-адрасы адпраўнікаў, што адпраўлялі на адрасы з гэтага топ-3, можна заўважыць відавочную перавагу вызначаных сетак:

$ 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".

Правільны ключ: "LinusBenedictTorvalds".

Атрыманы радок змяшчае памылку друку ў адносінах да правільнага ключа ў 3 крайніх сімвалах. Гэта звязана, з тым, што выбраныя намі сеткі не цалкам выдзелены краінам Афрыкі і з тым, як размеркаваны email-ы па 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, перш за ўсё цікавіць змест старонак вікі. Нейкі кавалак тэксту, які быў на адной са старонак дадзенай вікі, з'яўляецца паролем ад сервера 1C і тэрмінова патрэбен для яго разблакіроўкі.

Акрамя таго, дзесьці на старонках вікі ці ў іншым месцы былі паролі ад сервера логаў і сервера відэаназірання, якія гэтак жа пажадана аднавіць, без іх даследаванне здарэння немагчыма. Як заўсёды чакаюць ад аператыўнага вырашэння пытання!

3.3. Рашэнне

1. Спрабуем загрузіцца па чарзе з тых дыскаў, што ў нас ёсць і ўсюды атрымліваем аднолькавае паведамленне:

No bootable medium found! System halted 

Трэба з нечага загрузіцца. Ізноў ратуе загрузка з Live CD/DVD (Troubleshooting -> Rescue). Пры загрузцы спрабуем знайсці загрузную частку, не знаходзім, пападаем у shell. Спрабуем вывучаць што і як з кружэлкамі. Вядома, што іх тры. Інструментаў для гэтага больш у 7-й версіі CentOS, дзе ёсць каманды 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 і знаходзім там першы ключ - James191955Gosling у незвычайным файле.

2. Вывучаем pvs і lvs, бо працуем з LVM. Бачым, што павінна быць 2 фізічныя volume, адзін не знаходзіцца і лаецца на страчаны uid. Бачым, што павінна быць 2 лагічна volume: root і swap, пры гэтым root часткова страчаны (атрыбут P у volume). Змантаваць не атрымліваецца, а шкада! Ён нам вельмі патрэбен.

Ёсць яшчэ 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 таксама можна сабраць масіў. Незразумела, чаму няма на іх metadata, але гэта на сумленні адміна, які недзе на Гоа. Мяркуем, што тут павінен быць RAID10, хаця ёсць варыянты. Збіраны:

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

Глядзім blkid, pvs, lvs. Выяўляем, што сабралі фізічны volume, якога нам раней не хапала.

Адразу паправіўся lvroot, які мантуецца яго, але папярэдне які актывуецца VG:

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

І тамака ўсё ёсць, у тым ліку і ключ у хатняй дырэкторыі root - /root/sweet.

3. Спрабуем усё ж ажывіць наш сервер, каб ён нармальна запусціўся. Усе лагічныя volume з нашага /dev/md0 (дзе ў нас усё знайшлося) перацягваем у /dev/sdb2, дзе першапачаткова і працаваў увесь сервер.

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

Гасім сервер, прыбіраны 1 і 3 дыскі, пакідаем другі, грузімся з Live CD / DVD у Rescue. Знаходзім раздзел загрузны, аднаўляем загрузнік у grub:

root (hd0,0)
setup (hd0)

Атрываем загрузны дыск і паспяхова загружаемся, але сайт не працуе.

4. Варыянтаў запусціць сайт два: наладзіць з нуля Apache або выкарыстоўваць ужо наладжаны загадзя nginx c php-fpm:

$ /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.

Дзякуй за тое, што былі з намі! Сачыце за анонсамі наступных гульняў!

Крыніца: habr.com

Дадаць каментар