Table of Contents
ToggleEditores de texto de terminal
Nano
¡Es fácil comenzar con Nano! Para crear o editar un archivo usando nano, simplemente usamos nano filename
— reemplazando “nombre de archivo” con el nombre del archivo que desea editar.
Puede navegar por cada línea usando las teclas de flecha “arriba” y “abajo” o comenzar una nueva línea usando la tecla “Enter” en su teclado. Nano cubre las cosas más generales de un editor de texto, que incluyen:
- Buscar
- Copiar y pegar
- Saltar a un número de línea
- Averiguar en qué número de línea estás
Puede usar estas funciones de nano presionando la tecla ” Ctrl ” (que se representa como ^
en Linux) y la letra correspondiente. Por ejemplo podes usar ” Ctrl ” y ” X ” para salir de Nano.
VIM es un editor de texto mucho más avanzado. Algunos de los beneficios de VIM, aunque lleva mucho más tiempo familiarizarse con ellos, incluyen:
- Personalizable: puede modificar los atajos de teclado para que sean de su elección
- Resaltado de sintaxis: esto es útil si está escribiendo o manteniendo código, lo que lo convierte en una opción popular para los desarrolladores de software.
- VIM funciona en todos los terminales donde no se puede instalar nano
- Hay una gran cantidad de recursos, como hojas de trucos y tutoriales
Utilidades
Descargando archivos
Una característica fundamental de la informática es la capacidad de transferir archivos. Por ejemplo, es posible que desee descargar un programa, un libro o incluso una imagen. Hay varias formas en las que podemos recuperar estos archivos.
Vamos a cubrir el uso de wget
. Este comando nos permite descargar archivos de la web a través de HTTP, como si estuviera accediendo al archivo en su navegador. Necesitamos proporcionar la dirección del recurso que deseamos descargar. Por ejemplo, si quisiera descargar un archivo llamado “myfile.txt” en mi máquina, suponiendo que supiera la dirección web, se vería así:
wget https://assets.tryhackme.com/additional/linux-fundamentals/part3/myfile.txt
Transferencia de archivos desde su host – SCP (SSH)
La copia segura, o SCP, es un medio para copiar archivos de forma segura. A diferencia del comando cp regular, este comando le permite transferir archivos entre dos computadoras utilizando el protocolo SSH para proporcionar autenticación y encriptación.
Trabajando en un modelo de ORIGEN y DESTINO, SCP le permite:
- Copie archivos y directorios desde su sistema actual a un sistema remoto
- Copie archivos y directorios desde un sistema remoto a su sistema actual
Siempre que conozcamos los nombres de usuario y las contraseñas. Por ejemplo, copiemos un archivo de ejemplo de nuestra máquina a una máquina remota, que he presentado cuidadosamente en la siguiente tabla:
Variable | Valor |
La dirección IP del sistema remoto | 192.168.1.30 |
Usuario en el sistema remoto | ubuntu |
Nombre del archivo en el sistema local | importante.txt |
Nombre con el que deseamos almacenar el archivo en el sistema remoto | transferido.txt |
scp important.txt ubuntu@192.168.1.30:/home/ubuntu/transferred.txt
Y ahora invirtamos esto y diseñemos la sintaxis para usar scp
para copiar un archivo desde una computadora remota en la que no hemos iniciado sesión
Variable | Valor |
Dirección IP del sistema remoto | 192.168.1.30 |
Usuario en el sistema remoto | ubuntu |
Nombre del archivo en el sistema remoto | documentos.txt |
Nombre con el que deseamos almacenar el archivo en nuestro sistema | notas.txt |
El comando ahora se verá así:scp ubuntu@192.168.1.30:/home/ubuntu/documents.txt notes.txt
Sirviendo archivos desde su host – WEB
Las máquinas Ubuntu vienen preempaquetadas con python3. Python proporciona un módulo liviano y fácil de usar llamado “HTTPServer”. Este módulo convierte su computadora en un servidor web rápido y fácil que puede usar para servir sus propios archivos, donde luego pueden ser descargados por otra computadora usando comandos como curl
y wget
.
El “HTTPServer” de Python3 servirá los archivos en el directorio en el que ejecuta el comando, pero esto se puede cambiar proporcionando opciones que se pueden encontrar en las páginas del manual. ¡Simplemente, todo lo que tenemos que hacer es ejecutar python3 -m http.server
para iniciar el módulo! En la captura de pantalla a continuación, estamos sirviendo desde un directorio llamado “servidor web”, que tiene un solo archivo llamado “file”.
Ahora, usemos wget
para descargar el archivo usando la dirección IP de la computadora y el nombre del archivo. Una falla de este módulo es que no tiene forma de indexar, por lo que debe saber el nombre exacto y la ubicación del archivo que desea usar. Es por eso que prefiero usar Updog. ¿Qué es Updog ? Un servidor web más avanzado pero ligero. Pero por ahora, limitémonos a usar el “Servidor HTTP” de Python.
En la captura de pantalla anterior, podemos ver que wget
ha descargado con éxito el archivo llamado “file” a nuestra máquina. SimpleHTTPServer registra esta solicitud como lo haría cualquier servidor web, lo cual he capturado en la siguiente captura de pantalla.
Procesos
Los procesos son los programas que se ejecutan en su máquina. Son administrados por el kernel, donde cada proceso tendrá una ID asociada, también conocida como su PID. Los incrementos de PID van en el orden en el que se inicia el proceso. Es decir, el proceso número 60 tendrá un PID de 60.
Visualización de procesos
Podemos usar el comando ps
para proporcionar una lista de los procesos en ejecución como la sesión de nuestro usuario y alguna información adicional, como su código de estado, la sesión que lo ejecuta, cuánto tiempo de uso de la CPU está usando y el nombre del programa o comando real que se está ejecutando:
Tenga en cuenta cómo en la captura de pantalla anterior, el segundo proceso ps tiene un PID de 204, y luego en el comando debajo de él, esto se incrementa a 205.
Para ver los procesos ejecutados por otros usuarios y aquellos que no se ejecutan desde una sesión (es decir, procesos del sistema), debemos proporcionar aux de la siguiente manera:ps aux
Tenga en cuenta que podemos ver un total de 5 procesos; observe cómo ahora tenemos “raíz” y “cmnatic”
Top le brinda estadísticas en tiempo real sobre los procesos que se ejecutan en su sistema en lugar de una vista única. Estas estadísticas se actualizarán cada 10 segundos, pero también se actualizarán cuando use las teclas de flecha para navegar por las distintas filas.
Gestión de procesos
Para matar un proceso podemos usar el kill
comando con el nombre apropiado y el PID asociado que deseamos matar. es decir, para eliminar el PID 1337, usaríamos kill 1337
.
Algunas de las señales que podemos enviar a un proceso cuando se elimina:
- SIGTERM: elimina el proceso, y permite que realice algunas tareas de limpieza de antemano
- SIGKILL – Mata el proceso – no hace ninguna limpieza
- SIGSTOP – Detener/suspender un proceso
¿Cómo se inician los procesos?
El sistema operativo (SO) usa espacios de nombres para finalmente dividir los recursos disponibles en la computadora en procesos (como CPU, RAM y prioridad). Piense en ello como dividir su computadora en rebanadas, similar a un pastel. Los procesos dentro de ese segmento tendrán acceso a una cierta cantidad de poder de cómputo, sin embargo, será una pequeña porción de lo que realmente está disponible para cada proceso en general.
Los espacios de nombres son excelentes para la seguridad, ya que es una forma de aislar procesos de otros: solo aquellos que están en el mismo espacio de nombres podrán verse entre sí.
El proceso con una ID de 0 es un proceso que se inicia cuando se inicia el sistema como systemd , que se utiliza para proporcionar una forma de administrar los procesos de un usuario.
Una vez que un sistema arranca y se inicializa, systemd es uno de los primeros procesos que se inician. Cualquier programa o pieza de software que queramos iniciar comenzará como un proceso secundario de systemd . Esto significa que está controlado por systemd , pero se ejecutará como un proceso propio (aunque compartiendo los recursos de systemd) para que nos sea más fácil identificarlo
Hacer que los procesos/servicios se inicien en el arranque
Algunas aplicaciones se pueden iniciar en el arranque del sistema que poseemos. Por ejemplo, servidores web, servidores de bases de datos o servidores de transferencia de archivos. Este software suele ser crítico y, a menudo, los administradores le indican que se inicie durante el arranque del sistema.
Le vamos a decir al servidor web apache que inicie apache manualmente y luego le indicaremos al sistema que inicie apache2 en el arranque.
ystemctl
— este comando nos permite interactuar con el proceso/demonio systemd . Continuando con nuestro ejemplo, systemctl es un comando fácil de usar que toma el siguiente formato:systemctl [option] [service]
Para decirle a apache que se inicie, usaremos systemctl start apache2
. Lo mismo si quisiéramos detener apache, simplemente reemplazaríamos [option]
con stop. Podemos hacer cuatro opciones con systemctl
:
- Start
- Stop
- Enable
- Disable
Una introducción al segundo plano y al primer plano en Linux
Los procesos pueden ejecutarse en dos estados: en segundo plano y en primer plano. Los comandos que ejecuta en su terminal, como “echo” o cosas por el estilo, se ejecutarán en primer plano de su terminal, ya que es el único comando proporcionado que no se le ha indicado que se ejecute en segundo plano. “Echo” es un gran ejemplo, ya que la salida de echo volverá a usted en primer plano.
Aquí estamos ejecutando echo "Hi THM"
, donde esperamos que se nos devuelva la salida como estaba al principio. Pero después de agregar el &
operador al comando, solo se nos da la ID del proceso de eco en lugar de la salida real, ya que se ejecuta en segundo plano.
Esto es excelente para comandos como copiar porque significa que podemos ejecutar el comando en segundo plano y continuar con cualquier otro comando que deseemos ejecutar (sin tener que esperar a que termine la copia del archivo)
Podemos hacer exactamente lo mismo cuando ejecutamos cosas como secuencias de comandos: en lugar de depender del operador &, podemos usar Ctrl + Nuestro
teclado para respaldar un proceso. También es una forma efectiva de “pausar” la ejecución de un script o comando como en el siguiente ejemplo:
Este script seguirá repitiendo “¡Esto seguirá en bucle hasta que me detenga!” hasta que detenga o suspenda el proceso. Mediante el uso de Ctrl + Z
(como lo indica T^Z). Ahora nuestro terminal ya no está lleno de mensajes, hasta que lo ponemos en primer plano.
Poner en primer plano un proceso
Ahora que tenemos un proceso ejecutándose en segundo plano, por ejemplo, nuestra secuencia de comandos “background.sh”, que se puede confirmar con el ps aux
comando, podemos retroceder y llevar este proceso al primer plano para interactuar con él.
Con nuestro proceso en segundo plano usando cualquiera Ctrl + Z
o el operador&
, podemos usar fg
para volver a usar el proceso en la terminal, donde la salida del script es ahora volvió a nosotros.
Mantenimiento de su sistema: automatización
Es posible que los usuarios deseen programar una determinada acción o tarea para que se lleve a cabo después de que se haya iniciado el sistema como ejecutar comandos, hacer copias de seguridad de archivos o iniciar sus programas favoritos, como Spotify o Google Chrome.
Vamos a hablar sobre el procesocron
, y cómo podemos interactuar con él mediante el uso de crontabs
. Crontab es uno de los procesos que se inicia durante el arranque, que se encarga de facilitar y administrar los trabajos cron.
Un crontab es simplemente un archivo especial con formato que es reconocido por el procesocron
para ejecutar cada línea paso a paso. Los crontabs requieren 6 valores específicos:
Valor | Descripción |
MIN | En que minuto ejecutar |
HOUR | A que hora ejecutar |
DOM | En qué día |
MON | En qué mes |
DOW | Qué día de la semana |
CMD | El comando que se ejecutará. |
Usemos el ejemplo de hacer una copia de seguridad. Es posible que desee hacer una copia de seguridad de los “Documents” de “cmnatic” cada 12 horas. Usaríamos el siguiente formato:
0 *12 * * * cp -R /home/cmnatic/Documents /var/backups/
Una característica interesante de los crontabs es que también admiten el comodín o el asterisco (*
). Si no deseamos proporcionar un valor para ese campo específico, es decir, no nos importa en qué mes, día o año se ejecuta, solo que se ejecuta cada 12 horas, simplemente colocamos un asterisco.
Existen algunos recursos excelentes, como el ” Generador Crontab ” en línea, que le permite usar una aplicación amigable para generar su formato por usted. ¡Además del sitio ” Cron Guru “!
Los crontabs se pueden editar usando crontab -e
, donde puede seleccionar un editor (como Nano) para editar su crontab.
Mantenimiento de su sistema: administración de paquetes
Presentación de paquetes y repositorios de software
Cuando los desarrolladores deseen enviar software a la comunidad, lo enviarán a un repositorio “apt”. Si se aprueba, sus programas y herramientas se liberarán. Si bien los proveedores de sistemas operativos mantendrán sus propios repositorios, ¡también puede agregar repositorios comunitarios a su lista! Esto le permite ampliar las capacidades de su sistema operativo. ¡Se pueden agregar repositorios adicionales usando el add-apt-repository
comando o enumerando otro proveedor! Por ejemplo, algunos proveedores tendrán un repositorio más cercano a su ubicación geográfica.
Administrar sus repositorios (agregar y eliminar)
El comando apt
es parte del software de administración de paquetes. Apt contiene un conjunto completo de herramientas que nos permite administrar los paquetes y las fuentes de nuestro software, instalar o eliminar.
Un método para agregar repositorios es usar el comando add-apt-repository
pero vamos a ver cómo agregar y eliminar un repositorio manualmente. Si bien puede instalar software mediante el uso de instaladores de paquetes como dpkg
, los beneficios de apt significan que cada vez que actualizamos nuestro sistema, el repositorio que contiene las piezas de software que agregamos también se verifica en busca de actualizaciones.
En este ejemplo, vamos a agregar el editor de texto Sublime Text como repositorio. A la hora de añadir software, la integridad de lo que descargamos está garantizada mediante el uso de las llamadas claves GPG (Gnu Privacy Guard). Estas claves son esencialmente una verificación de seguridad de los desarrolladores que dicen: “aquí está nuestro software”. Si las claves no coinciden con las que confía su sistema y con las que usaron los desarrolladores, el software no se descargará.
Entonces, para comenzar, debemos agregar la clave GPG para los desarrolladores de Sublime Text 3. (Tenga en cuenta que las instancias de TryHackMe no tienen acceso a Internet, por lo que no esperamos que agregue esto a la máquina que implementa, ya que fallaría.)
1. Descarguemos la clave GPG y usemos apt-key para confiar en ella: wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add -
2. Ahora que hemos agregado esta clave a nuestra lista de confianza, ahora podemos agregar el repositorio de Sublime Text 3 a nuestra lista de fuentes aptas. Una buena práctica es tener un archivo separado para cada comunidad diferente/repositorio de terceros que agreguemos.
2.1. Vamos a crear un archivo llamado sublime-text.list en /etc/apt/sources.list.d e ingrese la información del repositorio así:
2.2. Y ahora use Nano para agregar y guardar el repositorio de Sublime Text 3 en este archivo recién creado:
2.3. Después de haber agregado esta entrada, debemos actualizar apt para reconocerla; esto se hace con apt update
2.4. Una vez actualizado con éxito, ya podemos proceder a instalar el software que hemos confiado y añadido a apt usando apt install sublime-text
Quitar paquetes es tan fácil como dar marcha atrás. Este proceso se realiza usando add-apt-repository --remove ppa:PPA_Name/ppa
o eliminando manualmente el archivo que agregamos previamente. Una vez eliminado, solo podemos usar apt remove [software-name-here]
ieapt remove sublime-text
Mantenimiento de su sistema: registros
Ubicados en el directorio /var/log, estos archivos y carpetas contienen información de registro para aplicaciones y servicios que se ejecutan en su sistema. El sistema operativo (SO) se ha vuelto bastante bueno en la gestión automática de estos registros en un proceso que se conoce como “rotación”. He resaltado algunos registros de tres servicios que se ejecutan en una máquina con Ubuntu:
- Un servidor web Apache2
- Registros para el servicio fail2ban, que se usa para monitorear intentos de fuerza bruta, por ejemplo
- El servicio UFW que se utiliza como cortafuegos
Estos servicios y registros son una excelente manera de monitorear la salud de su sistema y protegerlo. Los registros de servicios como un servidor web contienen información sobre cada solicitud individual, lo que permite a los desarrolladores o administradores diagnosticar problemas de rendimiento o investigar la actividad de un intruso. Dos tipos de archivos de registro a continuación que son de interés:
- registro de acceso
- registro de errores
Hay registros que almacenan información sobre cómo se ejecuta el sistema operativo y las acciones que realizan los usuarios, como los intentos de autenticación.
Task 3 Terminal Text Editors
Edit “task3” located in “tryhackme”‘s home directory using Nano. What is the flag?
Esta pregunta requiere que haya iniciado sesión en la máquina implementada (desde la Tarea 2) usando SSH desde la terminal AttackBox. Una vez que lo haya hecho, puede usar el mismo comando que usamos en la última pregunta (es decir, ‘nano <nombre de archivo>’) para abrir el archivo usando nano y obtener la bandera.
Task 4 General/Useful Utilities
Download the file http://MACHINE_IP:8000/.flag.txt onto the TryHackMe AttackBox
What are the contents?
Mientras está conectado a la máquina remota, use el siguiente comando para implementar un servidor web:
python3 -m http.server
El servidor requiere que mantengamos abierta la ventana de terminal actual. Abra una nueva ventana de terminal y use el comando ‘wget’ para descargar el archivo. Tenga en cuenta que es un archivo oculto, que se indica con el punto ‘.’ delante del nombre ‘.flag.txt’. No olvides el punto:
wget http://<IP>:8000/.flag.txt
Sustituya la dirección IP de la máquina implementada, reemplazando ‘<IP>’. El ‘:8000’ después de la dirección IP indica el puerto TCP al que intentamos conectarnos. Esto se corresponde con nuestro servidor, que utiliza el puerto 8000:
Podemos ver que hemos solicitado.flag.txt mediante una solicitud http GET. Volvamos a nuestra terminal AttackBox. Para ver nuestro archivo descargado en el directorio de inicio, use el comando ‘ls -a’ para mostrar todos los archivos y directorios, incluidos los que están ocultos. Para esta tarea, opté por el comando ‘cat’ más simple:
Task 5 Processes 101
If we were to launch a process where the previous ID was “300”, what would the ID of this new process be?
Para completar esta tarea, debemos iniciar sesión en la máquina implementada desde la Tarea 3 mediante SSH. Mientras está conectado, use el comando ‘ps aux’ para ver todos los procesos. Uno de los procesos tiene un nombre que tiene la forma de un indicador TryHackMe, es decir, THM{<FLAG>} Podria haber buscado en la lista pero esta manera es mejor:
ps -aux | grep THM
What command would we use to stop the service “myservice”?
Esta pregunta se refiere a un servicio, por lo que deberíamos pensar en el comando ‘systemctl’. El comando ‘systemctl’ se puede usar para realizar una acción en un servicio usando la sintaxis: systemctl <acción> <servicio>
Task 6 Maintaining Your System: Automation
When will the crontab on the deployed instance (MACHINE_IP) run?
Task 8 Maintaining Your System: Logs
What is the IP address of the user who visited the site?
Al igual que con las otras preguntas en esta Sala, debemos iniciar sesión en la máquina implementada (Tarea 2) usando SSH. Navegue a la carpeta /var/log y use el comando ls:
Debería ver un directorio llamado apache2. Navegue a este directorio para encontrar los registros del servidor apache2.
Comience enumerando el contenido del directorio /var/log/apache2:
En el directorio, vemos una serie de archivos que incluyen registros de acceso y errores. Para esta pregunta, se nos pide que identifiquemos al usuario que visitó el sitio, por lo que buscaremos en access.log.1.
Utilice cat para leer el contenido del archivo. En el interior, encontrará una única entrada que se puede utilizar para responder a la pregunta.
Felicidades has finalizado. Nos vemos en #7 Introductory Networking. Happy Hacking!