Linuksa Serĉo. Gratulon al la gajnantoj kaj rakontu al ni pri la solvoj de la taskoj

Linuksa Serĉo. Gratulon al la gajnantoj kaj rakontu al ni pri la solvoj de la taskoj

La 25-an de marto ni malfermis aliĝon por Linuksa Serĉo, ĉi tio estas Ludo por amantoj kaj spertuloj de la Linukso operaciumo. Iuj statistikoj: 1117 homoj registris por la ludo, 317 el ili trovis almenaŭ unu ŝlosilon, 241 sukcese plenumis la taskon de la unua etapo, 123 - la dua kaj 70 pasis la trian etapon. Hodiaŭ nia ludo finiĝis kaj ni gratulas niajn gajnintojn!

  • Aleksandro Teldekov prenis la unuan lokon.
    Aleksandro diris al si, ke li estas la plej tipa sistemadministranto. Loĝas en Volgogrado, administras diversajn Unikso-similajn sistemojn dum ĉirkaŭ dudek jaroj. Mi sukcesis labori en interretaj provizantoj, banko kaj sistema integristo. Nun li laboras malproksime en malgranda kompanio, laborante pri nuba infrastrukturo por granda eksterlanda kliento. Amas legi kaj aŭskulti muzikon. Pri la Ludo, Aleksandro diris, ke li ŝatis la ludon entute, li amas tiajn taskojn. Dum intervjuo ĉe unu el la kompanioj mi faris ion similan al Hackerrank, ĝi estis interese.
  • Dua loko - Roman Suslov.
    Romano el Moskvo. Li aĝas 37 jarojn. Laboras kiel Linukso/Uniksa inĝeniero ĉe Jet Infosystems. Ĉe la laboro, mi devas administri kaj solvi problemojn Linukso/Uniksaj sistemoj + SAN. Interesoj estas diversaj: Linuksaj sistemoj, programado, inversa inĝenierado, informa sekureco, Arduino. Pri la Ludo Roman notis ke li ŝatis la ludon entute. “Mi iomete streĉis la cerbon kaj ripozis de la griza ĉiutaga vivo de la ĉiutaga laboro. 🙂 Mi ŝatus havi pli da taskoj, alie antaŭ ol mi havis tempon por gustumi ĝin, la ludo jam finiĝis.”
  • Tria - alex3d.
    Alex loĝas en Moskvo kaj laboras en programaro. "Dankon pro la konkurso, estis interese testi miajn kapablojn pri google-fu."

Ankaŭ en la rangotabelo de la 10 plej bonaj ludantoj:

  • Jevgenij Saldayev
  • Markel Moĥnaĉevskij
  • Konstantin Konosov
  • Paŭlo Sergeev
  • Vladimir Bovaev
  • Ivan Bubnov
  • Pavlo Klets

Ni komprenas, ke ekzistas multaj ebloj por solvi ĉiujn niajn problemojn; iuj el la eblaj solvoj estas priskribitaj sube.

1. Unua etapo

Ni nomis ĝin "Ĉu vi vere estas administranto?", ĉar la tasko estis sufiĉe simpla - ripari varman lampservon.

1.1. Interesaj faktoj:

Du ludantoj trovis la unuan ŝlosilon en la unuaj 15 minutoj de la ludo, kaj en la unua horo ni havis tri gvidantojn, kiuj plenumis la taskon.

1.2. Ekzerco

Vi iris labori en firmao, kie dum longa tempo mankis kompetenta specialisto pri informa teknologio. Antaŭ ol vi komencas ordigi aferojn, vi devas solvi la brulantan problemon, kiu blokas la laboron de la oficejo.

La purigistino kaptis la elektran kablon de la servila kabineto per mopo. Elektro estas restarigita, sed tre grava retejo ankoraŭ ne funkcias. La retejo estas grava ĉar la kompanio ne tre zorgas pri informa sekureco, kaj sur la ĉefpaĝo de ĉi tiu vi povas trovi en klara teksto la administranton pasvorton por la komputilo de la CEO.

La alian tagon la pasvorto estis ŝanĝita, sed ĉiuj forgesis la novan, la direktoro ne povas labori. Estas onidiroj, ke estis pli da ŝlosiloj sur ĉi tiu maŝino, kiuj povus helpi nin deĉifri la rezervan kopion de la kontadaj dokumentoj.

Ĉiuj atendas rapidan solvon de la afero!

1.3. Solvo

1. Antaŭ ĉio, vi devas ŝanĝi la radikan pasvorton sur la virtuala maŝino por akiri aliron al ĝi. Komencante, ni rimarkas, ke ĉi tio estas Ubuntu 16.04-Servilo.

Por restarigi la radikan pasvorton, ni rekomencas la maŝinon, dum la ŝarĝo, en la momento la grub-menuo montriĝas, iru redakti la Ubuntu-eron per la butono "e". Redaktu la linion linukson, aldonu ĝin ĝis la fino init=/bin/bash. Ni ŝarĝas per Ctrl+x, ni ricevas bash. Remuntu la radikon per rw, ŝanĝu la pasvorton:

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

Ne forgesu pri sinkronigo, rekomencu.

2. La kondiĉo diras, ke nia retservilo ne funkcias, rigardu:

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

Tio estas, fakte, Apache funkcias, sed respondas per kodo 404. Ni rigardu la agordon:

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

Ankaŭ estas ŝlosilo ĉi tie - StevenPaulSteveJobs.

Kontrolante la vojon /usr/share/WordPress - ne ekzistas tia afero, sed ekzistas /usr/share/wordpress. Redaktu la agordon kaj rekomencu Apache.

$ systemctl restart apache2

3. Provu denove, ni ricevas la eraron:

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

La datumbazo ne funkcias?

$ systemctl status mysql
Active: active (running)

Kio estas la problemo? Ni devas eltrovi ĝin. Por fari tion, vi devas akiri aliron al MySQL, kiel priskribite en dokumentado. Unu el la dokumentaj punktoj rekomendas, ke ni registri la opcion skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf. Ĉi tie ankaŭ estas ŝlosilo - AugustaAdaKingByron.

Korektante uzantrajtojn 'wp'@'localhost'. Ni lanĉas MySQL, faras ĝin alirebla tra la reto, komentante la opcion en la agordo skip-networking.

4. Post ĉi tiuj paŝoj, la retservilo komenciĝas, sed la retejo ankoraŭ ne funkcias ĉar

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

Ni redaktas la rajtojn al la dosiero.

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

Ni refreŝigas la paĝon, iru al la retejo kaj trovas la ŝlosilon - BjarneStroustrup! Ni trovis ĉiujn tri ŝlosilojn, nia direktoro povas labori, ni malĉifris la kontadajn dosierojn. Ĉiuj estas feliĉaj, kaj vi havas multan laboron antaŭ vi por starigi infrastrukturon, sekurkopiojn kaj sekurecon en la kompanio.

2. Dua etapo

Necesis solvi la problemon pri kolektado de analizoj. Ĉiuj amas analizojn - kiu uzas ĝin, kie kaj en kiaj kvantoj. Ni elpensis kazon, kiun ĉiuj inĝenieroj povas renkonti en unu formo aŭ alia en la vivo.

2.1. Interesaj faktoj

Unu el niaj ludantoj enigis la ĝustan ŝlosilon en la unuaj 10 minutoj de la ludo, kaj en la unua horo ni havis gvidanton, kiu plenumis la taskon.

2.2. Ekzerco

Vi iris labori ĉe la firmao, manaĝeroj venis al vi kaj petis vin trovi al kiu leteroj estas senditaj el Afriko. Ni devas konstrui la plej bonajn 21 ricevajn adresojn surbaze de ili. La unuaj leteroj de la adresoj de la ricevantoj estas la ŝlosilo. Unu afero: la poŝtservilo per kiu la leteroj estis senditaj ne ŝargas. Ĉiuj atendas rapidan solvon de la afero!

2.3. Solvo

1. La servilo ne ekfunkciigas pro neekzistanta interŝanĝa subdisko en fstab; dum ŝarĝo, la sistemo provas munti ĝin kaj kraŝas. Kiel ekbruligi?

Elŝutu la bildon, ni elŝutis CentOS 7, ekfunkciigu el Live KD/DVD (Troubleshooting -> Rescue), munti la sistemon, redakti /etc/fstab. Ni tuj trovas la unuan ŝlosilon — GottfriedWilhelm11646Leibniz!

Krei interŝanĝon:

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

2. Kiel ĉiam, ne ekzistas pasvorto, vi devas ŝanĝi la radikan pasvorton sur la virtuala maŝino. Ni jam faris tion en la unua tasko. Ni ŝanĝas kaj sukcese ensalutas en la servilon, sed ĝi tuj rekomencas. La servilo estas troŝarĝita je tia rapideco, ke vi eĉ ne havas tempon atente rigardi ĉiujn protokolojn. Kiel kompreni kio okazas?

Denove ni ekfunkciigas de la livecd, zorge studas la sistemajn protokolojn kaj, ĉiaokaze, rigardas en la cron, ekde tia periodaĵo. Tie ni trovas la problemon kaj la duan ŝlosilon - Alan1912MathisonTuring!

Bezonas en /etc/crontab forigi aŭ komenti linion echo b > /proc/sysrq-trigger.

3. Post tio la servilo ŝargis, kaj vi povas plenumi la taskon de la administrantoj: "Kiuj estas la adresoj en Afriko?" Ĉi tiu informo estas ĝenerale havebla al la publiko. Vi povas trovi ĉi tiujn informojn en la Interreto uzante la frazojn "ip-adreso Afriko", "geoip datumbazo". Por solvi la problemon, vi povas uzi libere disponeblajn adresdistribuajn datumbazojn (geoip). Ni uzis la datumbazon kiel normo MaxMind GeoLite2, disponebla laŭ permesilo Krea Komunaĵo Atribuite-Samkondiĉe 4.0.

Ni provu solvi nian problemon uzante nur Linuksan sistem-utilaĵojn, sed ĝenerale ĝi povas esti solvita en grandega nombro da manieroj: uzante tekstfiltrajn ilojn kaj uzante skriptojn en diversaj programlingvoj.

Komence, ni simple ricevos la parojn "sendanto-ricevanto IP" el la poŝta protokolo /var/log/maillog (ni konstruu tabelon de retpoŝtaj ricevantoj - sendinto IP). Ĉi tio povas esti farita per la sekva komando:

$ 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

Kaj antaŭ ol ni daŭrigu kun kompili datumbazon de afrikaj adresoj, ni rigardu la ĉefajn IP-adresojn de sendintoj.

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

Inter ĉiuj, la unuaj tri ricevantoj de la supro klare elstaras laŭ la nombro da leteroj. Se vi trovas la IP-adresojn de la sendintoj, kiuj sendis al adresoj de ĉi tiuj supraj 3, vi rimarkos klaran superregadon de certaj retoj:

$ 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

La plej multaj el la retoj 105/8, 41/8, 196/8,197/8 estas asignitaj al AFRINIC - unu el la kvin regionaj interretaj registriloj, kiuj distribuas interretajn rimedojn. AFRINIC distribuas adrespacon tra Afriko. Kaj 41/8 rilatas al AFRINIC tute.

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

Tiel, la respondo al la problemo estas, fakte, en la protokolo mem.

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

En ĉi tiu etapo ni ricevas la ĉenon "LinuxBenedictTorvadst".

Ĝusta ŝlosilo: "LinusBenedictTorvalds".

La rezulta ĉeno enhavas tajperaron rilate al la ĝusta ŝlosilo en la lastaj 3 signoj. Ĉi tio estas pro la fakto, ke la retoj, kiujn ni elektis, ne estas tute dediĉitaj al afrikaj landoj kaj al la maniero kiel retpoŝtoj estas distribuitaj per IP-adresoj en nia protokolo.

Kun sufiĉa specifo de la plej grandaj retoj asignitaj al afrikaj landoj, preciza respondo povas esti akirita:

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

La problemo ankaŭ povas esti solvita alimaniere.
Elŝutu MaxMind, malpaku ĝin, kaj la sekvaj tri komandoj ankaŭ solvas nian problemon.

$ 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

Unumaniere aŭ alie, ni finfine kalkulis la statistikon, kaj la administrantoj ricevis la datumojn, kiujn ili bezonis por labori!

3. Tria etapo

La tria etapo estas iom simila al la unua - vi ankaŭ devas ripari la varman lampservon, sed ĉio estas pli komplika ol en la unua tasko.

3.1. Interesaj faktoj

En la unuaj 15 minutoj, tri ludantoj trovis la unuan ŝlosilon; 2 horojn kaj 20 minutojn post la komenco de la stadio, nia gajninto plenumis la taskon.

3.2. Ekzerco

Vi iris labori por firmao kie ĉiuj firmaaj dokumentoj estas konservitaj en interna Vikio-servilo. Pasintjare, inĝeniero mendis 3 novajn diskojn por la servilo aldone al unu ekzistanta, argumentante, ke por ke la sistemo estu erarrezista, la diskoj bezonas esti metitaj en iajn tabelojn. Bedaŭrinde, kelkajn semajnojn post ilia instalado, la inĝeniero foriris al Barato kaj ne revenis.

La servilo funkciis sen misfunkciadoj dum pluraj jaroj, sed antaŭ kelkaj tagoj la reto de la kompanio estis hakita. Laŭ la instrukcioj, la sekureca personaro forigis la diskojn de la servilo kaj sendis ilin al vi. Dum transportado, unu disko estis nerehaveble perdita.

Ni devas restarigi la funkciecon de Vikio; antaŭ ĉio, ni interesiĝas pri la enhavo de la vikipaĝoj. Certa teksto, kiu estis sur unu el la paĝoj de ĉi tiu vikio, estas la pasvorto por la 1C-servilo kaj estas urĝe necesa por malŝlosi ĝin.

Krome, ie sur la vikipaĝoj aŭ en alia loko estis pasvortoj por la protokolo-servilo kaj la videogvatservilo, kiuj ankaŭ estus dezirinde reakiri; sen ili, esploro de la okazaĵo estas neebla. Kiel ĉiam, ni atendas tujan solvon de la problemo!

3.3. Solvo

1. Ni provas ekbruligi unu post alia el la diskoj kiujn ni havas kaj ĉie ni ricevas la saman mesaĝon:

No bootable medium found! System halted 

Vi devas starti de io. Lanĉi de Viva KD/DVD (Troubleshooting -> Rescue) denove helpas. Dum ŝarĝo, ni provas trovi la ekdiskon, ni ne povas trovi ĝin, ni finiĝas en la ŝelo. Ni provas studi kion kaj kiel fari kun diskoj. Oni scias, ke estas tri el ili. Estas pli da iloj por ĉi tio en la 7-a versio de CentOS, kie estas komandoj blkidlsblk, kiuj montras al ni ĉiujn informojn pri la diskoj.

Kiel kaj kion ni faras:

$ ls /dev/sd*

Estas tuj evidente ke

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

Ni muntas sdb1, estas klare, ke ĉi tio estas la ekfunkciigo de CentOS 6.

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

Evidente, ni iras al la grub-sekcio kaj trovas la unuan ŝlosilon tie - James191955Gosling en nekutima dosiero.

2. Ni studas pvs kaj lvs, ĉar ni laboras kun LVM. Ni vidas, ke estu 2 fizikaj volumoj, unu ne troviĝas kaj plendas pri perdita uido. Ni vidas ke devus esti 2 logikaj volumoj: radiko kaj interŝanĝi, dum radiko estas parte perdita (la P-atributo de volumeno). Ne eblas munti, kio estas domaĝe! Ni vere bezonas lin.

Estas 2 pliaj diskoj, ni rigardas ilin, muntas kaj muntas ilin:

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

Ni rigardas, ni povas vidi, ke ĉi tio estas la ekfunkciigo de CentOS 6 kaj duplikato de tio, kio jam estas aktiva. /dev/sdb1, kaj ĉi tie denove la sama ŝlosilo - DennisBMacAlistairCRitchie!
Ni vidu kiel ĝi estas kunmetita /dev/md127.

$ mdadm --detail /dev/md127

Ni vidas, ke ĝi devus esti kunvenita el 4 diskoj, sed ĝi estis kunmetita el du /dev/sda1 и /dev/sdc1, ili devus esti numeroj 2 kaj 4 en la sistemo. Ni supozas ke de /dev/sda2 и /dev/sdc2 Vi ankaŭ povas kolekti tabelon. Ne estas klare kial ne estas metadatenoj pri ili, sed ĉi tio estas sur la konscienco de la administranto, kiu estas ie en Goao. Ni supozas, ke devus esti RAID10, kvankam ekzistas opcioj. Ni kolektas:

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

Ni rigardas blkid, pvs, lvs. Ni malkovras, ke ni kolektis fizikan volumon, kiun ni antaŭe mankis.

lvroot estis tuj riparita, ni muntas ĝin, sed unue aktivigas VG:

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

Kaj ĉio estas tie, inkluzive de la ŝlosilo en la radika hejma dosierujo - /root/sweet.

3. Ni ankoraŭ provas revivigi nian servilon por ke ĝi komenciĝu normale. Ĉiuj logikaj volumoj el nia /dev/md0 (kie ni trovis ĉion) trenu ĝin al /dev/sdb2, kie la tuta servilo komence funkciis.

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

Ni malŝaltas la servilon, forigas diskojn 1 kaj 3, forlasas la duan, ekfunkciigas de la Live KD/DVD en Rescue. Trovu la ekfunkciigon kaj restarigu la ekŝargilon en grub:

root (hd0,0)
setup (hd0)

Ni deŝiras la lanĉan diskon kaj ŝarĝas sukcese, sed la retejo ne funkcias.

4. Estas du ebloj por lanĉi retejon: agordi Apache de nulo aŭ uzi nginx kun php-fpm jam agordita anticipe:

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

Fine, vi devas komenci MySQL:

$ /etc/init.d/mysqld start

Ĝi ne komenciĝos, kaj la respondo kuŝas en /var/log/mysql. Tuj kiam vi solvos la problemon kun MySQL, la retejo funkcios, sur la ĉefpaĝo estos ŝlosilo - RichardGCCMatthewGNUStallman! Nun ni havas aliron al 1C, kaj dungitoj povos ricevi siajn salajrojn. Kaj kiel ĉiam, vi havas multan laboron por establi infrastrukturon kaj sekurecon en la kompanio.

Ni ankaŭ povas denove dividi liston de libroj, kiuj helpis nin kaj niajn partoprenantojn prepari por la ludo: linux.mail.ru/books.

Dankon pro esti kun ni! Restu agordita por anoncoj de la venontaj ludoj!

fonto: www.habr.com

Aldoni komenton