RV: [LUG.ro] Jornadas y Comandos root en PHP

Nicolás Aimetti lugro@lugro.org.ar
Fri, 25 Nov 2005 17:51:50 +0000


Nunca realice tareas de system admin usando PHP (para eso siempre 
preferí perl) y no estaba al tanto que PHP reestringia los llamados al 
sistema de las funciones setuid y demás como supongo que lo hace...
Por lo que estuve viendo calculo que se podría desactivar el safe_mode y 
demás (aunque no estoy seguro) sin embargo creo que sería la última cosa 
que yo haría.
Me gusto bastante la idea que propuso Omar Arino

> 1) Por razones de seguridad tenes que hacer que esta aplicación funcione solo por la interfase lo (127.0.0.1) ya que es una flor de agujero.
> 2) Esta aplicación tiene que dormir mientras espera recibir algo por el puerto configurado.
> 3) Con PHP utilizas las funciones para SOCKET y te conectas con el otro programas. Mandas las señal adecuada.
> 4) Cuando el demonio escucha la señal correcta, ejecuta el programa que reinicia el servicio. Acá sí te puede funcionar el SUDO.

Sin embargo yo le cambiaria una pequeña cosita a esto: Ya que los 
sockets pueden ser accedidos por todos los usuarios del sistema, o sea, 
no hay permisos a nivel usuario para saber quien puede escribir en los 
mismo o no.
No sé si a los sockets de domino unix se les podrá setear algún tipo de 
permiso, si se pudiese serían una buena opción para usar.
Sino usando las funcions de IPC, usando una message queue por ejemplo, 
mediante los permisos de la misma podrías restringir que sólo el usuario 
que vos quieras pueda comunicarse con el proceso que levanta el servicio 
deseado...
En caso de que no puedas acceder a las fucniones IPC desde php podrías 
implementar algo así mediante archivos (a los cuales tb se les puede 
asignar permisos de escritura segun usuario)... sin la necesidad de que 
el proceso que chequea el archivo sea corrido con el cron, sino 
simplemete hacer un demonio que quede bloqueado leyendo ese archivo, y 
comunicarte por ahí (sería un poco más optimo que andar corriendo el 
proceso a cada rato)... Claro que usando archivos se complicaría un poco 
más por el tema de si hay procesos concurrentes escribiendo, pero eso se 
puede manejar sin problemas en unix usando flock.

Saludos,
         Nicolás.

Saludos,
         Nicolás.