Búsqueda de Linux. Felicitaciones a los ganadores y cuéntenos sobre las soluciones a las tareas.

Búsqueda de Linux. Felicitaciones a los ganadores y cuéntenos sobre las soluciones a las tareas.

El 25 de marzo abrimos la inscripción para Búsqueda de Linux, este es un Juego para amantes y expertos del sistema operativo Linux. Algunas estadísticas: 1117 personas se inscribieron en el juego, 317 de ellos encontraron al menos una clave, 241 completaron con éxito la tarea de la primera etapa, 123 la segunda y 70 pasaron la tercera etapa. ¡Hoy nuestro juego ha llegado a su fin y felicitamos a nuestros ganadores!

  • Alexander Teldekov obtuvo el primer lugar.
    Alexander se dijo a sí mismo que es el administrador de sistemas más típico. Vive en Volgogrado y desde hace unos veinte años administra varios sistemas tipo Unix. Logré trabajar en proveedores de Internet, un banco y un integrador de sistemas. Ahora trabaja de forma remota en una pequeña empresa, trabajando en la infraestructura de la nube para un gran cliente extranjero. Le encanta leer y escuchar música. Sobre el juego, Alexander dijo que le gustó el juego en su conjunto y le encantan esas tareas. Durante una entrevista en una de las empresas, hice algo similar a Hackerrank, fue interesante.
  • Segundo lugar: Roman Suslov.
    Una novela de Moscú. Tiene 37 años. Trabaja como ingeniero de Linux/Unix en Jet Infosystems. En el trabajo, tengo que administrar y solucionar problemas de sistemas Linux/Unix + SAN. Los intereses son variados: sistemas Linux, programación, ingeniería inversa, seguridad de la información, Arduino. Acerca del juego Roman señaló que le gustó el juego en general. “Estiré un poco mi cerebro y me tomé un descanso de la gris vida cotidiana del trabajo. 🙂 Me gustaría tener más tareas, de lo contrario, antes de que tuviera tiempo de probarlas, el juego ya había terminado”.
  • Tercero: alex3d.
    Alex vive en Moscú y trabaja en el desarrollo de software. "Gracias por el concurso, fue interesante poner a prueba mis habilidades con Google-fu".

También en el ranking de los 10 mejores jugadores:

  • Yevgeniy Saldayev
  • Markel Mokhnachevsky
  • Konstantin Konosov
  • Pavel Sergeev
  • Vladímir Bováev
  • Iván Bubnov
  • Pavlo Klets

Entendemos que existen muchas opciones para solucionar todos nuestros problemas, algunas de las posibles soluciones se describen a continuación.

1. Primera etapa

Lo llamamos "¿Es usted realmente administrador?", ya que la tarea era bastante simple: arreglar un servicio de lámpara caliente.

1.1. Datos interesantes:

Dos jugadores encontraron la primera llave en los primeros 15 minutos de partido y en la primera hora tuvimos tres líderes que completaron la tarea.

1.2. Ejercicio

Entró a trabajar en una empresa en la que durante mucho tiempo no había ningún especialista competente en tecnologías de la información. Antes de empezar a poner las cosas en orden, es necesario solucionar el problema candente que bloquea el trabajo de la oficina.

La señora de la limpieza atrapó el cable de alimentación del armario del servidor con una fregona. Se ha restablecido la electricidad, pero un sitio web muy importante todavía no funciona. El sitio web es importante porque la empresa no se preocupa mucho por la seguridad de la información, y en la página principal de este se puede encontrar en texto claro la contraseña de administrador de la computadora del CEO.

El otro día cambiaron la contraseña, pero todos olvidaron la nueva, el director no puede trabajar. Hay rumores de que en esta máquina había más claves que podrían ayudarnos a descifrar la copia de seguridad de los documentos contables.

¡Todos esperan una pronta resolución del problema!

1.3. Solucion

1. En primer lugar, debe cambiar la contraseña de root en la máquina virtual para poder acceder a ella. Al iniciar, notamos que se trata de Ubuntu 16.04 Server.

Para restablecer la contraseña de root reiniciamos la máquina, al cargar, en el momento en que se muestra el menú de grub, vamos a editar el elemento de Ubuntu con el botón “e”. Edita la línea Linux, agrégala al final. init=/bin/bash. Cargamos mediante Ctrl+x, obtenemos un bash. Vuelva a montar la raíz con rw, cambie la contraseña:

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

No te olvides de la sincronización, reinicia.

2. La condición dice que nuestro servidor web no está funcionando, mira:

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

De hecho, Apache se está ejecutando, pero responde con el código 404. Veamos la configuración:

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

También hay una clave aquí: StevenPaulSteveJobs.

Comprobando el camino /usr/share/WordPress - no existe tal cosa, pero sí /usr/share/wordpress. Edite la configuración y reinicie Apache.

$ systemctl restart apache2

3. Inténtalo de nuevo, obtenemos el error:

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

¿La base de datos no se está ejecutando?

$ systemctl status mysql
Active: active (running)

¿Qué pasa? Necesitamos resolverlo. Para hacer esto, necesita obtener acceso a MySQL, como se describe en documentación. Uno de los puntos de la documentación recomienda que registremos la opción. skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf. También hay una clave aquí: AugustaAdaKingByron.

Corrección de derechos de usuario 'wp'@'localhost'. Lanzamos MySQL, lo hacemos accesible a través de la red, comentando la opción en la configuración. skip-networking.

4. Después de estos pasos, el servidor web se inicia, pero el sitio aún no 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 los derechos del archivo.

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

Actualizamos la página, vamos al sitio y buscamos la clave: ¡BjarneStroustrup! Encontramos las tres claves, nuestro director puede trabajar, desciframos los archivos contables. Todos están contentos y tienes mucho trabajo por delante para configurar la infraestructura, las copias de seguridad y la seguridad en la empresa.

2. Segunda etapa

Era necesario solucionar el problema de la recopilación de análisis. A todo el mundo le encanta la analítica: quién la utiliza, dónde y en qué cantidades. Se nos ocurrió un caso que todos los ingenieros pueden encontrar de una forma u otra en la vida.

2.1. Datos interesantes

Uno de nuestros jugadores ingresó la clave correcta dentro de los primeros 10 minutos del juego, y dentro de la primera hora teníamos un líder que completó la tarea.

2.2. Ejercicio

Fuiste a trabajar a la empresa, los gerentes se acercaron a ti y te pidieron que averiguaras a quién se enviaban las cartas desde África. Necesitamos crear las 21 direcciones de destinatarios principales en función de ellas. Las primeras letras de las direcciones de los destinatarios son la clave. Una cosa: el servidor de correo a través del cual se enviaron las cartas no se carga. ¡Todos esperan una pronta resolución del problema!

2.3. Solucion

1. El servidor no arranca debido a una partición de intercambio inexistente en fstab, cuando se carga, el sistema intenta montarlo y falla. ¿Cómo arrancar?

Descargue la imagen, descargamos CentOS 7, arrancamos desde Live CD/DVD (Solución de problemas -> Rescate), montamos el sistema, editamos /etc/fstab. Inmediatamente encontramos la primera clave: ¡GottfriedWilhelm11646Leibniz!

Crear intercambio:

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

2. Como siempre, no hay contraseña, debe cambiar la contraseña de root en la máquina virtual. Ya hicimos esto en la primera tarea. Cambiamos e iniciamos sesión exitosamente en el servidor, pero inmediatamente se reinicia. El servidor está sobrecargado a tal velocidad que ni siquiera tienes tiempo de mirar todos los registros con atención. ¿Cómo entender lo que está pasando?

Nuevamente arrancamos desde el livecd, estudiamos cuidadosamente los registros del sistema y, por si acaso, miramos el cron, ya que existe tal periodicidad. Allí encontramos el problema y la segunda clave: ¡Alan1912MathisonTuring!

Necesario en /etc/crontab eliminar o comentar una línea echo b > /proc/sysrq-trigger.

3. Después de lo cual el servidor se habrá cargado y podrá completar la tarea de los administradores: "¿Cuáles son las direcciones en África?" Esta información generalmente está disponible para el público. Puede encontrar esta información en Internet utilizando las frases "dirección IP de África", "base de datos Geoip". Para resolver el problema, puede utilizar bases de datos de distribución de direcciones (geoip) disponibles gratuitamente. Usamos la base de datos como estándar. MaxMind GeoLite2, disponible bajo una licencia Creative Commons Attribution-ShareAlike 4.0.

Intentemos resolver nuestro problema usando solo utilidades del sistema Linux, pero en general se puede resolver de muchas maneras: usando utilidades de filtrado de texto y usando scripts en varios lenguajes de programación.

Para empezar, simplemente obtendremos los pares "IP remitente-destinatario" del registro de correo. /var/log/maillog (creemos una tabla de destinatarios de correo electrónico: IP del remitente). Esto se puede hacer con el siguiente 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

Y antes de continuar con la compilación de una base de datos de direcciones africanas, echemos un vistazo a las principales direcciones IP de los 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 ellos, los tres primeros destinatarios desde arriba destacan claramente en cuanto al número de cartas. Si buscas las direcciones IP de los remitentes que enviaron a direcciones de este top 3, notarás un claro predominio de ciertas 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

La mayoría de las redes 105/8, 41/8, 196/8,197/8 están asignadas a AFRINIC, uno de los cinco registradores regionales de Internet que distribuyen recursos de Internet. AFRINIC distribuye espacio de direcciones en toda África. Y 41/8 se refiere completamente a AFRINIC.

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

Por tanto, la respuesta al problema está, de hecho, en el propio registro.

$ 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 esta etapa obtenemos la cadena "LinuxBenedictTorvadst".

Clave correcta: "LinusBenedictTorvalds".

La cadena resultante contiene un error tipográfico en relación con la clave correcta en los últimos 3 caracteres. Esto se debe al hecho de que las redes que seleccionamos no están completamente dedicadas a países africanos y a la forma en que se distribuyen los correos electrónicos según las direcciones IP en nuestro registro.

Con una especificación suficiente de las redes más grandes asignadas a los países africanos, se puede obtener una respuesta 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]

El problema también se puede solucionar de otra forma.
Descargue MaxMind, descomprímalo y los siguientes tres comandos también resolverán nuestro 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

De una forma u otra, finalmente calculamos las estadísticas y los gerentes recibieron los datos que necesitaban para trabajar.

3. La tercera etapa

La tercera etapa es algo similar a la primera: también es necesario arreglar el servicio de la lámpara caliente, pero todo es más complicado que en la primera tarea.

3.1. Datos interesantes

En los primeros 15 minutos, tres jugadores encontraron la primera llave; 2 horas y 20 minutos después del inicio de la etapa, nuestro ganador completó la tarea.

3.2. Ejercicio

Fuiste a trabajar para una empresa donde todos los documentos de la empresa se almacenan en un servidor Wiki interno. El año pasado, un ingeniero encargó 3 discos nuevos para el servidor además de uno existente, argumentando que para que el sistema fuera tolerante a fallos, los discos debían colocarse en algún tipo de matriz. Desafortunadamente, unas semanas después de su instalación, el ingeniero se fue de vacaciones a la India y no regresó.

El servidor funcionó sin fallas durante varios años, pero hace un par de días la red de la empresa fue pirateada. De acuerdo con las instrucciones, el personal de seguridad extrajo los discos del servidor y se los envió. Durante el transporte, un disco se perdió irremediablemente.

Necesitamos restaurar la funcionalidad de Wiki; en primer lugar, nos interesa el contenido de las páginas wiki. Cierto fragmento de texto que estaba en una de las páginas de este wiki es la contraseña del servidor 1C y se necesita con urgencia para desbloquearlo.

Además, en algún lugar de las páginas wiki o en otro lugar había contraseñas para el servidor de registro y el servidor de videovigilancia, que también sería conveniente recuperar; sin ellas, la investigación del incidente es imposible. Como siempre, esperamos una pronta resolución del problema.

3.3. Solucion

1. Intentamos arrancar uno a uno desde los discos que tenemos y en todos lados recibimos el mismo mensaje:

No bootable medium found! System halted 

Necesitas arrancar desde algo. Arrancar desde un Live CD/DVD (Solución de problemas -> Rescate) ayuda nuevamente. Al cargar, intentamos encontrar la partición de arranque, no la encontramos, terminamos en el shell. Estamos intentando estudiar qué y cómo hacer con los discos. Se sabe que son tres. Hay más herramientas para esto en la séptima versión de CentOS, donde hay comandos blkid o lsblk, que nos muestran toda la información sobre los discos.

Cómo y qué hacemos:

$ ls /dev/sd*

Está claro de inmediato que

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

Montamos sdb1, queda claro que esta es la partición de arranque de CentOS 6.

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

Obviamente, vamos a la sección de grub y encontramos la primera clave allí: James191955Gosling en un archivo inusual.

2. Estudiamos pvs y lvs, ya que trabajamos con LVM. Vemos que debería haber 2 volúmenes físicos, uno no está ubicado y se queja de pérdida de líquido. Vemos que debería haber 2 volúmenes lógicos: raíz y intercambio, mientras que la raíz se pierde parcialmente (el atributo P del volumen). ¡No es posible montarlo, lo cual es una lástima! Realmente lo necesitamos.

Quedan 2 discos más, los miramos, los montamos y montamos:

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

Miramos, podemos ver que esta es la partición de arranque de CentOS 6 y un duplicado de lo que ya está en /dev/sdb1, y aquí de nuevo la misma clave: DennisBMacAlistairCRitchie.
Veamos cómo se monta. /dev/md127.

$ mdadm --detail /dev/md127

Vemos que debería haberse ensamblado a partir de 4 discos, pero se ensambló a partir de dos /dev/sda1 и /dev/sdc1, deberían haber sido los números 2 y 4 en el sistema. Suponemos que desde /dev/sda2 и /dev/sdc2 También puedes recopilar una matriz. No está claro por qué no hay metadatos sobre ellos, pero esto está en la conciencia del administrador, que se encuentra en algún lugar de Goa. Suponemos que debería haber RAID10, aunque hay opciones. Nosotros coleccionamos:

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

Miramos blkid, pvs, lvs. Descubrimos que hemos acumulado un volumen físico del que antes nos faltaba.

lvroot fue reparado inmediatamente, lo montamos, pero primero activamos VG:

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

Y todo está ahí, incluida la clave en el directorio raíz de inicio: /root/sweet.

3. Todavía estamos intentando reactivar nuestro servidor para que se inicie normalmente. Todos los volúmenes lógicos de nuestro /dev/md0 (donde encontramos todo) arrástralo a /dev/sdb2, donde inicialmente funcionó todo el servidor.

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

Apagamos el servidor, retiramos los discos 1 y 3, dejamos el segundo, arrancamos desde el Live CD/DVD en Rescue. Busque la partición de arranque y restaure el gestor de arranque en grub:

root (hd0,0)
setup (hd0)

Arrancamos el disco de arranque y lo cargamos correctamente, pero el sitio no funciona.

4. Hay dos opciones para iniciar un sitio web: configurar Apache desde cero o usar nginx con php-fpm ya configurado de antemano:

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

Finalmente, necesitas iniciar MySQL:

$ /etc/init.d/mysqld start

No arranca y la respuesta está en /var/log/mysql. Tan pronto como resuelva el problema con MySQL, el sitio funcionará, en la página principal habrá una clave: RichardGCCMatthewGNUStallman. Ahora tenemos acceso a 1C y los empleados podrán recibir sus salarios. Y como siempre, tienes mucho trabajo por delante para establecer infraestructura y seguridad en la empresa.

También podemos compartir una vez más una lista de libros que nos ayudaron a nosotros y a nuestros participantes a prepararnos para el juego: linux.mail.ru/books.

¡Gracias por estar con nosotros! ¡Estén atentos a los anuncios de los próximos juegos!

Fuente: habr.com

Añadir un comentario