Búsqueda de Linux. Felicitaciones a los ganadores y hablamos sobre la resolución de problemas.



El 25 de marzo, abrimos el registro para Linux Quest , este es un juego para fanáticos y expertos en el sistema operativo Linux. Algunas estadísticas: 1117 personas se registraron para el juego, 317 de ellas 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!

  • El primer lugar fue ocupado por Alexander Teldekov.
    Alexander se dijo a sí mismo que él es el administrador de sistemas más típico. Vive en Volgogrado, administra varios sistemas similares a Unix durante veinte años. Gestionado para trabajar en proveedores de Internet, banco, integrador de sistemas. Ahora trabaja de forma remota en una pequeña empresa, se dedica a la infraestructura de la nube para un gran cliente extranjero. Le gusta leer, escuchar música. Sobre el juego, Alexander dijo que le gustaba el juego en su conjunto, le encantan esas tareas. En una de las compañías en la entrevista que estaba haciendo algo como Hackerrank, fue interesante.
  • Segundo lugar - Roman Suslov.
    Una novela de Moscú. El tiene 37 años. Trabaja como ingeniero de Linux / Unix en Jet Infosystems. Para el trabajo, tengo que administrar y solucionar problemas de sistemas Linux / Unix + SAN. Los intereses son muy diferentes: sistemas Linux, programación, ingeniería inversa, seguridad de la información, Arduino. Sobre el juego, Roman notó que generalmente le gustaba el juego. “Flexioné un poco mi giro y me distraje de la vida cotidiana gris del trabajo diario. :) Quisiera más tareas, de lo contrario no tuve tiempo de probar cómo el juego ya había terminado ".
  • El tercero es alex3d.
    Alex vive en Moscú, se dedica al desarrollo de software. "Gracias por el concurso, fue interesante comprobar tu habilidad de google-fu".

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

  • Yevgeniy saldayev
  • Markel Mokhnachevsky
  • Konstantin Konosov
  • Pavel Sergeev
  • Vladimir Bovaev
  • Ivan Bubnov
  • Klets Pavlo

Entendemos que hay muchas opciones para resolver todos nuestros problemas, una de las posibles soluciones se describe a continuación.

1. La primera etapa


Lo llamamos "¿Está seguro del administrador?", Porque la tarea era bastante simple: arreglar un servicio de lámpara caliente.

1.1. Hechos interesantes:


Dos jugadores encontraron la primera clave en los primeros 15 minutos del juego, y en la primera hora tuvimos tres líderes que hicieron frente a la tarea.

1.2. Tarea


Usted fue a trabajar para una empresa donde durante mucho tiempo no hubo un especialista de TI competente. Antes de comenzar a limpiar, debe resolver un problema candente que bloquea el trabajo de la oficina.

Una señora de la limpieza trapeó el cable de alimentación al gabinete del servidor. Se restableció la energía, pero un sitio web muy importante aún no funciona. El sitio web es importante porque la empresa no está muy preocupada por la seguridad de la información, y en la página principal de este se puede encontrar la contraseña del administrador de la computadora del CEO en texto claro.

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

¡Todos esperan una solución rápida al problema!

1.3. Solución


1. En primer lugar, debe cambiar la contraseña de root en la máquina virtual para poder acceder a ella. Al inicio, notamos que este es el Servidor Ubuntu 16.04.

Para restablecer la contraseña de root, reiniciamos la máquina, al inicio, cuando se muestra el menú de grub, vaya a la edición del elemento de Ubuntu con el botón "e". Editamos la línea de Linux, agregamos init=/bin/bash al final. Cargamos a través de Ctrl + x, obtenemos 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 el servidor web no funciona para nosotros, buscamos:

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

Es decir, de hecho, Apache se está ejecutando, pero responde con el código 404. Observamos la configuración:

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

También hay una clave: StevenPaulSteveJobs.

Verificamos la ruta /usr/share/WordPress ; esto no es así, pero hay /usr/share/wordpress . Corregimos la configuración y reiniciamos el Apache.

 $ systemctl restart apache2 

3. Intentamos nuevamente, obtenemos un 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) 

Cual es el problema Es necesario entender. Para hacer esto, necesita acceder a MySQL, cómo hacerlo se describe en la documentación . Uno de los puntos en la documentación recomienda que escribamos la opción skip-grant-tables en /etc/mysql/mysql.conf.d/mysqld.cnf . Aquí también está la clave: AugustaAdaKingByron.

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

4. Después de las acciones tomadas, se inicia el servidor web, pero el sitio aún no funciona, ya que

 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 

Corregimos los derechos del archivo.

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

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

2. La segunda etapa


Era necesario resolver el problema de recopilar análisis. Todo el mundo ama la analítica: quién, dónde y en qué cantidades van. Se nos ocurrió un caso que todos los ingenieros en la vida pueden encontrar de una forma u otra.

2.1. Hechos interesantes


Uno de nuestros jugadores ingresó la clave correcta en los primeros 10 minutos del juego, y en la primera hora obtuvimos un líder que hizo frente a la tarea.

2.2. Tarea


Usted fue a trabajar para la empresa, los gerentes se le acercaron y le pidieron que buscara a quién se le enviaron cartas desde África. Debe construir las 21 principales direcciones de destinatarios en 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 solución rápida al problema!

2.3. Solución


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

Descargue la imagen, descargamos CentOS 7, arranque desde el Live CD / DVD (Solución de problemas -> Rescate), monte el sistema, edite /etc/fstab . Aquí encontramos la primera clave: GottfriedWilhelm11646Leibniz!

Crea un 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 y vamos con éxito al servidor, pero inmediatamente se reinicia. El servidor está sobrecargado a una velocidad tal que ni siquiera tiene tiempo para mirar todos los registros con cuidado. ¿Cómo entender lo que está pasando?

Nuevamente arrancamos desde livecd, estudiamos cuidadosamente los registros del sistema y, por si acaso, miramos en coronas, debido a esa frecuencia. Allí encontramos el problema y la segunda clave es Alan1912MathisonTuring!

Es necesario eliminar o comentar la línea echo b > /proc/sysrq-trigger en /etc/crontab .

3. Después de eso, el servidor se inició y puede completar la tarea de los administradores: "¿Cuáles son las direcciones de África?" Esta información está generalmente disponible al público. Puede encontrar esta información en Internet usando las frases "dirección ip africa", "base de datos geoip". Para resolver el problema, puede usar bases de distribución de direcciones disponibles libremente (geoip). Utilizamos la base de datos MaxMind GeoLite2 , disponible bajo la licencia Creative Commons Attribution-ShareAlike 4.0, como referencia.

Tratemos de resolver nuestro problema usando solo las 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, solo obtenemos los pares "remitente IP - destinatario" del registro de correo /var/log/maillog (construyamos una tabla de destinatarios de correo electrónico - remitente IP). 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 la base de datos de direcciones africanas, miramos las principales direcciones IP de los remitentes.

 $ cat log1.txt | cut -d' ' -f1 | sort | uniq -c | sort -r | head -n 40 5206 L2JhbjAbM67GA99jg@mail.ru 4165 iHKTBkegOQa6fIALq@mail.ru 3739 nHkcBl7BdgXxijSYD7@mail.ru 3405 SMAzPJAzbl9vp4hAXo@mail.ru 3346 xILz6d7P@mail.ru 

Entre todos, los primeros tres destinatarios de la parte superior se distinguen claramente por el número de letras. Si selecciona las direcciones IP de los remitentes que se enviaron a las direcciones de este top 3, puede ver el claro predominio de ciertas redes:

 $ cat log1.txt | fgrep 'L2JhbjAbM67GA99jg@mail.ru' | 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 son asignadas por AFRINIC, uno de los cinco registradores regionales de Internet que distribuyen recursos de Internet. AFRINIC distribuye espacios de direcciones en África. Y 41/8 se refiere a AFRINIC por completo.

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

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

 $ 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 L2JhbjAbM67GA99jg@mail.ru 3313 iHKTBkegOQa6fIALq@mail.ru 2704 nHkcBl7BdgXxijSYD7@mail.ru 2215 uvRbp1O@mail.ru 1774 sPmMsmmFiV@mail.ru 1448 BtG3aHgQgCKuze2AKuRH@mail.ru 1233 eQpuuQ2uQdbwRL3@mail.ru 958 nJT5dpaBZ@mail.ru 862 ef4WbQiB@mail.ru 762 dQCqKL6eVminFfH7wLA@mail.ru 632 ifq6Rd1HxuCQOdO9@mail.ru 539 cFwm2ssypMmx1sA7@mail.ru 531 twtTnr4G@mail.ru 431 TSrczgYASrR11Hs3qCi@mail.ru 380 o3r3exc3OL@mail.ru 357 rzmjr2VAHK@mail.ru 348 vnPr6YjJ3ndw@mail.ru 312 anOjFXrwOtLP2Rl1Vcz6@mail.ru 289 dvny5zHmRW8fiT@mail.ru 282 sgg9jPxFDYvzw8Kr@mail.ru 274 tKSevzA7GntJ@mail.ru 

En este punto, obtenemos la cadena "LinuxBenedictTorvadst".

La clave correcta es LinusBenedictTorvalds.

La cadena resultante contiene un error tipográfico en relación con la clave correcta en 3 caracteres extremos. Esto se debe al hecho de que las redes que hemos elegido no están completamente asignadas a los países africanos y a cómo los correos electrónicos se distribuyen por direcciones IP en nuestro registro.

Con una aclaración suficiente de las redes más grandes asignadas a países africanos, puede obtener la respuesta exacta:

 $ 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 L2JhbjAbM67GA99jg@mail.ru 2662 iHKTBkegOQa6fIALq@mail.ru 2105 nHkcBl7BdgXxijSYD7@mail.ru 1724 uvRbp1O@mail.ru 1376 sPmMsmmFiV@mail.ru 1092 BtG3aHgQgCKuze2AKuRH@mail.ru 849 eQpuuQ2uQdbwRL3@mail.ru 712 nJT5dpaBZ@mail.ru 584 ef4WbQiB@mail.ru 463 dQCqKL6eVminFfH7wLA@mail.ru 365 ifq6Rd1HxuCQOdO9@mail.ru 269 cFwm2ssypMmx1sA7@mail.ru 225 twtTnr4G@mail.ru 168 TSrczgYASrR11Hs3qCi@mail.ru 142 o3r3exc3OL@mail.ru 111 rzmjr2VAHK@mail.ru 96 vnPr6YjJ3ndw@mail.ru 78 anOjFXrwOtLP2Rl1Vcz6@mail.ru 56 lHzWiB7ExvRtSbAcU9@mail.ru 56 dvny5zHmRW8fiT@mail.ru 40 sgg9jPxFDYvzw8Kr@mail.ru 

El problema también se puede resolver de otra manera.
Descargue MaxMind, descomprima y los siguientes tres equipos también resuelven 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, eventualmente contamos las estadísticas, ¡y los gerentes obtuvieron los datos que necesitaban para trabajar!

3. La tercera etapa


La tercera etapa es algo similar a la primera: también debe reparar el servicio de la lámpara caliente, pero es más difícil que en la primera tarea.

3.1. Hechos interesantes


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

3.2. Tarea


Usted fue a trabajar en una compañía donde todos los documentos de la compañía se almacenan en el servidor Wiki interno. El año pasado, un ingeniero ordenó 3 discos nuevos para el servidor además de uno existente, argumentando que para la tolerancia a fallas del sistema es necesario colocar discos en algunos arreglos. Desafortunadamente, unas semanas después de su instalación, el ingeniero se fue a descansar a la India y no regresó.

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

Necesita restaurar la wiki, en primer lugar, el contenido de las páginas wiki es de interés. Un texto que estaba en una de las páginas de este wiki es una contraseña de un 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 del servidor de registro y del servidor de videovigilancia, que también son deseables para recuperar, sin ellas es imposible investigar el incidente. ¡Como siempre, se espera de una solución operativa al problema!

3.3. Solución


1. Intentamos arrancar a su vez desde las unidades que tenemos y en todas partes recibimos el mismo mensaje:

 No bootable medium found! System halted 

Es necesario arrancar desde algo. Nuevamente rescata el arranque desde un Live CD / DVD (Solución de problemas -> Rescate). Al arrancar, intentamos encontrar la partición de arranque, no la encontramos, nos metemos en el shell. Estamos tratando de aprender qué y cómo con los discos. Se sabe que hay tres de ellos. Hay más herramientas para esto en la séptima versión de CentOS, donde hay lsblk blkid o lsblk que nos muestran toda la información sobre los discos.

Cómo y qué hacer:

 $ ls /dev/sd* 

Está claro de inmediato que

 /dev/sdb1 - ext4 /dev/sdb2 -  lvm /dev/sda1  /dev/sdc1 -   /dev/sda2  /dev/sdc2 -         

Monte sdb1, está 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, mientras trabajamos con LVM. Vemos que debe haber 2 volúmenes físicos, uno no está ubicado y jura por el líquido perdido. Vemos que debería haber 2 volúmenes lógicamente: raíz e intercambio, mientras que la raíz se pierde parcialmente (el atributo P del volumen). Mount no funciona, pero lo siento. Realmente lo necesitamos.

Hay 2 discos más, mírelos, monte y monte:

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

Miramos, está claro que esta es la partición de arranque de CentOS 6 y una toma de lo que ya está en /dev/sdb1 , ¡y aquí nuevamente la misma clave es James191955Gosling!

Vemos cómo /dev/md127 .

 $ mdadm --detail /dev/md127 

Vemos que tenía que ensamblarse a partir de 4 discos, ensamblados a partir de dos /dev/sda1 y /dev/sdc1 , deberían ser los números 2 y 4 en el sistema. Suponemos que también puede crear una matriz desde /dev/sda2 y /dev/sdc2 . No está claro por qué no hay metadatos en ellos, pero esto está en la conciencia del administrador, que está en algún lugar de Goa. Asumimos que debería haber RAID10, aunque hay opciones. Recopilamos:

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

Nos fijamos en blkid, pvs, lvs. Descubrimos que recolectamos un volumen físico, que anteriormente no teníamos.

Inmediatamente arreglamos lvroot, lo montamos, pero primero activamos VG:

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

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

3. Sin embargo, estamos tratando de revivir nuestro servidor para que se inicie normalmente. Todo el volumen lógico c de nuestro /dev/md0 (donde tenemos todo) se arrastra a /dev/sdb2 , donde inicialmente trabajó todo el servidor.

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

Apagamos el servidor, eliminamos 1 y 3 discos, dejamos el segundo, arrancamos desde el Live CD / DVD en Rescue. Encontramos la sección de arranque, restauramos el gestor de arranque en grub:

 root (hd0,0) setup (hd0) 

Cortamos el disco de arranque y arrancamos con éxito, pero el sitio no funciona.

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

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

Finalmente, necesitas iniciar MySQL:

 $ /etc/init.d/mysqld start 

No se inicia y la solución se encuentra en /var/log/mysql . Tan pronto como resuelva el problema con MySQL, el sitio funcionará, la página principal tendrá una clave: RichardGCCMatthewGNUStallman. Ahora tenemos acceso a 1C, y los empleados podrán recibir un pago. Y como siempre, tiene mucho trabajo por delante para construir 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 prepararse para el juego: linux.mail.ru/books .

¡Gracias por estar con nosotros! ¡Sigue los anuncios de los próximos juegos!

Source: https://habr.com/ru/post/447222/


All Articles