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 Server экенин байкайбыз.

Түп сырсөзүн баштапкы абалга келтирүү үчүн, биз машинаны өчүрүп күйгүзөбүз, жүктөөдө, grub менюсу көрсөтүлгөн учурда, Ubuntu пунктун "e" баскычы менен түзөтүүгө өтүңүз. Линукс линиясын түзөтүп, аны аягына кошуңуз 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

Бул жерде дагы бир ачкыч бар - StevenPaulSteveJobs.

Жолду текшерүү /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. Биз дароо биринчи ачкычты табабыз - GottfriedWilhelm11646Leibniz!

Своп түзүү:

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

2. Кадимкидей эле, сырсөз жок, виртуалдык машинада түпкү сырсөздү өзгөртүү керек. Биз муну биринчи тапшырмада эле жасаганбыз. Биз өзгөрүп, серверге ийгиликтүү киребиз, бирок ал дароо кайра жүктөлөт. Сервер ушунчалык ылдамдыкта жүктөлгөндүктөн, бардык журналдарды кылдаттык менен карап чыгууга убактыңыз да жок. Эмне болуп жатканын кантип түшүнүүгө болот?

Кайрадан биз livecdден жүктөйбүз, системанын журналдарын кылдат изилдейбиз жана ушундай мезгилдүүлүк болгондуктан, кронду карап чыгабыз. Ал жерден биз көйгөйдү жана экинчи ачкычты табабыз - 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]

Алардын бардыгынын ичинен жогору жактан биринчи үч алуучу каттардын саны боюнча даана өзгөчөлөнөт. Эгерде сиз ушул үч топтун даректерине жөнөтүлгөн жөнөтүүчүлөрдүн 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 бөлүмүнө барып, ал жерден биринчи ачкычты табабыз - адаттан тыш файлдан James191955Gosling.

2. Биз LVM менен иштегендиктен, pvs жана lvs окуйбуз. 2 физикалык том болушу керек экенин көрүп жатабыз, бирөө жайгашкан эмес жана жоголгон уидге нааразы. Биз 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ге жүктөйбүз. Жүктөө бөлүмүн табыңыз жана grubдагы жүктөгүчтү калыбына келтириңиз:

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.

Биз менен болгонуңуз үчүн рахмат! Кийинки оюндардын кулактандырууларынан кабардар болуңуз!

Source: www.habr.com

Комментарий кошуу