Guía Técnica de Conceptos y Administración en Linux

Esta guía técnica abarca fundamentos esenciales de Linux, arquitectura del sistema, administración de recursos, scripting en Shell y seguridad. Está estructurada para proporcionar conocimiento aplicable tanto para la administración de sistemas como para la preparación técnica.

Conceptos Fundamentales de Linux

Linux es un sistema opreativo de tipo Unix, de código abierto y basado en el kernel desarrollado por Linus Torvalds. Es multiusuario y multitarea, y se utiliza ampliamente en servidores, sistemas embebidos y computación de alto rendimiento. A diferencia de Unix comercial, Linux se distribuye libremente bajo licencias como la GPLv2.

El kernel es el componente central del sistema operativo. Administra los recursos de hardware como la CPU, la memoria y los dispositivos de E/S, y proporciona servicios a los programas de usuario a través de interfaces específicas denominadas llamadas al sistema.

Estructura de un Sistema de Archivos Linux

Todo en Linux se considera un archivo. El sistema de archivos sigue una jerarquía estándar con directorios clave:

  • /bin: Contiene binarios esenciales de comandos del sistema.
  • /etc: Alberga archivos de configuración del sistema y de las aplicaciones.
  • /home: Directorio raíz para los directorios personales de los usuarios.
  • /var: Contiene datos variables durante la ejecución, como logs y archivos temporales de correo.
  • /proc: Es un sistema de archivos virtual que representa información sobre procesos y la configuarción del kernel en tiempo real.
  • /dev: Contiene archivos de dispositivo que representan periféricos del sistema.

Los archivos en Linux se identifican mediante un número de nodo de índice (inode) único en el sistema de archivos. Este número almacena los metadatos del archivo (permisos, propietario, tamaño, marcas de tiempo), pero no el nombre. Los nombres de archivo son enlaces a un inode.

Administración del Sistema y Procesos

El proceso de arranque de un sistema Linux sigue una secuencia estándar: BIOS/UEFI → Bootloader (como GRUB) → Carga del kernel → Ejecución del proceso init (o systemd en sistemas modernos) → Llegada a un objetivo de ejecución (anteriormente runlevel) → Inicio de servicios y una interfaz de inicio de sesión.

La comunicación entre procesos (IPC) se puede lograr mediante varios mecanismos:

  • Tuberías (pipes) y tuberías con nombre (FIFO): Para comunicación simple entre procesos relacionados.
  • Señales: Notificaciones asíncronas enviadas a procesos (ej. SIGKILL, SIGTERM).
  • Memoria compartida: La forma más rápida de IPC, donde múltiples procesos accceden a una región de memoria común.
  • Sockets: Permiten la comunicación entre procesos, posiblemente a través de una red.

El espacio de intercambio (swap) es una porción de disco utilizada como extensión de la RAM física. Cuando la memoria RAM es insuficiente, las páginas de memoria menos usadas se transfieren al espacio de intercambio.

Scripting en Shell y Automatización

Bash (Bourne Again SHell) es el intérprete de comandos más común en los sistemas Linux. Los scripts de Shell son archivos de texto que contienen una secuencia de comandos para automatizar tareas.

Ejemplo de script para gestión de usuarios con validación de errores:

#!/bin/bash

# Script para crear un lote de usuarios en un grupo específico
GROUP_NAME="developers"
NUM_USERS=10

# Verificar si se tiene permisos de root
if [ "$(id -u)" -ne 0 ]; then
    echo "Este script debe ejecutarse como root" >&2
    exit 1
fi

# Crear el grupo si no existe
if ! getent group "$GROUP_NAME" >/dev/null; then
    groupadd "$GROUP_NAME"
    if [ $? -ne 0 ]; then
        echo "Error al crear el grupo $GROUP_NAME"
        exit 1
    fi
fi

# Crear usuarios
for ((i=1; i<=NUM_USERS; i++)); do
    USERNAME="dev_$(printf "%03d" "$i")"
    if id "$USERNAME" &>/dev/null; then
        echo "El usuario $USERNAME ya existe. Omitiendo."
        continue
    fi

    useradd -m -g "$GROUP_NAME" -s /bin/bash "$USERNAME"
    if [ $? -eq 0 ]; then
        echo "Usuario $USERNAME creado exitosamente."
        # Generar una contraseña aleatoria (para demostración)
        PASS=$(openssl rand -base64 12)
        echo "$USERNAME:$PASS" | chpasswd
        echo "  Contraseña temporal: $PASS"
    else
        echo "Error al crear el usuario $USERNAME"
    fi
done

Seguridad y Endurecimiento del Sistema

Una inicialización segura de un servidor Linux debe incluir:

  1. Deshabilitar el acceso directo root por SSH y forzar el uso de claves públicas/privadas.
  2. Cambiar el puerto SSH predeterminado (22) y configurar un firewall (iptables o firewalld).
  3. Instalar y configurar herramientas como Fail2Ban para bloquear intentos de fuerza bruta.
  4. Mantener el sistema actualizado y aplicar parches de seguridad regularmente.
  5. Revisar y minimizar los demonios (servicios) en ejecución. Usar systemctl list-unit-files --state=enabled para auditar.

Los ataques comunes incluyen el SQL Injection, donde un atacante inserta código SQL malicioso a través de la entrada del usuario. La prevención se logra mediante consultas parametrizadas y la validación estricta de toda la entrada del usuario en las aplicaciones web.

Comandos Esenciales de Administración

Gestión de Archivos y Directorios

# Encontrar todos los archivos de configuración modificados en los últimos 7 días
find /etc -type f -name "*.conf" -mtime -7

# Cambiar permisos de forma recursiva (grupo y otros solo lectura)
chmod -R go-w,go+rX /var/www/mi_sitio

# Buscar patrones en archivos de log usando expresiones regulares
grep -rn "error\|fail" /var/log/syslog

# Crear un archivo de log con la salida de un comando
ls -lha /tmp > /home/usuario/registro_directorios.log 2>&1

Monitoreo de Rendimiento

# Visualizar uso de CPU y memoria en tiempo real
top -o %CPU

# Mostrar estadísticas de disco
df -hT

# Observar el consumo de espacio por directorio en MB
du -sh /home/* | sort -hr

# Ver información de red y puertos en escucha
ss -tunlp

Gestión de Paquetes

En sistemas basados en Debian/Ubuntu, apt gestiona los paquetes. En sistemas basados en Red Hat/CentOS, se utiliza yum o dnf.

# Ejemplo con apt (Debian/Ubuntu):
apt update
apt upgrade
apt install paquete

# Ejemplo con dnf (Fedora/RHEL 8+):
dnf check-update
dnf install paquete
dnf remove paquete

Etiquetas: linux Kernel bash shell scripting Administration

Publicado el 6-23 20:53