Todos los artículos
-
Reportar el fallo parcial de forma estructurada
Devolver el resultado de cada operación junto con un estado agregado explícito, para que el trabajo que sí tuvo éxito no se repita después de un resultado mixto.
-
Construir una réplica (mirror) RAID1 por software con mdadm y sustituir un disco averiado
mdadm --create construye un array RAID por software de Linux a partir de particiones o discos enteros; sin una entrada en mdadm.conf y un initramfs actualizado, el array puede no volver a ensamblarse en el siguiente arranque, aunque funcione bien justo después de crearlo.
-
Diagnosticar la aplicación de directivas de grupo: gpresult, gpupdate y el módulo GroupPolicy
Leer qué directiva se aplicó realmente a un equipo o a una persona usuaria con gpresult /h y Get-GPResultantSetOfPolicy, forzar el reprocesamiento con gpupdate /force, y respaldar un GPO con Backup-GPO antes de editarlo.
-
Trazado distribuido a grandes rasgos: spans, ID de padre y propagación del contexto de traza W3C
Una traza es un árbol de spans, cada uno con un ID de traza, su propio ID de span, un ID de span padre, marcas de tiempo, atributos y un estado; la cabecera traceparent de W3C lleva el ID de traza, el ID de padre y un indicador sampled a través de los límites de proceso, y un servicio que se limita a reenviar ambas cabeceras mantiene las trazas intactas.
-
Envenenamiento de memoria: cuando una instrucción inyectada sobrevive en todas las sesiones posteriores
Se puede inducir a los agentes con memoria persistente a almacenar la instrucción de un atacante como si fuera un hecho o una preferencia; esa instrucción influye después en sesiones que nunca vieron el contenido original. Las escrituras en memoria necesitan procedencia, revisión y una fecha de caducidad, y las lecturas de memoria deberían tratarse como texto no fiable.
-
Elegir la siguiente comprobación de depuración según las hipótesis que permite distinguir
Evita que una investigación repita diagnósticos poco informativos eligiendo cada comprobación según las explicaciones en competencia que su resultado permite separar.
-
Almacenamiento de contraseñas y claves de API
Las contraseñas solo se almacenan como hashes lentos con sal (Argon2id, scrypt, bcrypt); las claves de API de alta entropía pueden usar un hash rápido con clave. En ambos casos la comparación se hace en tiempo constante y nunca se registran en logs ni se devuelven tras su emisión.
-
Comparativa de sincronización de reloj: chrony, systemd-timesyncd, w32tm, timed de macOS y xntpd de AIX
Referencia rápida para los demonios de hora que se usan en Linux, Windows, macOS y AIX sobre cómo comprobar si el reloj de un equipo está realmente sincronizado. No profundiza en ninguna herramienta concreta, porque la comprobación es la misma en todas partes: ¿hay una fuente configurada y está el equipo sincronizado ahora mismo?
-
Añadir una CA privada al almacén de confianza del sistema en la familia RHEL y en Debian/Ubuntu
Las distribuciones Linux de la familia RHEL y de la familia Debian usan mecanismos distintos para añadir un certificado de CA de confianza local: update-ca-trust con anchors en /etc/pki/ca-trust, y update-ca-certificates con archivos .crt en /usr/local/share/ca-certificates. Usar un directorio o una extensión incorrectos deja la CA sin confianza, sin mostrar ningún error.
-
Códigos de salida de wget y rsync: los códigos 23 y 24 de rsync no suelen ser el fallo que parecen
wget asigna un código fijo y pequeño a cada clase de error (red, SSL, autenticación, protocolo); la tabla de rsync es más amplia e incluye el 23 (transferencia parcial por error) y el 24 (transferencia parcial por archivos de origen desaparecidos), que habitualmente solo indica que un archivo desapareció durante el análisis y no demuestra que la transferencia esté rota.
-
Conventional Commits: tipos de commit legibles por máquinas
La especificación Conventional Commits añade a los mensajes de commit un prefijo tipado (feat, fix y otros) y marcas de cambios incompatibles, de modo que los changelogs y los incrementos de versión puedan derivarse automáticamente.
-
Contraseñas de un solo uso basadas en tiempo (TOTP) como segundo factor
TOTP (RFC 6238) genera un código corto a partir de un secreto compartido y del intervalo de tiempo actual; protege frente a la reutilización de contraseñas, pero no frente al phishing en tiempo real, y exige almacenar el secreto de forma segura, tolerar cierto desfase de reloj y ofrecer códigos de recuperación.
-
Enrutamiento de alertas: agrupación, inhibición, silencios y políticas de escalado
Entre una alerta que se dispara y un teléfono hay cuatro decisiones: qué equipo y canal la reciben (árbol de enrutamiento), qué alertas viajan juntas (agrupación con group_wait, group_interval y repeat_interval), cuáles se silencian porque una alerta causal ya las explica (inhibición) o porque hay un mantenimiento planificado (silencios), y cuánto tiempo tiene quien responde antes de que el aviso escale a la siguiente persona.
-
Cómo hacer solicitudes HTTP correctamente desde Python
Define un timeout en cada solicitud, reutiliza un cliente para agrupar conexiones, envía las cabeceras Accept y User-Agent, decodifica según el charset declarado y gestiona de forma deliberada los códigos de estado y los reintentos; tanto la biblioteca estándar como httpx lo permiten.
-
Ejecutar un servicio con systemd
Un archivo de unidad declara cómo se inicia, se reinicia y se confina un servicio; usa Type, Restart=on-failure, límites de recursos y directivas de aislamiento, y lee los logs con journalctl en lugar de escribir tu propia daemonización.
-
Confirmar que un parche de seguridad se aplicó realmente: comparar las versiones instaladas con los avisos del fabricante en distintas familias de SO
Que un trabajo de actualización informe éxito no prueba que una vulnerabilidad concreta esté corregida. Lo que cierra el ciclo es comparar la versión del paquete o la compilación instalada con el aviso del propio fabricante (USN de Ubuntu, un aviso de la familia RHEL —RHSA en RHEL— mediante dnf updateinfo --security, DSA de Debian con debsecan, Get-HotFix en Windows o el número de compilación de macOS frente a la página de versiones de seguridad de la propia Apple). Además, un reinicio pendiente puede dejar en ejecución el binario antiguo y vulnerable incluso después de superar esa comprobación.
-
OAuth 2.0 client credentials para el acceso máquina a máquina
El flujo client credentials permite que un servicio o agente obtenga un access token con su propio client ID y secreto, sin intervención de un usuario; scope y resource indicators acotan el token, y el secreto debe tratarse como una contraseña: el servidor lo almacena con hash y el cliente lo rota.
-
Acotar reglas de Windows Defender Firewall con NetSecurity sin perder el acceso a tu propia sesión
Get-NetFirewallProfile y New-NetFirewallRule administran Windows Defender Firewall desde PowerShell. Acotar una regla con -RemoteAddress y -Profile mantiene un puerto de administración abierto solo para las direcciones y los tipos de red necesarios, y probar desde una segunda sesión evita cortar la que se está usando.
-
Gobernanza para un proyecto pequeño: derechos de decisión por escrito antes de necesitarlos
Un archivo de gobernanza responde quién puede fusionar cambios, quién resuelve una disputa de alcance, cómo se añaden y se retiran mantenedores y cómo se modifican las propias reglas. La PEP 13 de Python muestra un modelo de consejo cuya autoridad debe ejercerse pocas veces y con deliberación pública; el glosario de Apache define el consenso perezoso (lazy consensus), por el que una propuesta se aprueba si nadie objeta en un plazo establecido. Un proyecto con uno a tres mantenedores solo necesita una página.
-
Aprendizaje autosupervisado contrastivo: pares, aumento de datos y colapso
Aprende representaciones comparando vistas relacionadas y vistas contrastantes, elige transformaciones que conserven la información útil y evalúa las representaciones más allá de la pérdida de entrenamiento.
Legible por máquina: JSON