Fundamentos del Arranque en Sistemas Unix/Linux y Seguridad con Secure Shell (SSH)

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 10,05 KB

Arranque del Sistema Operativo Unix

Proceso de Arranque (Boot)

El proceso de arranque (boot) de un sistema operativo Unix-like implica una serie de pasos cruciales para cargar el sistema en memoria y prepararlo para su uso.

  • Búsqueda de consola: Se establece la dirección de red RS-232 fija.
  • Test de hardware: Se realiza un testeo de la interconexión de red, la memoria RAM, y se muestran los periféricos instalados.
  • Carga del Kernel Unix: Se busca el kernel Unix y se carga en memoria, siguiendo estos pasos:
    1. Arranque del sistema de ficheros (FS) desde el cual se desea iniciar.
    2. Lectura del bloque de arranque (boot block).
    3. Carga del kernel asociado al FS.
    4. Transferencia del control a la dirección de memoria del Kernel.
    5. Montaje del sistema de ficheros (FS).
    6. Creación del proceso init.

Proceso Init

El proceso init (con PID 1) es el primer proceso que se ejecuta en un sistema Unix-like y es el padre de todos los demás procesos. Lee el fichero /etc/inittab para determinar el nivel de ejecución (runlevel) del sistema.

Estados (Runlevels) del proceso init:

  • 0: Desconexión de la máquina.
  • 1: Monousuario (tareas administrativas).
  • 2: Multiusuario.
  • 3: Multiusuario con acceso remoto (RFs).
  • 4: Desconexión/Arranque (generalmente no utilizado o definido por el usuario).
  • 6: Reinicio del sistema.
  • s / S: Usuario único para tareas de mantenimiento (s para consola local, S para consola remota).

Nota: Si se intenta terminar el proceso init (PID 1) con kill -9, el sistema puede volverse inestable o reiniciarse.

Estructura de Directorios Esenciales

Los sistemas Unix-like organizan sus ficheros y directorios de manera jerárquica. Algunos de los directorios más importantes son:

  • /opt: Subdirectorio para aplicaciones opcionales.
  • /usr: Contiene órdenes del sistema operativo y librerías.
  • /sbin: Órdenes esenciales para montar/arrancar sistemas de ficheros y administración del sistema.
  • /home: Directorios personales de los usuarios.
  • /etc: Ficheros de configuración del sistema.
  • /stand: Núcleo del SO y ficheros de arranque.
  • /dev: Ficheros especiales que representan dispositivos de hardware.
  • /tmp: Ficheros temporales.
  • /var: Información dinámica y variable (logs, spool de impresión, etc.).
  • /mnt: Punto de montaje para sistemas de ficheros temporales o externos (asumo que "mmt" era un error tipográfico por "mnt").

Procesos de Sesión: Getty y Login

La gestión de sesiones de usuario en un sistema Unix-like se realiza a través de una secuencia de procesos:

  • Proceso getty: El proceso init llama a getty. getty es responsable de abrir un terminal, establecer su configuración y mostrar el prompt de login.
  • Proceso login: Una vez que getty ha mostrado el prompt, el usuario introduce su nombre de usuario. getty entonces invoca al proceso login. El proceso login solicita la contraseña y comprueba que el usuario y la contraseña son válidos.

Intérprete de Comandos (Shell)

Tras una autenticación exitosa, el proceso login ejecuta el intérprete de comandos o shell del usuario. La shell es la interfaz principal para interactuar con el sistema operativo.

Ficheros de registro importantes:

  • /var/log/utmp: Registra los usuarios conectados al sistema actualmente.
  • /var/log/wtmp: Contiene el histórico de arranques y paradas de la máquina.
  • /var/log/btmp: Registra los intentos de acceso fallidos.

Gestión de Niveles de Ejecución (Runlevels) y Scripts RC

Los Run Levels (niveles de ejecución) definen el estado operativo de un sistema Unix-like, controlando qué servicios y procesos están activos. Los scripts RC (Run Command) se ejecutan durante el arranque del sistema o al cambiar el nivel de ejecución.

El script principal /etc/rc (o sus equivalentes en sistemas modernos como systemd) se encarga de inicializar el sistema. Por ejemplo, rc::wait podría referirse a una fase de espera o ejecución de scripts específicos.

Funcionalidades de los scripts RC:

  • Testear la integridad de los sistemas de ficheros.
  • Montar sistemas de ficheros (FS).
  • Designar áreas de swap y paginación.
  • Testear cuotas de disco.
  • Borrar ficheros temporales de /tmp.
  • Iniciar demonios de sistema para realizar tareas específicas.

Niveles de Ejecución (Runlevels) comunes:

  • 0: Apagado del sistema.
  • 1: Modo monousuario (mantenimiento).
  • 2: Modo multiusuario sin servicios de red (en algunos sistemas).
  • 3: Modo multiusuario con servicios de red (modo normal en muchos sistemas).
  • 4: No utilizado por defecto, disponible para configuración personalizada.
  • 5: Modo multiusuario con interfaz gráfica (X11) (en algunos sistemas).
  • 6: Reinicio del sistema.
  • s / S: Modo de usuario único para mantenimiento.

Secure Shell (SSH): Conexiones Seguras

Secure Shell (SSH) es un protocolo de red criptográfico que permite la comunicación segura entre dos ordenadores en una red insegura. Es un método seguro que reemplaza a protocolos antiguos como rlogin, RCP y Telnet, que transmiten información en texto plano.

Autenticación Criptográfica: SSH encripta todas las comunicaciones cliente-servidor, garantizando la confidencialidad e integridad de los datos.

Componentes y Protocolos:

  • Protocolo RFC 4250 (y posteriores): Define el funcionamiento de SSH.
  • sshd: El demonio del servidor SSH, que escucha las conexiones entrantes.
  • scp: Utilidad para copia segura de ficheros entre hosts.
  • ssh: Cliente SSH para establecer conexiones remotas.
  • ssh-keygen: Herramienta para generar pares de claves SSH (pública/privada).

Métodos de Autenticación en SSH

El demonio sshd soporta varios métodos para autenticar logins. La elección del método puede depender de si la autenticación de Rhost (host remoto) está habilitada o no.

Si la autenticación de Rhost está deshabilitada (RhostAuthentication = No), se pueden usar los métodos A y B:

  1. Método A: Autenticación Basada en Host (Legacy)

    El nombre del host remoto desde donde el usuario se está autenticando se verifica si se encuentra en ficheros como /etc/hosts.equiv o ~/.rhosts (o sus equivalentes SSH como /etc/ssh/shosts.equiv o ~/.ssh/shosts). Si la verificación es exitosa, el usuario se conecta. Este método es menos seguro y no se recomienda.

  2. Método B: Autenticación Basada en Clave Pública del Host

    sshd puede usar la clave pública del host remoto para verificar su identidad, consultando /etc/ssh/ssh_known_hosts o ~/.ssh/known_hosts. Si el host remoto puede probar que posee la clave privada asociada (generalmente desde /etc/ssh/ssh_host_key), se autentica.

Si la autenticación de Rhost está habilitada (RhostAuthentication = Yes), se pueden usar los métodos C y D (siendo el D más eficiente):

  1. Método C: Autenticación Basada en Clave Pública del Usuario

    sshd utiliza una clave criptográfica pública del usuario en tiempo de ejecución del proceso de login. El usuario debe tener acceso a una copia de su clave privada (generalmente en ~/.ssh/id_rsa o similar) y, si está protegida, deberá introducir una passphrase para desencriptarla.

  2. Método D: Autenticación Basada en Contraseña

    sshd permite al usuario introducir su contraseña. Esta contraseña es encriptada durante la transmisión, al igual que el resto de la sesión. Sin embargo, la seguridad de este método depende de la robustez de la contraseña y puede ser susceptible a ataques de fuerza bruta si no se implementan medidas adicionales (como bloqueo de intentos fallidos).

Consideraciones Adicionales de SSH:

  • SSH utiliza diversos métodos de autenticación (como RSA, DSA, ECDSA, Ed25519, Kerberos, etc.).
  • Opera por defecto en el puerto 22.
  • El cliente SSH guarda las claves públicas de los hosts conocidos en ~/.ssh/known_hosts para verificar su identidad en futuras conexiones.
  • Comprende tres protocolos principales:
    • SSH-TRANS (Transport Layer Protocol): Maneja la encriptación, integridad y compresión de datos.
    • SSH-USERAUTH (User Authentication Protocol): Gestiona la autenticación del usuario.
    • SSH-CONN (Connection Protocol): Multiplexa múltiples canales lógicos sobre una única conexión SSH encriptada.

Entradas relacionadas: