Linux Quest. Parabéns aos gañadores e cóntanos as solucións ás tarefas

Linux Quest. Parabéns aos gañadores e cóntanos as solucións ás tarefas

O 25 de marzo abrimos a inscrición para Linux Quest, este é un Xogo para amantes e expertos do sistema operativo Linux. Algunhas estatísticas: 1117 persoas rexistradas para o xogo, 317 delas atoparon polo menos unha clave, 241 completaron con éxito a tarefa da primeira etapa, 123 - a segunda e 70 pasaron a terceira etapa. Hoxe o noso xogo chegou ao seu fin e felicitamos aos nosos gañadores!

  • Alexander Teldekov ocupou o primeiro lugar.
    Alexander dixo para si que é o administrador do sistema máis típico. Vive en Volgogrado, leva uns vinte anos administrando varios sistemas tipo Unix. Conseguín traballar en provedores de Internet, nun banco e nun integrador de sistemas. Agora traballa de forma remota nunha pequena empresa, traballando na infraestrutura na nube para un gran cliente estranxeiro. Gústalle ler e escoitar música. Sobre o xogo, Alexander dixo que lle gustaba o xogo no seu conxunto, que lle encantan este tipo de tarefas. Durante unha entrevista nunha das empresas que fixen algo parecido a Hackerrank, foi interesante.
  • Segundo lugar - Roman Suslov.
    Unha novela de Moscova. Ten 37 anos. Traballa como enxeñeiro Linux/Unix en Jet Infosystems. No traballo, teño que administrar e solucionar problemas de sistemas Linux/Unix + SAN. Os intereses son variados: sistemas Linux, programación, enxeñaría inversa, seguridade da información, Arduino. Sobre o xogo Roman sinalou que lle gustou o xogo en xeral. “Estirei un pouco o cerebro e tomei un descanso da gris vida cotiá do traballo diario. 🙂 Gustaríame ter máis tarefas, se non, antes de ter tempo de probar, o xogo xa estaba rematado”.
  • Terceiro - alex3d.
    Alex vive en Moscova e traballa no desenvolvemento de software. "Grazas polo concurso, foi interesante probar as miñas habilidades de google-fu".

Tamén no ranking dos 10 mellores xogadores:

  • Yevgeniy Saldayev
  • Markel Mokhnachevsky
  • Konstantin Konosov
  • Pavel Sergeev
  • Vladimir Bovaev
  • Iván Bubnov
  • Pavlo Klets

Entendemos que hai moitas opcións para resolver todos os nosos problemas; a continuación descríbense algunhas das posibles solucións.

1. Primeira etapa

Chamámoslle "¿Realmente es un administrador?", xa que a tarefa era bastante sinxela: arranxar un servizo de lámpadas quentes.

1.1. Feitos interesantes:

Dous xogadores atoparon a primeira chave nos primeiros 15 minutos de partido, e na primeira hora tivemos tres líderes que completaron a tarefa.

1.2. Exercicio

Marchaste a traballar nunha empresa na que durante moito tempo non había un especialista competente en tecnoloxía da información. Antes de comezar a poñer as cousas en orde, cómpre resolver o problema de queima que bloquea o traballo da oficina.

A muller da limpeza colleu o cable de alimentación do armario do servidor cunha fregona. Restableceuse a enerxía, pero un sitio web moi importante aínda non funciona. A web é importante porque a empresa non está moi preocupada pola seguridade da información, e na páxina principal desta podes atopar en texto claro o contrasinal do administrador do ordenador do CEO.

O outro día cambiouse o contrasinal, pero todos esqueceron o novo, o director non pode traballar. Hai rumores de que había máis claves nesta máquina que poderían axudarnos a descifrar a copia de seguridade dos documentos contables.

Todo o mundo espera unha pronta resolución do problema!

1.3. Solución

1. Primeiro de todo, cómpre cambiar o contrasinal de root na máquina virtual para acceder a ela. Ao comezar, notamos que se trata de Ubuntu 16.04 Server.

Para restablecer o contrasinal de root, reiniciamos a máquina, ao cargar, no momento en que se mostra o menú grub, vaia a editar o elemento de Ubuntu co botón "e". Edite a liña linux, engádea ao final init=/bin/bash. Cargamos mediante Ctrl+x, obtemos un bash. Volve a montar o root con rw, cambia o contrasinal:

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

Non esquezas a sincronización, reinicia.

2. A condición di que o noso servidor web non funciona, mira:

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

É dicir, de feito, Apache está en execución, pero responde co código 404. Vexamos a configuración:

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

Tamén hai unha clave aquí: StevenPaulSteveJobs.

Comprobando o camiño /usr/share/WordPress - non hai tal cousa, pero si /usr/share/wordpress. Edite a configuración e reinicie Apache.

$ systemctl restart apache2

3. Téntao de novo, obtemos o erro:

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

A base de datos non se está a executar?

$ systemctl status mysql
Active: active (running)

Que pasa? Necesitamos descubrilo. Para iso, debes acceder a MySQL, como se describe en documentación. Un dos puntos de documentación recomenda que rexistremos a opción skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf. Tamén hai unha clave aquí: AugustaAdaKingByron.

Corrección de dereitos de usuario 'wp'@'localhost'. Lanzamos MySQL, facémolo accesible pola rede, comentando a opción na configuración skip-networking.

4. Despois destes pasos, o servidor web iníciase, pero o sitio aínda non funciona porque

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

Editamos os dereitos do ficheiro.

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

Actualizamos a páxina, imos ao sitio e atopamos a clave - BjarneStroustrup! Atopamos as tres claves, o noso director pode traballar, desciframos os ficheiros contables. Todo o mundo está contento e tes moito traballo por diante para configurar a infraestrutura, as copias de seguridade e a seguridade na empresa.

2. Segunda etapa

Era necesario resolver o problema da recollida de analíticas. Todo o mundo adora a analítica: quen a usa, onde e en que cantidades. Ocorréusenos cun caso que todos os enxeñeiros poden atopar dunha ou outra forma na vida.

2.1. Feitos interesantes

Un dos nosos xogadores introduciu a clave correcta nos primeiros 10 minutos de xogo, e na primeira hora tivemos un líder que completou a tarefa.

2.2. Exercicio

Fuches traballar na empresa, os directivos acudían a ti e pedíronche que buscases a quen lle enviaban cartas desde África. Necesitamos construír os 21 principais enderezos de destinatarios en función deles. As primeiras letras dos enderezos dos destinatarios son a clave. Unha cousa: o servidor de correo a través do cal se enviaron as cartas non se carga. Todo o mundo espera unha pronta resolución do problema!

2.3. Solución

1. O servidor non se inicia debido a unha partición de intercambio inexistente en fstab, ao cargar, o sistema tenta montalo e falla. Como arrincar?

Descarga a imaxe, descargamos CentOS 7, iniciamos desde Live CD/DVD (Solución de problemas -> Rescate), montamos o sistema, editamos /etc/fstab. Inmediatamente atopamos a primeira clave: GottfriedWilhelm11646Leibniz!

Crear intercambio:

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

2. Como sempre, non hai contrasinal, cómpre cambiar o contrasinal de root na máquina virtual. Xa o fixemos na primeira tarefa. Cambiamos e iniciamos sesión correctamente no servidor, pero reinicia inmediatamente. O servidor está sobrecargado a tal velocidade que nin sequera tes tempo para mirar todos os rexistros con atención. Como entender o que está pasando?

De novo arrancamos desde o livecd, estudamos coidadosamente os rexistros do sistema e, por se acaso, miramos o cron, xa que esa periodicidade. Alí atopamos o problema e a segunda clave - Alan1912MathisonTuring!

Necesitas dentro /etc/crontab eliminar ou comentar a liña echo b > /proc/sysrq-trigger.

3. Despois de que se cargou o servidor, pode completar a tarefa dos xestores: "Cales son os enderezos en África?" Esta información está xeralmente dispoñible para o público. Podes atopar esta información en Internet usando as frases "dirección IP África", "base de datos xeoip". Para resolver o problema, pode utilizar bases de datos de distribución de enderezos dispoñibles de xeito gratuíto (geoip). Usamos a base de datos como estándar MaxMind GeoLite2, dispoñible baixo unha licenza Creative Commons Recoñecemento-CompartirIgual 4.0.

Tentemos resolver o noso problema usando só utilidades do sistema Linux, pero en xeral pódese resolver de moitas formas: usando utilidades de filtrado de texto e usando scripts en varias linguaxes de programación.

Para comezar, simplemente obteremos os pares "IP remitente-destinatario" do rexistro de correo /var/log/maillog (construamos unha táboa de destinatarios de correo electrónico: IP do remitente). Isto pódese facer co seguinte comando:

$ 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

E antes de continuar coa compilación dunha base de datos de enderezos africanos, vexamos os principais enderezos IP dos remitentes.

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

Entre todos eles destacan claramente os tres primeiros destinatarios da parte superior en canto ao número de cartas. Se grep os enderezos IP dos remitentes que enviaron a enderezos destes 3 principais, notarás un claro predominio de certas redes:

$ 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

A maioría das redes 105/8, 41/8, 196/8,197/8 están asignadas a AFRINIC, un dos cinco rexistradores rexionais de Internet que distribúen recursos de Internet. AFRINIC distribúe espazo de enderezo por toda África. E 41/8 refírese a AFRINIC completamente.

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

Así, a resposta ao problema está, de feito, no propio rexistro.

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

Nesta fase obtemos a cadea "LinuxBenedictTorvadst".

Chave correcta: "LinusBenedictTorvalds".

A cadea resultante contén un erro tipográfico en relación coa clave correcta nos últimos 3 caracteres. Isto débese ao feito de que as redes que seleccionamos non están totalmente dedicadas aos países africanos e á forma en que os correos electrónicos se distribúen por enderezos IP no noso rexistro.

Cunha especificación suficiente das redes máis grandes asignadas aos países africanos, pódese obter unha resposta precisa:

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

O problema tamén se pode resolver doutra forma.
Descarga MaxMind, descompácalo e os seguintes tres comandos tamén resolven o noso problema.

$ 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

Dun xeito ou doutro, ao final calculamos as estatísticas, e os xestores recibiron os datos que necesitaban para traballar!

3. Terceira etapa

A terceira etapa é algo semellante á primeira: tamén cómpre arranxar o servizo de lámpadas quentes, pero todo é máis complicado que na primeira tarefa.

3.1. Feitos interesantes

Nos primeiros 15 minutos, tres xogadores atoparon a primeira chave; 2 horas e 20 minutos despois do inicio da etapa, o noso gañador completou a tarefa.

3.2. Exercicio

Fuches traballar para unha empresa onde todos os documentos da empresa están almacenados nun servidor Wiki interno. O ano pasado, un enxeñeiro pediu 3 discos novos para o servidor ademais dun existente, argumentando que para tolerar fallos do sistema os discos debían colocarse nalgún tipo de matrices. Desafortunadamente, poucas semanas despois da súa instalación, o enxeñeiro foise de vacacións á India e non regresou.

O servidor funcionou sen fallos durante varios anos, pero hai uns días a rede da empresa foi pirateada. Segundo as instrucións, o persoal de seguridade quitou os discos do servidor e enviounos. Durante o transporte, perdeuse irremediablemente un disco.

Necesitamos restaurar a funcionalidade de Wiki; en primeiro lugar, interésanos o contido das páxinas wiki. Un determinado fragmento de texto que estaba nunha das páxinas deste wiki é o contrasinal do servidor 1C e é necesario con urxencia para desbloquealo.

Ademais, nalgún lugar das páxinas wiki ou noutro lugar había contrasinais para o servidor de rexistro e o servidor de videovixilancia, que tamén sería desexable recuperar; sen eles, a investigación do incidente é imposible. Como sempre, esperamos unha pronta resolución do problema!

3.3. Solución

1. Tentamos arrancar un a un desde os discos que temos e en todas partes recibimos a mesma mensaxe:

No bootable medium found! System halted 

Necesitas arrancar desde algo. O arranque desde un CD/DVD en directo (Solución de problemas -> Rescate) axuda de novo. Ao cargar, intentamos atopar a partición de arranque, non a atopamos, acabamos no shell. Estamos tentando estudar que e como facer cos discos. Sábese que son tres. Hai máis ferramentas para iso na 7ª versión de CentOS, onde hai comandos blkid ou lsblk, que nos mostra toda a información sobre os discos.

Como e que facemos:

$ ls /dev/sd*

Inmediatamente é obvio que

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

Montamos sdb1, está claro que esta é a partición de arranque de CentOS 6.

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

Obviamente, imos á sección grub e atopamos alí a primeira clave: James191955Gosling nun ficheiro pouco común.

2. Estudamos pvs e lvs, xa que traballamos con LVM. Vemos que debería haber 2 volumes físicos, un non está localizado e quéixase dun uid perdido. Vemos que debería haber 2 volumes lóxicos: root e swap, mentres que root pérdese parcialmente (o atributo P do volume). Non se pode montar, que é unha mágoa! Realmente o necesitamos.

Hai 2 discos máis, mirámolos, montamos e montamos:

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

Miramos, podemos ver que esta é a partición de arranque de CentOS 6 e un duplicado do que xa está activado /dev/sdb1, e aquí de novo a mesma clave - DennisBMacAlistairCRitchie!
A ver como se monta /dev/md127.

$ mdadm --detail /dev/md127

Vemos que debería ter sido montado a partir de 4 discos, pero foi montado a partir de dous /dev/sda1 и /dev/sdc1, deberían ser os números 2 e 4 do sistema. Supoñemos que desde /dev/sda2 и /dev/sdc2 Tamén podes recoller unha matriz. Non está claro por que non hai metadatos sobre eles, pero isto está na conciencia do administrador, que está nalgún lugar de Goa. Supoñemos que debería haber RAID10, aínda que hai opcións. Recollemos:

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

Miramos blkid, pvs, lvs. Descubrimos que recollemos un volume físico do que antes carecíamos.

lvroot foi inmediatamente reparado, montámolo, pero primeiro activamos VG:

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

E todo está alí, incluída a chave no directorio principal raíz - /root/sweet.

3. Aínda estamos intentando revivir o noso servidor para que se inicie normalmente. Todos os volumes lóxicos do noso /dev/md0 (onde atopamos todo) arrástralo /dev/sdb2, onde funcionaba inicialmente todo o servidor.

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

Apagamos o servidor, eliminamos os discos 1 e 3, deixamos o segundo, arrancamos dende o Live CD/DVD en Rescue. Busca a partición de arranque e restaura o cargador de arranque en grub:

root (hd0,0)
setup (hd0)

Arrancamos o disco de arranque e cargamos correctamente, pero o sitio non funciona.

4. Hai dúas opcións para lanzar un sitio web: configurar Apache desde cero ou usar nginx con php-fpm xa configurado de antemán:

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

Finalmente, debes iniciar MySQL:

$ /etc/init.d/mysqld start

Non comezará, e a resposta está en /var/log/mysql. Tan pronto como resolva o problema con MySQL, o sitio funcionará, na páxina principal haberá unha chave: RichardGCCMatthewGNUStallman! Agora temos acceso a 1C, e os empregados poderán recibir os seus salarios. E coma sempre, tes moito traballo por diante para establecer infraestruturas e seguridade na empresa.

Tamén podemos compartir unha vez máis unha lista de libros que nos axudaron a nós e aos nosos participantes a preparar o xogo: linux.mail.ru/books.

Grazas por estar connosco! Estade atentos aos anuncios dos próximos xogos!

Fonte: www.habr.com

Engadir un comentario