Linux Unified Logic Utility

¿Cómo podemos ejecutar comandos de sistema privilegiados desde una interfaz web de forma completamente segura?

👤

Usuario Web Limitado

El servidor web (Apache/PHP) se ejecuta como `www-data`, un usuario con permisos mínimos por razones de seguridad.

→ 🚫 ←
⚙️

Comandos Críticos

Acciones como `reboot` o `shutdown` requieren privilegios de `root` que el usuario web no posee.

> php -r "shell_exec('reboot');"

sh: 1: reboot: Permiso denegado

Solución

En lugar de debilitar la seguridad, introducimos un intermediario especializado y de confianza: un "Portero" inteligente llamado LuLu

1. Core LuLu

Programa pequeño, rápido y compilado en C, un lenguaje de bajo nivel ideal para interactuar con el sistema operativo.

2. Permisos SUID

Al programa se le asigna el permiso especial SUID, permitiéndole ejecutarse temporalmente con los privilegios de su dueño (`root`).

3. Misión Única y Segura

Su única tarea es recibir una petición de PHP, validarla rigurosamente contra una ruta permitida y, solo si es segura, ejecutarla.

Arquitectura Interactiva

El siguiente diagrama muestra el flujo de ejecución. Presiona "Iniciar Flujo" para ver cómo cada componente se activa en secuencia y entender su rol en el proceso.

Navegador Web
(Usuario)
Servidor Web
(PHP)
LuLu
(CORE)
Script Temporal
(.sh)
Host Remoto
(Servidor)

Presiona el botón para comenzar la animación.

Conceptos Técnicos Clave

Esta arquitectura se apoya en tres conceptos fundamentales de Linux y la programación en C para garantizar su seguridad y eficacia.

Bit SUID (`Set User ID`)

Es un permiso especial que se le asigna a un archivo ejecutable en sistemas tipo Unix. Su función es crucial: le indica al sistema operativo que, cuando cualquier usuario ejecute este programa, debe hacerlo con los permisos del **dueño del archivo**, en lugar de los permisos del usuario que lo invocó. Si el dueño del ejecutable es `root`, el programa se ejecutará con privilegios de `root`, sin importar quién lo haya iniciado.

Flujo de Trabajo Detallado

Explora el proceso paso a paso, desde el clic del usuario hasta la ejecución final del comando en el servidor remoto. Haz clic en cada paso para ver los detalles.

1

Clic del Usuario

Todo comienza en la interfaz web.

2

Acción del Script web

El script recibe la petición y crea un archivo de script temporal en la carpeta segura predefinida. Dentro de este archivo, escribe el comando real que debe ejecutarse.

3

Llamada al Núcleo LuLu en C

PHP no intenta ejecutar el script directamente. En su lugar, invoca al core LuLu y le pasa como argumento la ruta completa al script temporal que acaba de crear. Ej: `shell_exec('/ruta/programa_c /ruta/script');`

4

Magia y Seguridad en el Core

El sistema operativo, al ver el bit SUID, ejecuta el LuLu con privilegios de `root`. El programa primero valida que la ruta del script sea la permitida. Si la validación es exitosa, ejecuta el script. Si no, se detiene inmediatamente.

5

Ejecución Final

El comando dentro del script se ejecuta con éxito en el host remoto, ya que fue invocado por un proceso que, en ese momento, tenía los máximos privilegios del sistema.

Conclusiones y Beneficios

Esta arquitectura no solo resuelve el problema inicial, sino que lo hace siguiendo las mejores prácticas de seguridad informática.

🛡️

Seguridad Máxima

La superficie de ataque es mínima. El servidor web y el script PHP nunca obtienen privilegios elevados, aislando el riesgo.

🎯

Control Total

Solo las acciones explícitamente definidas en los scripts dentro de la carpeta segura pueden ser ejecutadas. No hay espacio para la improvisación.

🔑

Principio de Menor Privilegio

Cada componente opera con los permisos estrictamente necesarios para su función, siguiendo la regla de oro de la ciberseguridad.