BandaAncha.eu

Comunidad de usuarios
de fibra, móvil y ADSL

Problema de seguridad con PHP

Rendiok

Buenas,

Aún dudo si debería ir en el foro de programación o aquí... así que lo siento si he posteado en el sitio equivocado.

No hará mucho he entrado a trabajar en un instituto que hacen, entre otros, curos de informática. Por ahora estoy arrastrando toda la configuración que tenían hasta ahora y poco a poco ya iré haciendo cambios en cosas que vea posibilida de mejorar. Aún así hay un tema que me da miedo y no sé bien bien cómo buscarlo.

Tienen montando un servidor Linux el cual ofrece una página web del centro hacia el exterior, además tienen aplicaciones web para profesorado y también un Moodle para trabajar con los estudiantes.Todo en el mismo servidor. En este mismo Linux también cada profesor tiene un usuario ( para poder conectarse por ssh y tener archivos ) y un espacio público en su home para que puedan acceder via web a archivos que hayan colgado. Es aquí donde está el problema. Como también hay profesores de informática decidieron en su momento instalar el php para poder subir aplicaciones y ejecutarlas, entonces el fallo está en que si un alumno consiguiera una contraseña de un profesor, mediante un php que subiera a su directorio, lo podría ejecutar y acceder a diferentes áreas del sistema y examinar, entre otras cosas, información, modificarla, etc.

Una de las posibilidades imagino sería separar todo en 2 servidores. Uno de ellos sería el que alojara las aplicaciones web, página, etc y el segundo servidor sería quien alojaría las carpetas personales de los usuarios. Así evito que la información de mayor importancia estubiera en otro servidor, pero aún así sigo teniendo el problema de que con un .php que lo ejecutaría el usuario Apache podría obtener archivos de otros usuarios.

La otra sería quitar la ejecución de php para los profesores, pero como es una utilidad que lleva arraigada desde años pues quitarla supone molestias. No lo vería mal si no hubiera otra solución, pero por eso pregunto si hay algo más elegante.

Siento el tostón pero no sé muy bien ni cómo buscar el tema, ni si existe un control para evitar este problema, y si lo hubiera no sé si el encargado de la seguridad sería Apache o Php.

Gracias!

BocaDePez
BocaDePez

Genera DMZs aisladas entre sí por otra máquina que haga de cortafuegos serio. Lo que vaya a Internet, aislado. Lo que vaya a Intranet, aislado.

Y control férreo, ¡mano dura, que si no, no aprenden! :D

🗨️ 1
Rendiok

Gracias por contestar!

Soy aún bastante novato en muchos aspectos de sistema así que si suelto burradas tirarme de las orejas.

Lo que me comentas diría que no me soluciona el problema, porque aunque lo aisle ese servidor que contiene tanto los directorios personales de los usuarios como la página web del centro ( para exterior e interior ), aplicaciones web... los profesores tienen que tener acceso a su carpeta personal. Lo único que quiero mirar es si se puede evitar que cuando ellos suban un php, este no pueda navegar por todo el sistema de archivos como usuario apache, leyendo y modificando archivos importantes. Me gustaría algo como se puede llegar a hacer en el SSH, una jaula, de la cual el usuario no pueda salir de su carpeta... pero es lo que no sé si es posible.

Gracias!

BocaDePez
BocaDePez

como tu mismo has dicho, dos equipos, uno donde tener el servicio php y otro donde tener los datos que no quieres comprometidos. Hoy en día con tanta máquina virtual, tanto Kerberos o PAM para loguear con un mismo pass en varios sitios... no debería ser problema... Hacer un NAT o una redirección de un puerto de un equipo a otro (lo que se ve como "por forwarding" en los routers) es bastante sencillo, amos, un comando iptables.

🗨️ 1
Rendiok

Buenas,

Pues imagino que sí, al final lo separaré que será lo más fácil y haré las redirecciones como comentas con el iptables.

Muchas gracias a todos por la ayuda!

McRob

Si hablamos de un servidor apache con php lo más lógico no sería configurar correctamente ese servidor? Por ejemplo con una correcta configuración de los permisos de cada usuario impediría que un usuario pudiera acceder a la cuenta de otro.

Por otro lado utilizando características de apache como suEXEC podrías forzar a que cuando los usuarios a que cuando ejecuten un script php sea ejecutado bajo su propio nombre de usuario y no bajo el usuario de apache, de ese modo evitas también que ejecuten cualquier tipo de script php bajo el usuario de apache.

A parte para mejorar del todo la seguridad sería interesante que te miraras el archivo php.ini y activarás el safe_mode así como otras opciones de seguridad para limitar el uso de ciertas características de php (por ejemplo en servidores web compartidos lo normal es prohibir el uso de comandos como exec, system, popen, etc mediante la variable disable_functions para evitar que ejecuten ningún comando del sistema mediante php).

Y ya para acabar de mejorar la seguridad quizá te interese instalar algo del tipo ModSecurity para tener el apache del servidor protegido, sobre todo en el caso de que el servidor sea accesible desde Internet.

🗨️ 1
Rendiok

Mucha información interesante... sé que hay problemas de configuración pero aún no tengo demasiados conocimientos en algunos temas pero la idea es mejorar. Voy a probar todo eso que me comentas que parece ser muy útil.

Gracias!