Fundamentos de Linux 3 – Parte 2

Aquí comienza la segunda parte de la sala Fundamentos de Linux III de TryHackme, dentro de la ruta Pre-Security. Esta es la segunda parte de la publicación anterior: Linux Fundamentals III. Pre-Security Path (13).

Procesos 101

Los procesos son los programas que están corriendo en tu máquina. Estos son gestionados por el kernel, donde cada proceso tendrá asociado un ID, también conocido como PID. El PID incrementa según el orden en que arranca el proceso. Por ejemplo, el proceso que arranca en sexagésimo lugar tendrá un PID de 60.

Viendo los procesos

Puedes usar el comando ps para proporcionar una lista de procesos en ejecución en tu sesión de usuario e información adicional como el código de estado, la sesión que está corriendo dicho proceso, cuánto tiempo de uso de la CPU utiliza, y el nombre del programa actual o comando que está siendo ejecutado:

Linux Fundamentals Procesos

Nótese cómo en la captura anterior, el segundo proceso ps tiene un PID de 204, y a continuación, en el comando inferior a él, se ve incrementado a 205.

Para ver los procesos ejecutados por otros usuarios y aquellos que no se están ejecutando mediante una sesión (p. ej. procesos del sistema), necesitarás proporcionar aux al comando ps, de esta forma: ps aux.

Ps aux

Fíjate que hay un total de 5 procesos de dos usuarios, “root” y “cmnatic”.

Otro comando muy útil es el comando top, el cual proporciona estadísticas en tiempo real sobre los procesos que se están ejecutando en tu sistema en lugar de una vista momentánea. Estas estadísticas refrescarán cada 10 segundos, pero también se pueden refrescar cuando uses las teclas de las flechas para navegar por las distintas filas.

Estadísticas procesos Linux

Gestionando Procesos

Puedes enviar señales que finalicen procesos; hay una amplia variedad de señales que se correlacionan con el grado de “limpieza” del proceso por parte del kernel. Para “matar” un comando, usarás el comando apropiadamente llamado kill y el PID asociado al proceso que quieres eliminar.

A continuación, hay algunas de las señales que podemos enviar a los procesos cuando los eliminemos:

  • SIGTERM: Elimina el proceso, pero permite hacer algunas tareas de limpieza antes.
  • SIGKILL: Elimina el proceso, no realiza ninguna limpieza después de ello.
  • SIGSTOP: Pausa/suspende un proceso.

¿Cómo arrancan los procesos?

Es momento de hablar de los espacios de nombres. El Sistema Operativo (OS) utiliza los espacios de nombres para dividir en última estancia los recursos disponibles en el ordenador (CPU, RAM y prioridad) en distintos procesos. Piensa en ello como partir tu ordenador como si se tratase de una tarta, en porciones. Los procesos dentro de cada porción tendrán acceso a cierto porcentaje de la potencia de cómputo. Sin embargo, será una pequeña porción de lo que está disponible para cada proceso en general.

Los espacios de nombres son geniales en cuanto a lo que a seguridad se refiere, ya que son una forma de aislar unos procesos de otros. Solo aquellos que se encuentran en el mismo espacio podrán ver los demás procesos.

Ya se ha hablado acerca de cómo funcionan los PID, y aquí es donde entran en juego. El proceso con el ID de 0 es un proceso que comienza cuando se arranca el sistema. Este proceso es el inicio de sistema de Ubuntu, conocido como systemd, el cual se usa para proporcionar una forma de gestionar los procesos de un usuario y se sitúa entre el sistema operativo y el usuario.

Por ejemplo, una vez que el sistema arranca y se inicia, systemd es uno de los primeros procesos en comenzar. Cualquier programa o pieza de software que quieras iniciar, lo hará como un proceso hijo de systemd. Esto significa que será controlado por systemd, pero correrá como un proceso propio (aunque comparta recursos de systemd) para hacer más sencilla su identificación por parte del usuario.

Linux systemd

Conseguir que los procesos/servicios se inicien en el arranque

Algunas aplicaciones pueden comenzar en el arranque del sistema operativo. Por ejemplo, los servidores web, servidores de bases de datos o servidores de transferencia de archivos. Este software a menudo es crítico y los administradores suelen preferir que se inicien en el arranque del sistema.

En este ejemplo, verás cómo decirle a un servidor web apache que se inicie manualmente y después cómo decirle que lance apache2 en el arranque.

Empecemos con el uso de systemctl. Este comando permite interactuar con el proceso systemd. Continuando con nuestro ejemplo, systemctl es un comando sencillo de usar que tiene el siguiente formato: systemctl [opción] [servicio]

Por ejemplo, para decirle a apache que comience, se usará systemctl start apache2. Parece simple, ¿verdad? Pues lo mismo si se quiere detener apache, sustituyendo la [opción] por stop.

Podemos elegir cuatro opciones distintas para systemctl:

  • Start (comenzar)
  • Stop (detener)
  • Enable (habilitar)
  • Disable (deshabilitar)

Una introducción al segundo y primer plano en Linux

Los procesos pueden correr en dos estados, en segundo plano y en primer plano. Por ejemplo, los comandos que ejecutas en la terminal como “echo” o similares se ejecutarán en primer plano de tu terminal, ya que es el único comando proporcionado que no ha sido llamado para ejecutar en segundo plano. “Echo” es un gran ejemplo ya que la salida de echo devolverá su resultado en primer plano, pero no lo hará en segundo plano.

Linux echo

Aquí se ha ejecutado echo “Hi THM”, donde se espera que la salida sea devuelta como al principio. Pero después de añadir el operador & al comando, en su lugar se devuelve el ID del proceso echo ya que la salida actual está corriendo en segundo plano.

Esto está muy bien para comandos como los de copiado de archivos ya que significa que se puede correr el comando en segundo plano y continuar con cualquier otro comando que se quiera ejecutar (sin tener que esperar primero a que el archivo termine de copiarse).

Se puede hacer exactamente lo mismo cuando se ejecutan, por ejemplo, scripts, aunque en lugar de confiar en el operador &, podemos usar Ctrl+Z en nuestro teclado para mandar un proceso a segundo plano. También es una forma efectiva de “pausar” la ejecución de un script o comando como en el siguiente ejemplo:

Pausar script en Linux

Este script seguirá repitiendo “This Will keep on looping until I stop it!” hasta que se detenga o suspenda el proceso usando Ctrl+Z (que en la terminal se indica como T^Z). Ahora tu terminal ya no se rellenará con mensajes, hasta que lo vuelvas a mandar a primer plano.

Enviando un proceso a primer plano

Ahora que tienes un proceso en segundo plano, por ejemplo, el script “background.sh” el cual se puede confirmar usando el comando ps aux, puedes ir hacia atrás y llevar ese proceso a primer plano para interactuar con él.

Proceso en segundo plano Linux

Con nuestro proceso en segundo plano, ya sea habiendo usado Ctrl+Z o el operador &, se puede usar fg para llevar de nuevo el foco a ese proceso como en la captura siguiente, donde se puede ver cómo el comando fg se utiliza para devolver el proceso que está en segundo plano a la terminal, donde la salida del script vuelve a aparecer.

Comando fg

Comando en primer plano Linux

Manteniendo tu sistema: Automatización

Como usuario puedes querer agendar cierta acción o tarea para que tenga lugar después del arranque del sistema. Toma, como ejemplo, la ejecución de algunos comandos, la copia de seguridad de algunos archivos o el lanzamiento de algunos de tus programas favoritos, como Spotify o Google Chrome.

Se hablará ahora del proceso cron, más específicamente de cómo interactuar con él mediante el uso de crontrabs. Crontab es uno de los procesos que se inician durante el arranque del sistema, el cual es responsable de facilitar y gestionar las tareas sincronizadas.

Crontabs en Linux Fundamentals

Un crontab es simplemente un archivo especial con un formato reconocido por el proceso cron para ejecutar cada línea paso a paso. Los crontab requieren 6 valores específicos:

ValorDescripción
MINEn qué minuto se ejecutará
HOURA qué hora se ejecutará
DOMQué día del mes se ejecutará
MONEn qué mes del año se ejecutará
DOWQué día de la semana se ejecutará
CMDEl comando actual a ejecutar

Aquí tienes el ejemplo de la copia de seguridad de archivos. Puedes querer guardar la carpeta “Documents” de “cmnatic” cada 12 horas. Para ello, deberías usar el formato:

0 *12 * * * cp -R /home/cmnatic/Documents /var/backups/

Una característica interesante de crontabs es que también soporta el comodín del asterisco (*). Si no quieres proporcionar un valor para un campo específico, por ejemplo, no te importa qué mes, día o año se ejecuta, solo que se ejecute cada 12 horas, simplemente escribes un asterisco.

Esto puede ser confuso al principio, por lo que existen algunos grandes recursos como es el “Crontab Generator” online que te permite usar una aplicación amigable para generar el formato por ti, así como el sitio “Cron Guru”.

Los crontabs se pueden editar usando crontab -e, donde puedes elegir un editor como Nano para editar tu crontab.

Cron Job Generado
Editando crontabs con Nano

Manteniendo tu sistema: Gestión de paquetes

Introduciendo los paquetes y los repositorios de software

Cuando como desarrollador quieres enviar software a la comunidad, lo haces enviándolo a un repositorio “apt”. Si se aprueba, tu programa o herramienta será liberado. Aquí aparecen dos de las características más redentoras de Linux: la accesibilidad del usuario y el mérito de las herramientas de código abierto.

Cuando se usa el comando ls en una máquina Linux Ubuntu 20.04, estos archivos sirven como puerta de entrada/registro.

Comando ls Linux
Repositorios apt Linux

Mientras que los proveedores de sistemas operativos mantendrán sus propios repositorios, puedes añadir los repositorios de la comunidad a tu lista. Esto te permite extender las capacidades de tu sistema operativo. Los repositorios adicionales se pueden agregar usando el comando add-apt-repository o listando a otro proveedor. Por ejemplo, algunos proveedores tienen un repositorio limitado a su ubicación geográfica.

Gestionando tus repositorios (añadiendo y eliminando)

Normalmente se usa el comando apt para instalar software en sistemas Ubuntu. El comando apt es parte del software de gestión de paquetes llamado apt. Apt contiene una completa suite de herramientas que permiten gestionar los paquetes y fuentes de tu software, e instalar o eliminar software al mismo tiempo.

Una forma de añadir repositorios es usar el comando add-apt-repository, como se dijo anteriormente, pero vas a ver cómo añadir y eliminar un repositorio manualmente. Mientras que puedes instalar software gracias al uso de instaladores de paquetes como dpkg, los beneficios de apt implican que siempre que actualices tu sistema, el repositorio que contiene las piezas de software que hayas añadido también buscará actualizaciones.

En este ejemplo vas a ver cómo añadir el editor de texto Sublime Text a tu máquina Ubuntu como repositorio, ya que no forma parte de los repositorios de Ubuntu por defecto. Cuando se añade software, la integridad de lo que descargues está garantizada mediante el uso de lo que se conoce como claves GPG (Gnu Privacy Guard). Estas claves son una comprobación segura de los desarrolladores en la que te dicen “aquí tienes tu software”. Si las claves no coinciden con lo que tu sistema confía y lo que usaron los desarrolladores, el software no se instalará.

Para empezar, necesitas añadir la clave GPG de los desarrolladores de Sublime Text 3 (nótese que las instancias de TryHackMe no tienen acceso a Internet, por lo que no esperamos que añadas esto a la máquina que despliegues, ya que fallará).

  1. Descarga la clave GPG y usa apt-key para marcarla como confiable.
    wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add -
  2. Ahora que tienes la clave en tu lista de confianza, puedes añadir el repositorio de Sublime Text 3 a tu lista de fuentes apt. Una buena práctica es tener archivos separados para cada comunidad/repositorio de terceros que añadas.
    2.1. Crea un archivo llamado sublime-text.list en /etc/apt/sources.list.d e introduce la información del repositorio.
    2.2. Ahora puedes usar Nano o cualquier otro editor de texto de tu elección para añadir y guardar el repositorio de Sublime Text 3 en el archivo recién creado.
    2.3. Después de añadir esta entrada, necesitas actualizar apt para reconocer esta nueva entrada, algo que harás mediante el comando apt update.
    2.4. Una vez actualizado con éxito, puedes proceder a instalar el software confiable y añadido a apt usando apt install sublime-text.
Sublime text Linux Fundamentals

Sublime Text en inicio Linux

Eliminar paquetes es tan fácil como hacer la operación inversa. Este proceso lo puedes realizar usando el comando add-apt-repository --remove ppa:PPA_Name/ppa o eliminando el archivo creado anteriormente de forma manual. Una vez eliminado, simplemente usa apt remove [nombre-del-software], por ejemplo, apt remove sublime-text.

Manteniendo tu sistema: Registros

Has visto brevemente el tema de los registros de archivos y dónde se pueden encontrar en Linux Fundamentals 1. Sin embargo, es hora de recapitular. Ubicados en el directorio /var/log, estos archivos y carpetas contienen información de registro de aplicaciones y servicios ejecutándose en su sistema. El sistema operativo (OS) se ha vuelto realmente bueno automatizando la gestión de estos registros en un proceso conocido como “rotating”.

Se han remarcado algunos registros de tres servicios ejecutándose en una máquina Ubuntu:

  • Un servidor web Apache2
  • Registros del servicio fail2ban, el cual se usa para monitorizar intentos de fuerza bruta, por ejemplo
  • El servicio UFW el cual se usa como cortafuegos
Registros Linux Fundamentals

Estos servicios y registros son una buena forma de monitorizar la salud de tu sistema y protegerlo. No solo eso, los registros de servicios como el servidor web pueden contener información acerca de cada petición, permitiendo a los desarrolladores o administradores diagnosticar problemas de diseño o investigar la actividad de un intruso. Por ejemplo, estos dos tipos de registro son de especial interés:

  • Registro de acceso
  • Registro de errores
Registros Apache Linux

Hay, por supuesto, registros que almacenan información acerca de cómo está corriendo el sistema operativo en sí mismo y sobre acciones realizadas por los usuarios, como los intentos de autenticación.

Conclusiones de Fundamentos de Linux 3 Parte 2

Y con esto has llegado al final del módulo de Linux Fundamentals. Tu familiaridad con Linux mejorará cuanto más interactúes con el sistema. Linux tiene el potencial de hacer cosas realmente alucinantes con relativa sencillez (como ya has descubierto a lo largo de este módulo).

Puedes continuar tu aprendizaje en otras salas de TryHackMe dedicadas a herramientas o utilidades de Linux como:

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Ads Blocker Image Powered by Code Help Pro

¡¡¡Ads Blocker Detectado!!!

Hemos detectado que usas extensiones para bloquear anuncios. Por favor, si te interesa el contenido, no bloquees los anuncios, que son lo que nos ayuda a poder publicar más contenido como este 😊