Restricciones de la Unidad de Servicio Systemd: Una Causa Común de Fallos en el Inicio de Daemons

2025-09-20

Un problema clásico para los administradores de sistemas Linux es que un daemon falle al iniciarse normalmente, pero funcione correctamente cuando se ejecuta manualmente como root. Las causas tradicionales incluyen variables de entorno $PATH incompletas, SELinux y AppArmor. Cada vez más, las restricciones de la unidad de servicio systemd (documentadas en systemd.exec) son las culpables. Las directivas como ProtectHome y PrivateTmp pueden causar errores crípticos de "permiso denegado" o "archivo no encontrado", o incluso fallos indirectos como el bloqueo de consultas DNS. Eliminar las restricciones del archivo .service del daemon puede ayudar a diagnosticar el problema, pero los daemons futuros pueden depender de estas restricciones, complicando la resolución de problemas.

Leer más
Desarrollo

La Web Olvidada del Lado del Cliente: ¿Por Qué a Nadie le Importan los Tiempos de Carga Lentos?

2025-08-23

Este artículo trata el tema a menudo pasado por alto de las malas experiencias web del lado del cliente. Si bien los problemas del lado del servidor suelen dominar las discusiones, el autor señala la constante negligencia de los tiempos de carga lentos, las interfaces de usuario torpes y otras frustraciones del lado del cliente. Usando la reciente actualización de Github como ejemplo, muchos usuarios reportan un rendimiento lento, pero los operadores de sitios web priorizan las preocupaciones del lado del servidor. El autor argumenta que los sitios web tienen un poder significativo, dejando a los usuarios con boicots como su único recurso, que son en gran medida ineficaces. Los sitios web a menudo carecen de una medición efectiva de la rotación de usuarios, contribuyendo a su apatía hacia las experiencias del lado del cliente. Finalmente, el autor admite haber tomado decisiones editoriales que pueden afectar negativamente a los usuarios, pero las enmarca como una compensación necesaria.

Leer más
Desarrollo lado del cliente

Replicando pflog de OpenBSD en Linux: nftables y ulogd2

2025-08-16

Este artículo detalla cómo replicar la conveniente funcionalidad pflog de OpenBSD y FreeBSD en Linux usando nftables y ulogd2 para el registro y análisis de paquetes de red. Al agregar instrucciones 'log group' a las reglas de nftables y reenviar los registros a diferentes sockets netlink, puede usar tcpdump para monitoreo en vivo y ulogd2 para el registro en disco. El artículo describe la configuración de ulogd2, el registro en archivos pcap y observa las limitaciones y alternativas a ulogd2.

Leer más
Desarrollo

La persistencia inesperada de los servidores de inicio de sesión Unix tradicionales

2025-08-03

El autor explora el uso continuo sorprendente de los servidores de inicio de sesión Unix tradicionales en una reconstrucción hipotética de su entorno informático como un desarrollo moderno y de campo abierto. A pesar de la prevalencia de la virtualización de contenedores, mantienen dos tipos: un servidor de propósito general con límites de CPU y RAM, y servidores de computación que ofrecen acceso a recursos ilimitados. Si bien el uso ha disminuido, estos servidores siguen siendo sorprendentemente relevantes, particularmente para SSH en máquinas internas o para ejecutar backends para entornos de desarrollo como VSCode. El autor también observa el uso de servidores de inicio de sesión para trabajos cron y la razón por la que los usuarios almacenan código en servidores de archivos, lo que está estrechamente relacionado con el uso de su clúster SLURM y servidores de computación. La falta de un modelo de soporte robusto dificulta el seguimiento del uso exacto.

Leer más

Analizadores descendentes recursivos: ¿la simplicidad gana a la complejidad?

2025-07-28

El autor explora enfoques para analizar lenguajes de computadora, comparando específicamente analizadores descendentes recursivos con generadores de analizadores LR. Si bien los generadores de analizadores LR manejan gramáticas más complejas, el autor prefiere los analizadores descendentes recursivos debido a su facilidad de uso, a la falta de dependencia de herramientas externas y a la capacidad de escribirlos directamente en el lenguaje de destino, minimizando así la curva de aprendizaje y los desafíos de depuración. Para los desarrolladores que ocasionalmente necesitan construir analizadores para lenguajes pequeños, la simplicidad y la facilidad de uso de los analizadores descendentes recursivos superan sus limitaciones en el manejo de gramáticas complejas.

Leer más

Depuración de scripts Bash: Manejo elegante de errores `set -e`

2025-07-27

Este artículo presenta un buen truco para manejar elegantemente los errores provocados por `set -e` en scripts Bash. Utilizando `trap 'echo "Exit status $? at line $LINENO from: $BASH_COMMAND"' ERR`, puedes imprimir información como el número de línea del error, el comando fallido y el estado de salida cuando el script encuentra un error, facilitando la depuración. Esto aprovecha características específicas de Bash: las variables de entorno `$LINENO`, `$BASH_COMMAND` y la condición de trampa `ERR`. Otros shells como sh pueden comportarse de manera diferente y podrían no soportar completamente esta funcionalidad.

Leer más

La curiosa limitación de errno(3) en Linux

2025-07-04

La página de manual de errno(3) de Linux revela una limitación peculiar: errno puede modificarse incluso en llamadas a funciones exitosas, y nunca se establece en cero por ninguna llamada al sistema o función de biblioteca. Esto se debe al diseño tradicional de Unix, donde las llamadas al sistema generalmente devuelven errno solo en caso de fallo, dejándolo sin cambios en caso de éxito. Las funciones de biblioteca C pueden realizar varias llamadas al sistema, algunas de las cuales pueden fallar sin afectar al éxito general de la función de biblioteca, dejando errno con el valor de fallo. ANSI C y POSIX heredaron este comportamiento, exigiendo que errno sea significativo solo cuando una función falla y su documentación especifica el establecimiento de errno.

Leer más
Desarrollo

El Ascenso Inesperado de las Terminales X: No Era Parte del Diseño Inicial de X

2025-06-23

X no fue inicialmente diseñado para usarse con terminales X. Los sistemas X iniciales se ejecutaban en estaciones de trabajo completas; incluso las sin disco, si bien dependían de servidores para tareas pesadas, aún tenían un entorno Unix local completo. Las terminales X llegaron mucho más tarde, solo después del éxito de X como un sistema de ventanas Unix multiproveedor. NCD, posiblemente entre las primeras en producir terminales X, se fundó en 1987, pero probablemente no envió un producto hasta 1989. Esto se ve reforzado por la llegada tardía de XDM (X Display Manager), lanzado con X11R3 en octubre de 1988. Si bien técnicamente era posible usar terminales X sin XDM, su presencia simplificó mucho el proceso, lo que indica que la adopción de terminales X se retrasó con respecto a la maduración del propio X.

Leer más
Tecnología Terminales X

Rebelión de mantenedores de código abierto: el único mantenedor de libxml2 ya no prioriza los problemas de seguridad

2025-06-19

El único mantenedor de libxml2 ha anunciado que ya no tratará los problemas de seguridad de manera diferente a los errores, lo que ha provocado un debate en la comunidad de código abierto. El autor argumenta que esto refleja el creciente descontento entre los mantenedores con respecto a la explotación corporativa del software de código abierto. Se establece una distinción entre el software de código abierto personal y cooperativo (por ejemplo, Debian, BSD) y el uso corporativo del software de código abierto con fines de lucro. El autor predice un futuro en el que la comunidad de código abierto enfatizará cada vez más esta distinción, lo que podría alterar las interacciones con las corporaciones.

Leer más

WireGuard: Se Alcanza la Saturación de Banda de 1 Gbps

2025-06-17

El autor siempre pensó que el cifrado era demasiado lento para lograr la saturación de la red, incluso en Gigabit Ethernet. Sin embargo, pruebas recientes revelaron que WireGuard, funcionando en servidores comunes (Xeon E-2226G), saturó fácilmente una red de 1 Gbps sin ajustes especiales, mostrando un bajo uso de la CPU. Esto desafió las suposiciones del autor sobre la velocidad de cifrado, sugiriendo que muchos métodos podrían teóricamente saturar un enlace de 1 Gbps, y destacando la necesidad de ajuste de rendimiento para los servidores VPN existentes.

Leer más

Limitación de anidamiento de grupos mutuamente excluyentes de Argparse: Un enigma frustrante

2025-06-14

El módulo argparse de Python, si bien ofrece funciones convenientes para manejar argumentos de línea de comandos, incluidos grupos mutuamente excluyentes, tiene una limitación frustrante cuando se trata de anidar. Considere un programa con varias configuraciones de tiempo de espera donde los usuarios pueden ajustar tiempos de espera individuales o deshabilitarlos por completo. Argparse no admite anidar una opción 'sin tiempo de espera' dentro de un grupo de opciones de tiempo de espera individuales, lo que hace que la configuración sea engorrosa. Si bien puede anidar un grupo mutuamente excluyente dentro de un grupo regular, lo contrario no es compatible, y la documentación oficial indica explícitamente esta limitación. Esto obliga a los desarrolladores a verificar manualmente si se utilizaron opciones específicas, lo que agrega complejidad.

Leer más
Desarrollo

Inodo 0 de Unix: Un rincón olvidado

2025-06-02

Este artículo explora las limitaciones de los números de inodo en sistemas Unix antiguos y el caso especial del inodo 0. El autor descubrió que, aunque el estándar POSIX no prohíbe explícitamente el uso del inodo 0, muchos sistemas y programas pueden depender de números de inodo distintos de cero en la práctica. Usar el inodo 0 puede llevar a comportamientos inesperados, ya que algunos programas pueden interpretarlo como una señal de 'archivo no encontrado'. Aunque es posible experimentar con el inodo 0 usando sistemas de archivos en el espacio de usuario, no se recomienda debido a posibles problemas de compatibilidad y resultados impredecibles.

Leer más
Desarrollo inodo

La carrera armamentística de prueba de trabajo en JavaScript contra los LLM

2025-05-28

Los sitios web utilizan cada vez más sistemas de prueba de trabajo basados en JavaScript, como Anubis de Xe Iaso, para combatir los LLM y los raspadores web agresivos. Sin embargo, los LLM pueden aprovechar las máquinas comprometidas para obtener una gran cantidad de potencia de CPU para resolver estos desafíos. El problema es que los LLM operan en un entorno hostil, lo que dificulta la distinción entre una prueba de trabajo genuina y JavaScript malicioso. Esto expone a los LLM a la minería de CPU u otros ataques. Intentar identificar los sistemas de prueba de trabajo es un juego perdido para los LLM, ya que los actores maliciosos tienen un incentivo para imitarlos. Esto crea una carrera armamentística entre los sitios web y los LLM, cada uno intentando optimizar el uso de los recursos mientras protege sus intereses.

Leer más
Desarrollo Raspado web

La Evolución de los Límites de Longitud de los Nombres de Archivo en Unix

2025-05-25

Las versiones iniciales de Unix tenían límites de longitud de nombre de archivo sorprendentemente cortos: inicialmente solo 8 bytes, luego aumentando a 14. Esto estaba relacionado con el diseño simple de la estructura de directorios de Unix. El artículo profundiza en las estructuras de directorios de Unix V4 y anteriores, explicando las razones detrás de la evolución del límite de longitud de nombre de archivo y cómo las entradas de directorio de 16 bytes se ajustan mejor a los bloques de disco de 512 bytes. También trata sobre el número limitado de inodos en el Unix inicial, lo que refleja algunas de las limitaciones codificadas de los sistemas antiguos.

Leer más
Desarrollo historia de Unix

Los peligros de ordenar direcciones IPv6 con herramientas Unix

2025-05-19

Este artículo profundiza en los desafíos de ordenar direcciones IPv6 utilizando herramientas de línea de comandos Unix estándar como 'sort'. Las complejidades surgen de la representación hexadecimal de IPv6, la falta de ceros a la izquierda y la notación abreviada '::'. El autor argumenta que una solución directa requiere transformar las direcciones IPv6 en su forma completa y expandida o emplear un lenguaje de programación como Perl o Python para una clasificación eficaz, ya que las utilidades Unix existentes están mal equipadas para manejar directamente los matices del formato de las direcciones IPv6.

Leer más

Arquitectura de un solo proceso: Una solución elegante para el desarrollo web moderno

2025-04-21

Mientras actualizaba el software de su blog, el autor descubrió que una arquitectura de un solo proceso era más simple que su enfoque basado en CGI para manejar las complejidades de la web moderna. Un solo proceso permite un fácil acceso al estado compartido, simplificando tareas como la detección de tráfico malicioso, la limitación de velocidad de las solicitudes y la implementación de caché. Si bien el uso de memoria y CPU son preocupaciones, la facilidad de implementación hace que una arquitectura de un solo proceso sea ventajosa al lidiar con varias formas de abuso, especialmente las impredecibles. El autor cree que a medida que aumenta el abuso en la web, las arquitecturas de un solo proceso se volverán cada vez más importantes.

Leer más

Paradoja de Compresión ZFS: Bloques Lógicos vs. Bloques Físicos

2025-04-17

Un archivo cero de 256 KB creado con `dd` en un sistema de archivos ZFS con compresión habilitada muestra un comportamiento desconcertante: `ls -l` muestra su tamaño como 256 KB, pero `ls -s` y `ls -slh` muestran un tamaño mucho menor, casi cero. Esto se debe a la eficiente compresión de ZFS, resultando en un número mínimo de bloques físicos. El artículo explora tres maneras de medir el tamaño del archivo: tamaño lógico (en bytes), conteo de bloques físicos y conteo de bloques lógicos. Señala que el campo `st_blocks` de POSIX no especifica qué tamaño reportar, lo que lleva a posibles cambios en el valor de `st_blocks` al mover archivos entre sistemas de archivos, e incluso a una posible expansión del tamaño del archivo que excede la capacidad del nuevo sistema de archivos.

Leer más
Desarrollo

Un Enfoque Personal para la Gestión de Paquetes Unix

2025-04-13

El autor comparte un método inteligente para gestionar paquetes de software personales en sistemas Unix. Utiliza un árbol de directorios `~/lib/` para almacenar software para diferentes arquitecturas, con cada programa instalado en un subdirectorio separado y versionado (por ejemplo, `emacs-30.1`). Un directorio `~/bin/bin.` contiene enlaces simbólicos o scripts envoltorios que apuntan a estos programas, permitiendo cambiar fácilmente entre versiones. Para herramientas como pipx y Cargo, el autor mantiene sus ubicaciones de instalación predeterminadas, pero crea enlaces en `~/bin/bin.` para evitar conflictos de ruta. Esta configuración no es perfecta, pero es muy útil para gestionar software no disponible a través del gestor de paquetes del sistema o que sea demasiado antiguo.

Leer más

Extraño error al deshabilitar la contraseña SSH en Ubuntu 24.04

2025-04-06

Deshabilitar el acceso a través de contraseña SSH en internet, mientras se permitía en la LAN local, en un servidor Ubuntu 24.04, parecía sencillo usando sshd_config. Sin embargo, un archivo de configuración personalizado en /etc/ssh/sshd_config.d/ se ignoró después de reiniciar el demonio SSH. El culpable fue la regla de configuración 'el primero que llega es el primero que sirve' de sshd_config, y un archivo '50-cloud-init.conf' generado por el sistema que contenía 'PasswordAuthentication yes', que se cargó antes del archivo personalizado. Renombrar el archivo de configuración personalizado a '10-no-passwords.conf' resolvió el problema, asegurando que se cargara primero.

Leer más
Desarrollo

Sobredimensionamiento de Fibra: Más vale prevenir que curar

2025-03-25

Al planificar el cableado de fibra entre salas o edificios, sea cauto e instale más fibra de la que necesita inicialmente. Las expansiones futuras, las actualizaciones de ancho de banda y los nuevos protocolos requieren capacidad extra. Además, las fallas de fibra ocurren —a veces inexplicablemente— y tener pares de reserva permite una recuperación rápida. Si bien las fibras monomodo y multimodo tienen diferentes aplicaciones, tener suficiente redundancia es crucial para minimizar el tiempo de inactividad y los costos.

Leer más

Metadatos estructurados de Loki: Una pesadilla logística

2025-03-19

Grafana Loki, a menudo llamado 'Prometheus para registros', inicialmente adoptó un modelo de datos similar a Prometheus. Sin embargo, esto resultó desastroso para los registros del sistema (syslog o systemd journal). A diferencia de Prometheus, Loki almacena cada conjunto de valores de etiqueta por separado y carece de compactación de registros, lo que lleva a explosiones de cardinalidad. Para solucionar esto, Loki introdujo 'metadatos estructurados', pero a partir de la versión 3.0.0, sigue estando subdesarrollado. Las etiquetas de metadatos estructurados no se tratan como etiquetas Loki regulares, lo que requiere una sintaxis de consulta diferente. La migración de etiquetas existentes es compleja y potencialmente catastrófica, con el riesgo de crear inadvertidamente etiquetas de alta cardinalidad. La actualización requiere precaución, la migración de datos existentes es increíblemente costosa y una consideración cuidadosa es crucial antes de usarlo en nuevos proyectos.

Leer más

JSON: Una opción práctica para la salida legible por máquina en Unix

2025-02-24

El autor aboga por el uso de JSON como formato de salida legible por máquina, basándose en su experiencia al eliminar correos electrónicos de una cola de correo Postfix. Si bien no es perfecto, JSON ofrece varias ventajas prácticas en sistemas Unix: claridad, amplia compatibilidad, soporte extenso de herramientas y fácil conversión a otros formatos. Para programas nuevos, el autor sugiere que usar solo JSON es el enfoque más simple, evitando las complejidades de diseñar formatos personalizados y promoviendo la interoperabilidad entre programas Unix.

Leer más

Gigantes ocultos de caché: ¿Por qué está desapareciendo su espacio en disco?

2025-02-08

Muchos programas Unix almacenan datos en caché en directorios ocultos `.cache` y `.local`, dificultando que los usuarios encuentren y limpien estos archivos de caché grandes que consumen espacio significativo en disco. El autor fue testigo de primera mano de cómo estudiantes de posgrado en un entorno de servidor de archivos compartido quedaron desconcertados por estas cachés ocultas, con cientos de GB de espacio en disco consumiéndose sin que ellos lo supieran. El artículo hace un llamamiento a los desarrolladores para que almacenen las cachés en directorios visibles y sugiere que las herramientas de uso del espacio en disco muestren explícitamente el contenido de estos directorios ocultos para ayudar en la gestión del espacio en disco del usuario.

Leer más

Ataque de phishing sofisticado aprovecha el acceso VPN

2025-01-29

El departamento de Ciencias de la Computación de la Universidad de Toronto sufrió un ataque de phishing altamente sofisticado. El atacante falsificó una dirección de correo electrónico del departamento, robando con éxito la contraseña de un usuario. Lo alarmante es que el atacante usó las credenciales robadas para registrar rápidamente al usuario en la VPN del departamento y luego usó la puerta de enlace SMTP interna para enviar spam. Esto demuestra el reconocimiento previo al ataque del entorno de VPN y correo electrónico del objetivo, destacando las técnicas de ataque cada vez más avanzadas y la necesidad de defensas de seguridad cibernética sólidas.

Leer más
Tecnología explotación de VPN

Deshabilitar la autenticación por contraseña para SSH con acceso a Internet: ¿aumento de seguridad o exageración?

2025-01-18

Este artículo analiza las ventajas y desventajas de deshabilitar la autenticación por contraseña para SSH con acceso a Internet. Si bien las contraseñas seguras ofrecen protección contra ataques de fuerza bruta, el autor argumenta que deshabilitar la autenticación por contraseña proporciona capas adicionales de seguridad contra credenciales robadas, vulnerabilidades del servidor SSH y ataques dirigidos a cuentas predeterminadas. Sin embargo, esto también introduce inconvenientes, como la imposibilidad de iniciar sesión sin un par de claves. El autor sugiere una cuidadosa consideración de las compensaciones en función de las circunstancias individuales.

Leer más

/etc/glob: La historia no contada del globbing de shell en Unix antiguo

2025-01-13

Este artículo profundiza en la historia y la función de `/etc/glob` en los sistemas Unix antiguos. Antes del V7 Bourne Shell, la expansión de comodines en el shell Unix no era manejada por el propio shell, sino que se delegaba al programa externo `/etc/glob`. `/etc/glob` recibía el comando y los argumentos, expandía los comodines y luego ejecutaba el comando. El artículo detalla cómo funcionaba `/etc/glob` en diferentes versiones de Unix, incluyendo el manejo de caracteres escapados y la razón detrás del uso de un programa externo, probablemente debido a las limitaciones de recursos en los sistemas antiguos.

Leer más
Desarrollo Historia de Unix

Complejidad de la Configuración de WireGuard: De Simple a Avanzado

2025-01-05

Esta publicación de blog explora varias complejidades de configuración de WireGuard, desde la más simple, con espacios de direcciones IP internos completamente aislados, hasta la configuración de 'VPN' más desafiante, donde algunos puntos finales son accesibles tanto dentro como fuera del túnel WireGuard. El autor detalla la dificultad y los problemas potenciales de cada configuración, como conflictos de enrutamiento y enrutamiento recursivo. El artículo enfatiza la importancia de la planificación previa y sugiere optar por configuraciones más simples para evitar el enrutamiento complejo al diseñar un entorno WireGuard.

Leer más

Posible problema con la importación/exportación de zpool en Linux OpenZFS

2024-12-26

Existe un posible problema en las versiones de Linux OpenZFS (a partir de la 2.3.0) con respecto a la importación y exportación de pools ZFS. Incluso si ningún sistema de archivos dentro de un pool ZFS tiene la propiedad 'sharenfs' configurada, `zpool import` y `zpool export` siguen ejecutando `exportfs -ra`. Esto puede eliminar exportaciones NFS añadidas o modificadas manualmente, afectando a entornos como sistemas de alta disponibilidad que utilizan configuraciones de exportación NFS personalizadas. El problema se debe a que OpenZFS ejecuta `exportfs -ra` ciegamente, independientemente de si es necesario cambiar las exportaciones NFS.

Leer más
Desarrollo

Fallo en el reinicio del servidor: El reinicio con enfriamiento resuelve el bloqueo del kernel

2024-12-25

El autor encontró dos servidores idénticos con bloqueos del kernel que no se podían resolver con un simple reinicio. Durante el fallo, los servidores imprimieron una serie de errores de excepción de comprobación de máquina en la fase del firmware del sistema, apuntando a problemas de hardware de la CPU. Un período de enfriamiento de unos minutos después de apagar, seguido de un reinicio, resolvió el problema. Esto demuestra que incluso una breve interrupción de energía puede no restablecer completamente ciertos componentes del sistema x86, requiriendo un período de enfriamiento para una recuperación completa.

Leer más

Una segunda vida para un servidor de archivos de una década: solución de almacenamiento rentable

2024-12-17

Una empresa sigue utilizando en producción una máquina, un servidor de archivos de más de diez años. Aunque está desactualizado, con un BMC que requiere Java para KVM-over-IP, sus 16 bahías de disco y puertos Ethernet de 10G lo hacen ideal para reutilizarlo. Se utiliza como un servidor de almacenamiento de bajo coste con discos propios, satisfaciendo la necesidad de almacenamiento de alta capacidad y bajo rendimiento a pesar de su edad y RAM limitada. Esto destaca el valor de reutilizar hardware antiguo cuando los requisitos se alinean.

Leer más
← Previous 1