Enlace a la sala de laboratorio TryHackMe relacionada: https://tryhackme.com/room/linuxfundamentalspart2
Contenido relacionado: Continuemos nuestro viaje de aprendizaje en Linux, descubriendo cómo acceder a terminales de máquinas Linux mediante SSH y profundizando en comandos esenciales del sistema.
Introducción
Bienvenidos a la segunda parte de la serie "Fundamentos de Linux". En este artículo, exploraremos las habilidades básicas para iniciar sesión y controlar terminales de máquinas Linux remotas, además de aprender más comandos esenciales del sistema:
- Introducción a parámetros y banderas para optimizar el uso de comandos Linux;
- Fortalecimiento de nuestro conocimiento del sistema de archivos mediante comandos como copiar y mover archivos;
- Presentación del mecanismo de control de acceso y cómo verificar si el usuario actual tiene los permisos necesarios para garantizar la seguridad de archivos y directorios;
- Descripción de algunos directorios comunes en Linux.
Acceso a Máquinas Linux mediante SSH
El protocolo SSH (Secure Shell) es el método estándar para conectarse a máquinas Linux remotas. A través de SSH, podemos interactuar con la línea de comandos de una máquina Linux remota.
Desplegaremos dos máquinas:
- La máquina virtual Linux proporcionada por TryHackMe
- La máquina de ataque de TryHackMe o tu máquina virtual Kali local
¿Qué es SSH y cómo funciona? (Concepto básico)
Secure Shell o SSH es un protocolo que cifra los datos de comunicación entre dispositivos informáticos. Cuando se utiliza SSH, los datos transmitidos a través de la red son encriptados y, una vez que llegan al destino, se descifran.
Para este artículo, solo necesitamos un entendimiento básico de SSH:
- SSH permite ejecutar comandos en un dispositivo remoto desde nuestra máquina local.
- Cualquier dato intercambiado entre dispositivos usando SSH se cifra durante la transmisión por red.
Iniciando sesión en máquinas Linux mediante SSH
La sintaxis de SSH es sencilla. Solo necesitamos proporcionar:
- La dirección IP del equipo remoto;
- Credenciales válidas para iniciar sesión en el equipo remoto.
En este artículo, iniciaremos sesión en la máquina Linux remota con el usuario "tryhackme", cuya contraseña es "tryhackme".
Primero, debemos abrir una terminal en la máquina de ataque de TryHackMe (o nuestra máquina virtual Kali local). El comando SSH que ingresaremos será similar a ssh tryhackme@MAQUINA_IP, donde debemos reemplazar MAQUINA_IP con la dirección IP real de la máquina Linux de destino. Después de ingresar el comando SSH y presionar Enter, se nos preguntará si confiamos en el host (respondemos "yes") y luego se nos pedirá la contraseña del usuario "tryhackme" (ingresamos "tryhackme").
Ahora deberíamos haber establecido correctamente la conexión SSH con la máquina Linux remota. Cualquier comando que ingresemos a continuación se ejecutará en la máquina remota, no en nuestra propia máquina.
Nota: Cuando ingresas la contraseña en el prompt de SSH, no hay retroalimentación visible - no verás ningún texto o símbolo mientras escribes. Solo ingresa la contraseña y presiona Enter.
Práctica
Ingresa el comando:
ssh tryhackme@10.10.241.39
Parámetros y Banderas en Comandos Linux
La mayoría de los comandos en Linux permiten parámetros identificados por guiones y palabras clave conocidas como banderas o interruptores.
A continuación, discutiremos cómo identificar qué comandos aceptan parámetros y cómo entender sus funciones específicas.
Al usar comandos Linux, a menos que se especifique lo contrario, ejecutarán un comportamiento predeterminado. Por ejemplo, el comando ls lista el contenido del directorio de trabajo, pero no muestra archivos ocultos. A veces necesitamos usar parámetros para extender el comportamiento del comando.
Tomando ls como ejemplo, sin parámetros nos muestra solo un directorio llamado "folder1":
Al usar el parámetro -a (abreviatura de --all) con el comando ls, obtenemos una salida con más archivos y directorios, como .hiddenfolder en el ejemplo.
Consejo: Los nombres que comienzan con "." indican archivos o directorios ocultos, que no se pueden listar con un simple comando ls.
Los comandos que aceptan parámetros también pueden usar la opción --help, que lista información sobre los parámetros disponibles para ese comando (con descripciones y ejemplos):
De hecho, la opción --help es una salida formateada de la página man (manual page), que es la documentación sobre comandos y aplicaciones del sistema Linux.
La Página Man(ual)
La página man es una fuente importante de información sobre comandos del sistema y aplicaciones disponibles en una máquina Linux. Podemos acceder a las páginas man en Linux o en línea.
Para acceder a la documentación de la página man en Linux, usamos el comando man seguido del comando específico. Por ejemplo, para el comando ls, podemos usar man ls para ver su página man:
Ejercicio Práctico
Realiza operaciones en la máquina virtual Linux objetivo a través de la sesión SSH:
Más Comandos para Interactuar con el Sistema de Archivos
En la primera parte de "Fundamentos de Linux", introdujimos algunos comandos básicos para interactuar con el sistema de archivos de una máquina Linux.
En esta sección, aprenderemos más comandos para interactuar con el sistema de archivos, permitiéndonos:
- Crear archivos y directorios
- Mover archivos y directorios
- Eliminar archivos y directorios
Específicamente, estudiaremos los siguientes comandos:
- touch: crear archivos;
- mkdir: crear directorios (carpetas);
- cp: copiar archivos o directorios;
- mv: mover archivos o directorios;
- rm: eliminar archivos o directorios;
- file: determinar el tipo de archivo.
Consejo: Al igual que con el comando cat, podemos especificar una ruta de archivo completa para estos comandos, como directorio1/directorio2/nota.
Creación de Archivos y Directorios (touch, mkdir)
Crear archivos y directorios en Linux es un proceso sencillo. Primero, veremos cómo crear un archivo. El comando touch solo acepta un parámetro: el nombre que queremos darle al archivo. Por ejemplo, podemos usar touch nota para crear un archivo llamado "nota". Es importante notar que touch solo crea un archivo vacío; aún necesitarás usar comandos como echo o editores de texto como nano para agregar contenido al archivo.
La creación de directorios es similar a la creación de archivos. Solo necesitamos usar el comando mkdir y proporcionar el nombre que queremos dar al directorio. Por ejemplo, podemos usar mkdir midirectorio para crear un directorio llamado "midirectorio".
Eliminación de Archivos y Directorios (rm)
Podemos usar el comando rm para eliminar archivos fácilmente. Sin embargo, si queremos eliminar un directorio, necesitamos usar el parámetro -R.
Copia y Movimiento de Archivos y Directorios (cp, mv)
Copiar y mover archivos es una función importante en las máquinas Linux. El comando cp se puede usar con dos parámetros:
- El nombre del archivo existente;
- El nombre que queremos asignar al nuevo archivo al copiar.
El comando cp copiará todo el contenido del archivo existente al nuevo archivo. En el ejemplo, copiamos el archivo "nota" al archivo "nota2".
El comando mv para mover archivos también requiere dos parámetros, al igual que cp. Sin embargo, mv no crea una copia, sino que mueve o modifica el segundo archivo que proporcionamos como parámetro.
Podemos usar el comando mv para mover archivos a un nuevo directorio o para renombrar archivos y directorios. Por ejemplo, en el ejemplo, usamos mv para cambiar el nombre del archivo "nota2" a "nota3". Ahora el archivo "nota3" contendrá todo el contenido de "nota2" (el archivo "nota2" desaparecerá).
Determinación del Tipo de Archivo (file)
Un archivo suele tener una extensión, como ".txt" para archivos de texto, pero las extensiones no son obligatorias (un archivo de texto puede no tener .txt).
Podemos usar el comando file para determinar el tipo de un archivo. Por ejemplo, podemos usar file para verificar si "nota" es realmente un archivo de texto: file nota
Ejercicio Práctico
Realiza operaciones en la máquina virtual Linux objetivo a través de la sesión SSH:
Introducción a los Permisos de Acceso
En las máquinas Linux, algunos usuarios pueden no tener permiso para acceder a ciertos archivos o directorios. Ya hemos explorado algunos comandos para determinar los permisos asociados a archivos o directorios.
En la sección anterior, aprendimos cómo usar parámetros y banderas para extender el uso de comandos. Cuando usamos el comando ls con los parámetros -lh, podemos ver contenido como en el siguiente ejemplo:
Como se muestra en la imagen, el comando ls -lh lista los permisos de los archivos y directorios en el directorio actual.
Esta salida es importante para determinar ciertas características de archivos o directorios y si tenemos permiso para acceder a ellos. Un archivo o directorio puede tener varias características que determinan qué operaciones están permitidas y qué usuarios o grupos pueden realizar operaciones específicas:
- Lectura (Read):标志为 "r";
- Escritura (Write):标志为 "w";
- Ejecución (Execute):标志为 "x".
Supongamos que tenemos un archivo llamado "archivo.pem" con permisos "-rw-------". Analicemos esto:
- "-" indica que "archivo.pem" es un archivo;
- "rw-------" significa que solo el propietario del archivo puede leerlo y escribirlo, y que el propietario no tiene permiso para ejecutarlo.
Explicación de los indicadores de permisos:
Ejemplo: -rwxrwxrwx
Posiciones 0-9:
#Posición 0: Determina el tipo de archivo (-,l,d,c,b)
- es archivo
- l es enlace (link), similar a un acceso directo en Windows
- d es directorio, similar a una carpeta en Windows
- c es archivo de dispositivo de caracteres, como ratón o teclado
- b es dispositivo de bloques, como un disco duro
#Posiciones 1-3: Determinan los permisos del propietario del archivo —User
#Posiciones 4-6: Determinan los permisos del grupo del archivo —Group
#Posiciones 7-9: Determinan los permisos de otros usuarios —Other
rwx representan respectivamente lectura, escritura y ejecución (si no se tiene el permiso correspondiente, se usa "-" para indicar su ausencia)
#rwx aplicado a archivos vs directorios (los permisos funcionan diferente para archivos y directorios)
r: Si tienes permiso r en un archivo pero no en su directorio, ls mostrará un error de permisos, pero puedes leer el archivo con cat
w: Tener permiso w en un archivo significa que puedes modificarlo, pero no eliminarlo. Para eliminar un archivo, necesitas permiso w en el directorio que lo contiene
x: En archivos, x significa que se puede ejecutar. En directorios, x significa que se puede entrar. Si no tienes permiso x en un directorio, cd te mostrará un error de permisos
Modificación de permisos:
chmod (modificar permisos de archivo)
u=usuario, g=grupo, o=otros
#chmod u=rwx,g=r-x,o=--x nombre_archivo
#chmod g+w nombre_archivo
#chmod o-x nombre_archivo
r=4, w=2, x=1
#chmod 751 nombre_archivo
chown (modificar propietario)
chgrp (modificar grupo)
Breve diferencia entre usuarios y grupos
Ya exploramos esto brevemente en la primera parte de Fundamentos de Linux. La gran ventaja de Linux es que los permisos se pueden dividir en detalle. Técnicamente, mientras un usuario posee un archivo, se pueden establecer permisos para que otro grupo de usuarios tenga los mismos o diferentes permisos sobre el mismo archivo, sin afectar al propietario original.
Pongamos el concepto de división de permisos en el mundo real. Sabemos que el usuario del sistema que ejecuta un servidor web debe tener permisos válidos de lectura y escritura para los archivos de la aplicación web. Sin embargo, empresas que ofrecen servicios de hosting web deben permitir que sus clientes suban archivos para sus sitios sin convertirse en usuarios del sistema del servidor web, lo que podría comprometer la seguridad de todos los demás clientes.
A continuación, aprenderemos los comandos necesarios para cambiar entre usuarios.
Cambio de Usuario
Gracias al comando su, cambiar de usuario en Linux es muy sencillo. A menos que seas el usuario root ( o uses sudo con privilegios de root), necesitarás lo sigiuente para cambiar de usuario:
- El nombre del usuario al que queremos cambiar;
- La contraseña del usuario.
Al usar el comando su, podemos combinarlo con parámetros para extender su uso. Por ejemplo, podemos especificar un comando para ejecutar después del cambio de usuario o un shell específico para usar. Puedes obtener más información leyendo la página man de su (man su).
En términos simples, usando el parámetro -l (o --login) con su, podemos iniciar un shell más similar al de un inicio de sesión real, heredando más atributos del nuevo usuario como variables de entorno.
Podemos usar el comando simple su para cambiar al usuario2: su usuario2. La nueva sesión nos colocará en el directorio principal del usuario anterior.
También podemos usar su con el parámetro -l para cambiar al usuario2: su -l usuario2. En este caso, nuestra nueva sesión nos colocará automáticamente en el directorio principal del nuevo usuario.
Ejercicio Práctico
Realiza operaciones en la máquina virtual Linux objetivo a través de la sesión SSH:
Directorios Comunes en Linux
Directorio /etc
Este es uno de los directorios más importantes en un sistema Linux. El directorio "/etc" es una ubicación común donde se almacenan los archivos de configuración del sistema operativo.
Por ejemplo, el archivo etc/sudoers contiene la lista de usuarios y grupos que pueden ejecutar comandos sudo u otros comandos con privilegios de root. También se muestran los archivos etc/passwd y etc/shadow, que son especiales en Linux porque muestran cómo el sistema almacena las contraseñas de cada usuario en un formato de cifrado conocido como sha512.
Consejo: etc es la abreviatura de etcetera, que significa "y otras cosas; adiciones".
Directorio /var
A continuación, presentamos el directorio "/var", donde "var" es la abreviatura de "variable data". Este es uno de los directorios principales en el sistema Linux, que almacena datos frecuentemente accedidos o escritos por servicios y aplicaciones en ejecución. Por ejemplo, los archivos de generados por servicios y aplicaciones se escriben en este directorio (/var/log). Otros datos no necesariamente asociados a un usuario específico (como bases de datos) también se almacenan en el directorio "/var".
Directorio /root
A diferencia del directorio "/home", el directorio "/root" es en realidad el directorio principal del usuario del sistema "root". Además de entender que es el directorio principal del usuario "root", este directorio no tiene otros contenidos especiales. Por lógica, se asume que los datos del usuario se almacenan por defecto en "/home/root".
Directorio /tmp
Este directorio es único en Linux. "tmp" en "/tmp" es la abreviatura de "temporary" (temporal). Es volátil y se puede usar para almacenar datos que solo necesitan ser accedidos una o dos veces. "/tmp" se comporta de manera similar a la memoria del ordenador; una vez que el sistema se reinicia, el contenido del directorio "/tmp" se borrará automáticamente.
Es importante saber que, por defecto, cualquier usuario puede escribir en el directorio "/tmp", lo que significa que una vez que accedemos a una máquina, "/tmp" es una excelente opción para almacenar scripts y otros contenidos.
Ejercicio Práctico
Responde las siguientes preguntas basándote en el contenido de esta sección:
Resumen
Este artículo ha cubierto muchos fundamentos de Linux. Repasemos brevemente los puntos clave:
- Aprendimos a usar SSH para conectarnos de forma remota a máquinas Linux;
- Fortalecimos nuestro uso de comandos Linux mediante parámetros, banderas y la consulta de información de comandos (páginas man);
- Aprendimos comandos comunes para interactuar con el sistema de archivos y su contenido;
- Introdujimos brevemente los permisos de archivos y cómo cambiar el usuario actual;
- Presentamos los directorios comunes en Linux por defecto en Ubuntu y cómo usar los datos almacenados en ellos.