Bienvenidos a este capítulo de este Curso de Linux para Hackers – Arquitectura de Directorios. Comparte este articulo y síguenos para recibir más capítulos, guías y cursos gratis.

Esta guía es parte de un curso mucho más grande en donde te enseñamos a convertirte en hacker de 0 a 100. Desde los conocimientos más básicos hasta conseguir empleo.

En esta guía veremos desde cero un tema tan amplio como es Linux y lo haremos desde el punto de vista del hacking y la ciberseguridad.

Para saber más comente a continuación, respondemos todos y cada uno de los comentarios.

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

Directorios:

Aquí también tenemos que hacer un pequeño avance sobre la estructura de directorios de Linux porque si no puede que no se entienda lo que vamos a hablar sobre la variable $PATH.

En Unix la estructura de directorios es en forma de árbol similar a la de Windows . Dado que la estructura de directorios se organiza como las ramas de un árbol para localizar un punto cualquiera hay que utilizar cada uno de los directorios que conducen a ese punto desde el directorio raíz.

Nosotros lo llamaremos camino y en Linux se le suele llamar path. Se empieza en el directorio raíz representado por ‘/’ y se avanza por las ramas de ese árbol separando cada identificador por un nuevo carácter ‘/’. De esta forma ‘/usr/local/bin’ indica un lugar concreto en el árbol de directorios.

Aprovechando que estamos hablando de directorios mencionaremos que hay directorios con significado especial. Está el directorio raíz ‘/’ que ya hemos mencionado. Está el directorio ‘home’ que es el punto donde el sistema nos sitúa para trabajar cuando entramos en él.

Recordemos que en Linux normalmente no disponemos de todo el sistema para nosotros solos. Luego podemos cambiar de directorio de trabajo. El directorio de trabajo actual se representa como directorio ‘.’, El directorio anterior o directorio padre de este directorio se representa por ‘..’. Los comandos ‘cd’, ‘mkdir’ y ‘pwd’ sirven para cambiar de directorio actual, crear un directorio y averiguar en que directorio nos encontramos actualmente.

Comprender los Archivos y los Directorios

Los archivos se utilizan para almacenar datos tales como texto, gráficos y programas. Los directorios (También conocidos como «carpetas») se utilizan para proporcionar una estructura de organización jerárquica. Esta estructura es algo diferente a la que puedes estar acostumbrado si previamente trabajaste en los sistemas de Windows.

En un sistema Windows, el nivel superior de la estructura de directorios se llama Este Equipo. Cada dispositivo físico (disco duro, unidad de DVD, unidad USB, unidad de red, etc.) aparece en Este Equipo, cada uno asignado a una letra de unidad como C: o D:. Una representación visual de esta estructura:

Desde windows se ve asi:

La arquitectura de directorios en Linux: una guía detallada para hackers

La arquitectura de directorios de Linux es una de las características más distintivas y poderosas de los sistemas operativos basados en Unix.

Para los hackers, comprender esta arquitectura no solo es esencial para navegar y manipular el sistema de manera eficiente, sino también para realizar tareas avanzadas como la búsqueda de vulnerabilidades, la escalada de privilegios y la evasión de auditorías de seguridad. Este artículo ofrecerá una visión completa de la arquitectura de directorios de Linux y explicará por qué es fundamental para cualquier hacker.

¿Qué es la arquitectura de directorios en Linux?

La arquitectura de directorios en Linux es una estructura jerárquica, donde todos los archivos y directorios se organizan de manera ordenada bajo un único directorio raíz llamado /. Desde el directorio raíz, los diferentes directorios y subdirectorios se despliegan en una estructura en forma de árbol, con rutas absolutas y relativas que permiten acceder a los archivos.

A diferencia de otros sistemas operativos, en Linux todo es tratado como un archivo, incluidos dispositivos de hardware, lo que hace que esta estructura sea extremadamente flexible y poderosa.

La arquitectura de directorios sigue el estándar de jerarquía del sistema de archivos de Linux (FHS, por sus siglas en inglés), que define qué directorios deben existir y cuál es su propósito.

¿Qué es un sistema de archivos?

Un sistema de archivos son los métodos y estructuras de datos que un sistema operativo utiliza para seguir la pista de los archivos de un disco o partición; es decir, es la manera en la que se organizan los archivos. El sistema de archivos de Linux es una organización jerárquica que se asemeja a un árbol donde cada hoja es un directorio o un archivo.

Originariamente, en los inicios de Linux, este árbol de directorios no seguía un estándar cien por cien, es decir, podíamos encontrar diferencias en él de una distribución a otra. Posteriormente desarrollaron el proyecto FHS (Filesystem Hierarchy Standard), o lo que es lo mismo: Estándar de Jerarquía de Sistema de archivos) en 1993.

FHS no es más que un documento guía, es decir, cualquier fabricante de software independiente o cualquier persona que decida crear una nueva distribución GNU/Linux, podrá aplicarlo o no a la estructura del sistema de archivos, con la ventaja de que si lo integra en el sistema, el entorno de éste será mucho más compatible con la mayoría de las distribuciones.

Es importante saber que el estándar FHS es en cierto modo flexible, es decir, existe cierta libertad en el momento de aplicar las normas. De ahí que existan en la actualidad leves diferencias entre distribuciones GNU/Linux. Objetivos principales de FHS

  • Presentar un sistema de archivos coherente y estandarizado.
  • Facilidad para que el software prediga la localización de archivos y directorios instalados.
  • Facilidad para que los usuarios prediga la localización de archivos y directorios instalados.
  • Especificar los archivos y directorios mínimos requeridos.

El estándar FHS está enfocado a:

Fabricantes de software independiente y creadores de sistemas operativos, para que establezcan una estructura de archivos lo más compatible posible. Usuarios comunes, para que entiendan el significado y el contendido de cada uno de los elementos del sistema de archivos.

Tipos de archivos en el sistema Linux. 

  1.  Archivos generales : también llamados archivos ordinarios. Pueden ser imágenes, videos, programas o archivos de texto simples. Estos tipos de archivos pueden estar en formato ASCII o binario. Es el archivo más utilizado en el sistema Linux.
  2. Archivos de directorio : estos tipos de archivos son un almacén para otros tipos de archivos. Puede ser un archivo de directorio dentro de un directorio (subdirectorio).
  3. Archivos de dispositivos: en un sistema operativo similar a Windows, los dispositivos como CD-ROM y discos duros se representan con letras de unidad como F: G: H, mientras que en el sistema Linux los dispositivos se representan como archivos. Por ejemplo, /dev/sda1, /dev/sda2, etc.

Sabemos que en un sistema operativo tipo Windows, los archivos se almacenan en diferentes carpetas en diferentes unidades de datos como C: D: E: mientras que en el sistema operativo Linux/Unix los archivos se almacenan en una estructura similar a un árbol que comienza con el directorio raíz como se muestra en el siguiente diagrama. 

Directorios principales en Linux

A continuación, se detallan algunos de los directorios más importantes que existen en cualquier sistema Linux estándar:

  1. / (Raíz): El directorio raíz. Desde aquí comienza toda la estructura del sistema de archivos. Todos los demás directorios y archivos derivan de aquí.
  2. /bin: Este directorio contiene binarios ejecutables esenciales para el sistema, como los comandos básicos (ls, cp, mv, rm, etc.). Estos comandos son accesibles para todos los usuarios.
  3. /sbin: Similar a /bin, pero contiene binarios del sistema que son utilizados principalmente por el administrador (root), como herramientas para la gestión del sistema.
  4. /etc: Almacena archivos de configuración del sistema. Cualquier cambio en la configuración global del sistema se realiza aquí. Algunos archivos importantes son /etc/passwd (gestión de usuarios), /etc/hosts (gestión de hostnames) y /etc/shadow (almacena contraseñas encriptadas).
  5. /dev: Aquí se encuentran archivos especiales que representan dispositivos de hardware del sistema, como discos duros, terminales y otros periféricos. En Linux, los dispositivos se gestionan como archivos.
  6. /lib: Contiene las bibliotecas compartidas necesarias para los binarios de /bin y /sbin.
  7. /home: Cada usuario del sistema tiene un subdirectorio en /home donde se almacenan sus archivos y configuraciones personales. Por ejemplo, el usuario “juan” tendrá su directorio en /home/juan.
  8. /root: Es el directorio home del superusuario o administrador del sistema, comúnmente conocido como “root”. No debe confundirse con el directorio raíz /.
  9. /var: Contiene archivos de datos variables, como registros (logs), colas de correo y archivos temporales. Por ejemplo, /var/log almacena archivos de log que son útiles para auditorías y análisis.
  10. /tmp: Directorio temporal. Aquí se almacenan archivos que solo necesitan existir por un corto período de tiempo. Suele ser limpiado periódicamente.
  11. /usr: Este es uno de los directorios más grandes y contiene archivos de usuario, programas instalados, bibliotecas adicionales, y más. Algunas subcarpetas clave son:
    • /usr/bin: Contiene binarios ejecutables de programas instalados por los usuarios.
    • /usr/sbin: Binarios del sistema no esenciales para el funcionamiento básico.
    • /usr/lib: Bibliotecas compartidas adicionales.
  12. /opt: Contiene aplicaciones de terceros instaladas en el sistema. Las aplicaciones instaladas manualmente o paquetes opcionales a menudo se encuentran aquí.
  13. /media y /mnt: Se utilizan para montar dispositivos de almacenamiento extraíbles como discos duros externos, unidades USB y CD-ROMs.
  14. /proc y /sys: Estos directorios contienen información sobre el estado actual del sistema y permiten la interacción con el kernel y otros procesos. En /proc, por ejemplo, se puede acceder a información de los procesos en ejecución, mientras que en /sys se puede manipular la configuración de hardware.
  15. /var: Contiene archivos de datos variables, como registros (logs), colas de correo y archivos temporales. Por ejemplo, /var/log almacena archivos de log que son útiles para auditorías y análisis. Se guarda informacion variable: logs, BBDD (postgres, mysql)
    • /log/ : todos los logs de sistema y servidores
    • /lib/pgsql/ : postgres
    • /lib/mysql/ : mysql
    • /spool/mqueue/ : cola de correo del servidor (entregas sendmail)
    • /spool/mail/ : buzones de correo

NOTA: Hay directorios que pueden cambiar según la distribución que sea. Las de Linux se parecen bastante, pero en general tienen lo mismo.

Igual que Windows, la estructura de directorios de Linux tiene un nivel superior, sin embargo no se llama Este Equipo, sino directorio raíz y su símbolo es el carácter / . También, en Linux no hay unidades; cada dispositivo físico es accesible bajo un directorio, no una letra de unidad. Una representación visual de una estructura de directorios típica de Linux:

La mayoría de los usuarios de Linux denominan esta estructura de directorios el sistema de archivos. Para ver el sistema de archivos raíz, introduce ls / y Observa que hay muchos directorios descriptivos incluyendo /boot, que contiene los archivos para arrancar la computadora.

Visión panorámica:

En su momento trataremos los temas abordados en este capítulo de forma completa. En este momento dado que partimos de cero se hace necesario al menos esbozar una serie de conceptos que son tan elementales que difícilmente se puede explicar algo sin hacer referencia a ellos.

Estos conceptos están interrelacionados de tal forma que tampoco se puede abordar ninguno de ellos en detalle en este momento. Por ello nuestro primer objetivo es ofrecer una visión panorámica del SO. Por borrosa que resulte siempre será mejor esto que empezar directamente abordando en detalle los temas.

Usaremos muchas veces de forma indistinta Unix y Linux. No son cosas equivalentes pero en este curso consideraremos ambas cosas como equivalentes salvo que concretemos detalles específicos de Linux. Para nosotros Linux es un SO tipo Unix y precisamente nos centraremos en los aspectos más generales de estos sistemas operativos. Entre sus características más destacables está la de ser un SO multitarea y multiusuario. Un sistema multitarea es aquel que puede ejecutar varios procesos simultáneamente.

Para ello se puede usar uno o más procesadores físicos. En el caso de un solo procesador lo que ocurre es que el tiempo del procesador se va repartiendo para atender los distintos procesos creando la ilusión de que todo ocurre simultáneamente. Un sistema multiusuario es aquel que está pensado para ser utilizado por varios usuarios simultáneamente.

En la práctica un sistema multiusuario requiere capacidad multitarea. En el caso concreto de Linux es además un SO multiplataforma ya que puede funcionar en diferentes arquitecturas. Los conceptos que mencionemos en este curso procuraremos ilustrarlos con ejemplos.

Comandos

Un comando es generalmente un fichero ejecutable localizado en alguna parte de nuestro sistema. Existe una variable llamada $PATH que contiene una lista de caminos de busqueda para los comandos todos ellos separados por ‘:’. Compruebe el valor de su variable $PATH.

El Directorio Path

Usando el gráfico en la sección anterior como un punto de referencia, verás que hay un directorio llamado sound bajo el directorio llamado etc, que se encuentra bajo el directorio /. Una manera más fácil de decir esto es refiriéndose a la ruta.

En las distribuciones modernas de Linux, el directorio /etc por lo general contiene los archivos de configuración estática como lo define por el Estándar de Jerarquía de Archivos (o «FHS», del inglés «Files Hierarchy Standard»).

Una ruta de acceso te permite especificar la ubicación exacta de un directorio. Para el directorio sound la ruta de acceso sería /etc/sound. El primer carácter / representa el directorio root (o «raíz» en español), mientras que cada siguiente carácter / se utiliza para separar los nombres de directorio.

Este tipo de ruta se llama la ruta absoluta (o «aboslute path» en inglés). Con una ruta absoluta, siempre proporcionas direcciones a un directorio (o un archivo) a partir de la parte superior de la estructura de directorios, el directorio root. Más adelante en este curso cubriremos un tipo diferente de la ruta llamada la ruta relativa (o «relative path» en inglés). La siguiente gráfica muestra tres rutas absolutas adicionales:

Si un comando no está localizado en ninguno de esos caminos deberá ser referenciado indicando el camino completo ya que de otra forma no podrá ser referenciado. Si quiere saber dónde se encuentra un ejecutable use el comando which. Este comando buscará en los caminos contenidos en la variable $PATH hasta que encuentre el comando y entonces mostrará el camino completo que conduce al comando. Puede ocurrir que un comando se encuentre duplicado y que los dos sitios donde se encuentre figuren en el $PATH.

En ese caso se ejecutará el comando que se encuentre en el primer camino referenciado en el $PATH. Igualmente el comando which solo mostrará el primer camino referenciado en el $PATH. Estamos usando un comando llamado echo para mostrar valores. Vamos a localizarlo.

Echo está situado en uno de los caminos contenidos en $PATH. En resumidas cuentas $PATH es una variable que usa el intérprete de comandos para localizar los comandos. En otra lección siguiente hablaremos de ‘man’.

Es un comando que sirve para consultar el manual en linea de Linux. Pues bien existe una variable llamada $MANPATH que contiene la lista de los caminos donde el comando ‘man’ debe buscar las páginas del manual.

La variable $MANPATH será usada por el comando ‘man’ y quizás algún otro. La variable $PATH será usada por la shell y quizás por algún otro comando como por ejemplo ‘which’ del cual acabamos de hablar.

Somos conscientes de que no estamos explicando gran cosa ahora, pero son conceptos muy elementales que vamos a utilizar antes de explicar en profundidad todo el sistema de ficheros de Linux.

Más adelante también hablaremos más detenidamente sobre las variables de entorno. Estamos dando unos pequeños esbozos sobre algunas cuestiones porque hay mucha interrelación de unos conceptos con otros y resulta imposible abordar nada en profundidad al principio.

El comando which

El comando which de Linux se utiliza para localizar los archivos ejecutables o la ubicación de un programa en el sistema de archivos. Muestra la ruta donde se almacena el archivo o comando especificado.

Si tiene curiosidad por saber dónde se almacena el programa especificado, which le ayudará a identificar la ruta; es bastante sencillo de usar.

Sintaxis:

  which <nombre_del_programa>  

El comando anterior mostrará la ruta del nombre de archivo o comando especificado.

Opciones

El comando which ofrece una única opción, la opción ‘-a’. Se utiliza para mostrar todas las rutas del comando especificado. En algunos casos, nuestra máquina contiene dos rutas diferentes para el mismo programa. Por ejemplo, puede ser “/usr/bin/program” o “/usr/local/bin/program”. La opción ‘-a’ mostrará ambas rutas para el comando especificado.

Sintaxis:

 which -a <nombre_del_programa>  

Exploremos varios usos de este comando para comprenderlo mejor:

¿Cómo utilizar qué comando?

Para mostrar la ruta de cualquier archivo ejecutable, como programas y comandos, simplemente ejecute el comando which seguido del nombre del programa.

Por ejemplo, para mostrar la ruta de los archivos ejecutables del node, ejecute el comando de la siguiente manera:

 which node

Se mostrará la ruta de los archivos ejecutables del node. De manera similar, para los archivos ejecutables de Java, ejecute el comando de la siguiente manera:

Which java

Mostrará la ruta de los archivos ejecutables de Java.

Este comando solo muestra la ruta de los archivos ejecutables, por lo que ejecuta comandos solo con los argumentos disponibles en la máquina. Si pasamos algún argumento ilegal (que nuestra máquina no contiene), no arrojará ningún resultado.

Which con múltiples argumentos

Podemos mostrar varias rutas de archivos ejecutables proporcionando varios argumentos a la vez en un solo comando. Para pasar los múltiples argumentos en un comando, sepárelos con un espacio. Ejecute el comando de la siguiente manera:

 witch <comando1> <comando2> <comando3> …  

Por ejemplo, para mostrar la ruta del comando node, cat… ejecute el comando de la siguiente manera:

Estado de salida de which

El usuario de Linux tiene un estado de salida o es ejecutado por el script de shell. Si el estado de salida es 0, significa que el comando se ejecutó correctamente sin ningún error. Si el estado de salida es un número distinto de cero (es decir, de 1 a 255), significa que el comando tuvo un error y fue un fracaso.

El comando which tiene los siguientes tres estados de salida:

0: Si el estado de salida es 0, significa que se encontraron todos los argumentos y son ejecutables.

1: Si el estado de salida es 1, significa que uno o más argumentos no existen o no son ejecutables.

2: Si el estado de salida es 2, significa que se especificó una opción no válida.

Obtener ayuda

Para obtener ayuda puedes usar el comando help

 ls –help

Las páginas man:

 man ls

También podemos ejecutar el comando info para mostrar el manual:

 info ls

El comando anterior mostrará el mismo resultado que el comando man.

Generalmente los comandos tienen más opciones que puedes explorar

 tac –help

Sin embargo puede pasar que, a veces, no obtengas ayuda: 

Por esto también te recomendamos consultar las páginas man:

Si tiene problemas durante el uso del comando which, puede obtener ayuda desde su terminal consultando el manual del comando which. Para mostrar el manual, ejecute el comando man de la siguiente manera:

 man which

El comando anterior mostrará el manual. Observe el siguiente resultado:

Para salir presiona q

Pon en práctica lo aprendido

Ahora pon a prueba lo aprendido con estas preguntas y ejercicios. Ya vimos una guía rápida de cómo se usan estos comandos en la cual podrás basarte para resolverlos. Son ejercicios muy simples, pero no te preocupes si aún no puedes resolverlos. En los siguientes capítulos abordaremos en más detalle todos estos comandos en donde aprenderás a usarlos en profundidad.

Preguntas sobe la estructura de directorios de Linux:

  1. ¿Qué es el directorio raíz en Linux y cómo se representa?
  2. ¿Cuál es la diferencia principal en la representación de dispositivos de almacenamiento entre Linux y Windows?
  3. ¿Qué es la variable $PATH y por qué es importante en Linux?
  4. ¿Qué función tienen los directorios /bin y /sbin en el sistema de archivos de Linux?
  5. ¿Qué tipo de archivos se encuentran en el directorio /dev y cómo se gestionan en Linux?
  6. ¿Cuál es la función del directorio /home en un sistema Linux?
  7. ¿Qué es el FHS (Filesystem Hierarchy Standard) y cuál es su propósito en Linux?
  8. ¿Qué es un archivo de dispositivo en Linux y cómo se diferencia de un archivo regular?
  9. ¿Para qué se utiliza el directorio /var en Linux?
  10. ¿Qué es un sistema multitarea y multiusuario en el contexto de Linux?
  11. ¿Qué es un comando en Linux y dónde se localizan normalmente?
  12. ¿Qué es la variable $PATH y cuál es su función en el sistema?
  13. ¿Cómo se puede consultar el valor actual de la variable $PATH?
  14. ¿Qué comando se utiliza para localizar la ruta de un ejecutable y cómo funciona?
  15. ¿Cuál es la diferencia entre una ruta absoluta y una ruta relativa en Linux?
  16. ¿Qué hace el comando which -a y en qué caso sería útil?
  17. ¿Cómo se pueden buscar múltiples ejecutables a la vez utilizando which?
  18. ¿Qué significa el estado de salida 0, 1 y 2 en el comando which?
  19. ¿Para qué sirven las páginas de manual (man) en Linux y cómo se acceden?
  20. ¿Qué tipo de archivos se encuentran en /etc/passwd y /etc/shadow y por qué son importantes para la seguridad del sistema?

Ejercicios sobre la estructura de directorios de Linux:

  1. Explora el directorio raíz en tu sistema Linux y anota cinco subdirectorios importantes que encuentres. Explica brevemente la función de cada uno.
  2. Usa el comando cd para navegar a un subdirectorio dentro de /usr y luego utiliza pwd para confirmar tu ubicación actual.
  3. Crea un directorio nuevo en tu carpeta de usuario utilizando el comando mkdir. Luego verifica que fue creado con ls.
  4. Visualiza los archivos dentro del directorio /bin y elige tres comandos que encuentres allí. Descríbelos brevemente.
  5. Accede al directorio /dev y explora tres archivos de dispositivos. ¿Qué dispositivos representan?
  6. Investiga el archivo /etc/passwd y describe el tipo de información que contiene.
  7. Describe cómo interactúa el directorio /tmp con los procesos temporales del sistema. ¿Qué sucede con los archivos almacenados allí?
  8. Investiga cómo Linux gestiona los logs en el directorio /var/log y menciona al menos dos tipos de archivos de log que puedas encontrar allí.
  9. Consulta el valor de la variable $PATH en tu sistema y describe lo que significa.
  10. Usa el comando which para localizar la ruta de tres comandos comunes en Linux, como ls, echo y cat.
  11. Utiliza el comando which -a para mostrar todas las rutas del comando python (si está instalado en tu sistema).
  12. Utiliza el comando man para leer el manual del comando ls y menciona dos opciones interesantes que no conocías.

Respuestas a las preguntas sobre directorios:

  1. ¿Qué es el directorio raíz en Linux y cómo se representa? El directorio raíz es el punto de partida de toda la estructura de directorios en un sistema Linux. Se representa por el símbolo / y desde él se derivan todos los demás directorios y archivos del sistema.
  2. ¿Cuál es la diferencia principal en la representación de dispositivos de almacenamiento entre Linux y Windows? En Windows, los dispositivos de almacenamiento se asignan a letras de unidad como C:, D:, etc. En Linux, los dispositivos se montan como archivos en directorios, y no tienen una letra de unidad asignada. Por ejemplo, un disco duro podría estar representado como /dev/sda1.
  3. ¿Qué es la variable $PATH y por qué es importante en Linux? La variable $PATH es una lista de directorios donde el sistema busca ejecutables cuando se introduce un comando en la terminal. Es importante porque permite ejecutar programas sin tener que escribir su ruta completa.
  4. ¿Qué función tienen los directorios /bin y /sbin en el sistema de archivos de Linux? El directorio /bin contiene comandos esenciales accesibles a todos los usuarios, como ls, cp y rm. El directorio /sbin contiene comandos del sistema que normalmente son utilizados solo por el administrador (root), como herramientas para gestionar el sistema.
  5. ¿Qué tipo de archivos se encuentran en el directorio /dev y cómo se gestionan en Linux? En /dev se encuentran archivos especiales que representan dispositivos de hardware, como discos duros, terminales y periféricos. Estos archivos permiten que los dispositivos se gestionen como si fueran archivos regulares, lo que facilita la interacción con el hardware.
  6. ¿Cuál es la función del directorio /home en un sistema Linux? El directorio /home es donde se almacenan los archivos y configuraciones personales de cada usuario del sistema. Cada usuario tiene su propio subdirectorio en /home, por ejemplo /home/juan para el usuario “juan”.
  7. ¿Qué es el FHS (Filesystem Hierarchy Standard) y cuál es su propósito en Linux? El FHS es un estándar que define la estructura y organización del sistema de archivos en Linux. Su propósito es asegurar una coherencia en cómo se organizan los archivos y directorios, facilitando la compatibilidad entre diferentes distribuciones de Linux y simplificando la administración del sistema.
  8. ¿Qué es un archivo de dispositivo en Linux y cómo se diferencia de un archivo regular? Un archivo de dispositivo en Linux representa un hardware físico, como un disco duro o un terminal, y permite interactuar con ese dispositivo. Se diferencia de un archivo regular en que su propósito no es almacenar datos, sino facilitar la comunicación entre el sistema operativo y el hardware.
  9. ¿Para qué se utiliza el directorio /var en Linux? El directorio /var almacena datos que cambian frecuentemente, como logs del sistema, colas de correo y archivos temporales. Es un lugar clave para información dinámica generada por el sistema y aplicaciones.
  10. ¿Qué es un sistema multitarea y multiusuario en el contexto de Linux? Un sistema multitarea es aquel que puede ejecutar varios procesos al mismo tiempo. Un sistema multiusuario permite que varios usuarios trabajen simultáneamente en el mismo sistema. Linux es un sistema operativo multitarea y multiusuario, lo que le permite gestionar múltiples procesos y usuarios de manera eficiente.
  11. ¿Qué es un comando en Linux y dónde se localizan normalmente?
    Un comando en Linux es un archivo ejecutable que realiza una acción en el sistema. Normalmente, estos comandos se localizan en directorios como /bin, /usr/bin, /usr/local/bin, entre otros.
  12. ¿Qué es la variable $PATH y cuál es su función en el sistema?
    La variable $PATH es una lista de directorios en los que la shell busca comandos ejecutables. Permite que se ejecuten comandos sin necesidad de especificar su ruta completa.
  13. ¿Cómo se puede consultar el valor actual de la variable $PATH?
    Se puede consultar el valor de $PATH utilizando el comando echo $PATH.
  14. ¿Qué comando se utiliza para localizar la ruta de un ejecutable y cómo funciona?
    El comando which se utiliza para localizar la ruta de un ejecutable. Busca en los directorios especificados en la variable $PATH y muestra la ruta completa del comando.
  15. ¿Cuál es la diferencia entre una ruta absoluta y una ruta relativa en Linux?
    Una ruta absoluta comienza desde el directorio raíz (/) y especifica la ubicación completa de un archivo o directorio, mientras que una ruta relativa comienza desde el directorio actual.
  16. ¿Qué hace el comando which -a y en qué caso sería útil?
    El comando which -a muestra todas las rutas donde se encuentra un ejecutable si está presente en múltiples ubicaciones. Es útil cuando un comando tiene duplicados en diferentes directorios.
  17. ¿Cómo se pueden buscar múltiples ejecutables a la vez utilizando which?
    Se pueden buscar múltiples ejecutables proporcionando varios argumentos separados por espacios. Ejemplo: which ls echo cat.
  18. ¿Qué significa el estado de salida 0, 1 y 2 en el comando which?
    • 0: El comando se ejecutó correctamente y se encontraron todos los argumentos.
    • 1: Uno o más argumentos no existen o no son ejecutables.
    • 2: Se especificó una opción no válida.
  19. ¿Para qué sirven las páginas de manual (man) en Linux y cómo se acceden?
    Las páginas de manual proporcionan documentación detallada sobre los comandos de Linux. Se accede con el comando man <comando>, por ejemplo, man ls.
  20. ¿Qué tipo de archivos se encuentran en /etc/passwd y /etc/shadow y por qué son importantes para la seguridad del sistema?
    El archivo /etc/passwd contiene información sobre los usuarios del sistema, mientras que /etc/shadow almacena las contraseñas encriptadas. Ambos archivos son cruciales para la autenticación y seguridad del sistema.

Respuestas a los ejercicios:

  • Explora el directorio raíz en tu sistema Linux y anota cinco subdirectorios importantes que encuentres.
    • /bin: Contiene binarios esenciales del sistema.
    • /sbin: Contiene binarios para la administración del sistema.
    • /etc: Almacena archivos de configuración.
    • /home: Directorios personales de los usuarios.
    • /var: Almacena archivos que cambian con frecuencia, como logs.
  • Usa el comando cd para navegar a un subdirectorio dentro de /usr y luego utiliza pwd para confirmar tu ubicación actual. Ejemplo:
    • cd /usr/bin
    • pwd
  • Crea un directorio nuevo en tu carpeta de usuario utilizando el comando mkdir. Luego verifica que fue creado con ls.
    • mkdir /home/usuario/mi_nuevo_directorio
    • ls /home/usuario
  • Visualiza los archivos dentro del directorio /bin y elige tres comandos que encuentres allí.
    • ls: Lista los archivos en un directorio.
    • cp: Copia archivos o directorios.
    • mv: Mueve o renombra archivos o directorios.
  • Accede al directorio /dev y explora tres archivos de dispositivos.
    • /dev/sda: Representa un disco duro.
    • /dev/tty: Representa una terminal.
    • /dev/null: Dispositivo que descarta todo el input.
  • Investiga el archivo /etc/passwd y describe el tipo de información que contiene. El archivo /etc/passwd contiene una lista de los usuarios del sistema, con información como su nombre de usuario, UID, GID y el directorio de inicio.
  • Describe cómo interactúa el directorio /tmp con los procesos temporales del sistema. El directorio /tmp almacena archivos temporales que los procesos crean y que normalmente se eliminan automáticamente después de reiniciar o pasado un tiempo.
  • Investiga cómo Linux gestiona los logs en el directorio /var/log y menciona dos tipos de archivos de log.
  • /var/log/syslog: Registra mensajes del sistema.
  • /var/log/auth.log: Contiene información sobre autenticaciones y accesos.

  • Consulta el valor de la variable $PATH en tu sistema y describe lo que significa.
    • echo $PATH

La salida muestra los directorios donde la shell busca comandos ejecutables. Ejemplo: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin.

  • Usa el comando which para localizar la ruta de tres comandos comunes en Linux.
    • which ls
    • which echo
    • which cat

Las rutas resultantes podrían ser /bin/ls, /bin/echo y /bin/cat.

  • Utiliza el comando which -a para mostrar todas las rutas del comando python.
    • which -a python

Esto puede devolver varias rutas como /usr/bin/python y /usr/local/bin/python.

  • Utiliza man para leer el manual del comando ls. Algunas opciones interesantes:
    • -l: Muestra detalles de los archivos.
    • -a: Muestra archivos ocultos.




La importancia de la arquitectura de directorios para los hackers

Escalada de privilegios

Uno de los objetivos más comunes para un hacker es lograr la escalada de privilegios, es decir, elevar sus permisos en el sistema para obtener control administrativo. Entender cómo se estructuran los archivos y directorios en Linux es fundamental para este proceso.

  • /etc/passwd y /etc/shadow: Estos archivos contienen información sobre los usuarios y contraseñas en el sistema. En versiones antiguas de Unix, las contraseñas se almacenaban directamente en /etc/passwd, lo que permitía a los atacantes obtenerlas fácilmente. Hoy en día, están encriptadas y almacenadas en /etc/shadow, que solo es accesible para root.
  • /bin, /sbin y /usr/sbin: Los atacantes pueden intentar encontrar binarios SUID (Set User ID) que permitan la ejecución con privilegios elevados. Estos binarios pueden ser aprovechados para realizar acciones como root.
  • /proc y /sys: Estos directorios contienen datos sobre el sistema y los procesos en ejecución. Los atacantes pueden utilizarlos para recopilar información útil sobre la configuración del sistema y las vulnerabilidades potenciales.

Persistencia

Un hacker que haya comprometido un sistema intentará mantener el acceso durante el mayor tiempo posible sin ser detectado. Para ello, conocer la arquitectura de directorios de Linux es esencial.

  • /var: Los archivos de log son fundamentales para que los administradores detecten actividades sospechosas. Un atacante puede modificar o eliminar logs en /var/log para ocultar su rastro.
  • /etc/rc.local y /etc/init.d/: Estos archivos se utilizan para ejecutar scripts y programas automáticamente al iniciar el sistema. Un atacante puede modificar estos archivos para garantizar que su malware se ejecute cada vez que el sistema se reinicie.

Evasión de detección

Para evitar ser detectado, un atacante puede emplear diversas técnicas relacionadas con la manipulación de archivos y directorios en Linux.

  • Ocultamiento de archivos: Los atacantes pueden crear archivos ocultos (precedidos por un punto) en directorios comunes, como /tmp o /home/usuario, para evitar ser encontrados fácilmente.
  • Modificación de binarios del sistema: Utilizando técnicas como “rootkits”, los atacantes pueden reemplazar binarios críticos del sistema en /bin, /sbin o /usr/sbin para que no reporten correctamente la actividad del atacante. Por ejemplo, un ps modificado puede ocultar procesos maliciosos.

Ejemplos prácticos para hackers

Acceder a contraseñas encriptadas: Un atacante que consiga acceso al archivo /etc/shadow puede intentar descifrar las contraseñas utilizando herramientas como John the Ripper o hashcat. Esto permite obtener acceso a cuentas de usuario o incluso privilegios de root si se consigue descifrar la contraseña administrativa.

Uso de binarios SUID: Imagina que un hacker encuentra un archivo binario con el bit SUID activado, por ejemplo, /usr/bin/passwd, que permite a los usuarios cambiar su contraseña. Si este binario tiene una vulnerabilidad, un atacante podría explotarla para ejecutar comandos con privilegios de root.

Manipulación de logs: Supongamos que un atacante desea ocultar su presencia. Después de haber realizado un ataque, puede dirigirse a /var/log/auth.log y modificar o eliminar las entradas que registran su actividad utilizando herramientas como nano o vim.

Conclusión

La arquitectura de directorios en Linux es extremadamente poderosa y flexible. Cada directorio tiene un propósito específico y, una vez que entiendes la estructura, puedes navegar y administrar el sistema de manera mucho más eficiente. Ya seas un usuario novato o un administrador experimentado, tener un conocimiento sólido de cómo se organiza el sistema de archivos de Linux es crucial para cualquier tarea, desde simples operaciones de archivos hasta la configuración avanzada del sistema.

Con este entendimiento, puedes aprovechar al máximo la potencia y flexibilidad de Linux, y ser capaz de mantener tu sistema ordenado, eficiente y seguro.

La arquitectura de directorios de Linux es una de las primeras cosas que cualquier hacker debe comprender a fondo si desea ser efectivo en sus actividades. No solo proporciona una manera lógica y estructurada de organizar el sistema, sino que también ofrece múltiples oportunidades para que un atacante pueda comprometer, mantener acceso y evadir detección en un sistema objetivo.

Para los hackers éticos, entender esta estructura es igualmente crucial, ya que les permite identificar y corregir vulnerabilidades antes de que los atacantes maliciosos puedan explotarlas.

No te detengas, sigue avanzando

Aquí tienes un propósito que debes considerar seriamente: si has querido mejorar tus habilidades en hacking, Ciberseguridad y programación ahora es definitivamente el momento de dar el siguiente paso. ¡Desarrolla tus habilidades aprovechando nuestros cursos a un precio increíble y avanza en tu carrera! El mundo necesita más hackers…

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

Sobre los autores

Álvaro Chirou

Yo soy Álvaro Chirou, tengo más de 20 Años de experiencia trabajando en Tecnología, eh dado disertaciones en eventos internacionales como OWASP, tengo más de 1.800.000 estudiantes en Udemy y 100 formaciones profesionales impartidas en la misma. Puedes seguirme en mis redes:

Laprovittera Carlos

Soy Laprovittera Carlos. Con más de 20 años de experiencia en IT brindo Educación y Consultoría en Seguridad de la Información para profesionales, bancos y empresas. Puedes saber más de mi y de mis servicios en mi sitio web: laprovittera.com y seguirme en mis redes:

Hacker de 0 a 100 desde las bases hasta conseguir empleo

¿Quieres iniciarte en hacking y ciberseguridad pero no sabes por dónde empezar? Inicia leyendo nuestra guia gratuita: https://achirou.com/hacker-de-0-a-100-desde-las-bases-hasta-conseguir-empleo/ que te lleva de 0 a 100. Desde los fundamentos más básicos, pasando por cursos, recursos y certificaciones hasta cómo obtener tu primer empleo.

Hemos creado una ruta de 0 a 100. Un plan de desarrollo que va desde las bases: cómo aprender hacking, qué aprender, en qué orden; pasando por las areas técnicas necesarias como Linux, Redes, Programación y los conocimientos necesarios en ciber seguridad, hacking, pentesting hasta la práctica y el inicio laboral: Crear tu propio laboratorio, certificaciones, adquirir experiencia e iniciarse laboralmente.

Este es un mega post. Una guía con más de 250 artículos que te llevaran por el camino del hacker. Esta guía es gratuita y esta creada gracias al esfuerzo y al trabajo combinado de Alvaro Chirou y mío (Laprovittera Carlos).

Creamos esta guía (futuro curso) para que puedas iniciarte en este mundo. Puedes arrancar ahora, GRATIS, solo necesitas un PC, conexión a internet y paciencia (Ser hacker NO ES un camino de la noche a la mañana).

El Hacking y la ciberseguridad es una carrera divertida, emocionante y gratificante que te recompensará y desafiará por igual. Sin embargo, para quienes buscan adentrarse en este campo en auge y en constante evolución, puede resultar difícil saber por dónde empezar. ¡Ahí es donde entra en juego nuestra guía en ciberseguridad!

Esta es la hoja de ruta hacia el trabajo de ciberseguridad de tus sueños. Te ayudará a entender qué conocimientos, habilidades y certificados son necesarios para alcanzar tus metas profesionales y tener una carrera próspera. Si quieres ser consultor de ciberseguridad, analista de malware, evaluador de penetración, analista de SOC o cualquier otro puesto de ciberseguridad, esta guía es lo que necesitas.

SIGUE APRENDIENDO GRATIS CON NUESTRAS GUIAS

Aprende con nuestros más de 100 cursos que tenemos disponibles para vos

Compartimos estos recursos para ayudar a la comunidad de hacking y ciberseguridad. COMPARTE y Siéntete libre de agregar más sugerencias en los comentarios a continuación, respondemos todos y cada uno de los comentarios.

Saludos amigos y happy hacking!!!