Instalación como módulo de Apache
Cuando PHP es usado como un módulo de Apache, hereda los
permisos del usuario de Apache (generalmente los del usuario
"nobody"). Este hecho representa varios impactos sobre la
seguridad y las autorizaciones. Por ejemplo, si está usando
PHP para acceder a una base de datos, a menos que tal base de
datos disponga de un control de acceso propio, usted tendrá
que hacer que la base de datos sea asequible por el usuario
"nobody". Esto quiere decir que un script malicioso podría
tener acceso y modificar la base de datos, incluso sin un nombre
de usuario y contraseña. Es completamente posible que un
archivador automatizado de documentos web pudiera toparse con la
página web de administración de una base de datos, y
eliminar todas sus bases de datos. Usted puede protegerse de este
tipo de situaciones mediante mecanismos de autorización de
Apache, o puede diseñar su propio modelo de acceso usando
LDAP, archivos .htaccess, etc. e incluir ese código como
parte de sus scripts PHP.
Con frecuencia, una vez la seguridad se ha establecido en un punto
en donde el usuario de PHP (en este caso, el usuario de apache)
tiene asociada una muy leve capacidad de riesgo, se descubre que
PHP se encuentra ahora imposibilitado de escribir archivos en los
directorios de los usuarios. O quizás se le haya
desprovisto de la capacidad de acceder o modificar bases de
datos. Se ha prevenido exitosamente que pudiera escribir tanto
archivos buenos como malos, o que pudiera realizar transacciones
buenas o malas en la base de datos.
Un error de seguridad cometido con frecuencia en este punto es
darle permisos de administrador (root) a apache, o incrementar las
habilidades del usuario de apache de alguna otra forma.
Escalar los permisos del usuario de Apache hasta el nivel de
administrador es extremadamente peligroso y puede comprometer al
sistema entero, así que el uso de entornos sudo, chroot, o
cualquier otro mecanismo que sea ejecutado como root no
debería ser una opción viable para aquellos que no
son profesionales en seguridad.
Existen otras soluciones más simples. Mediante el uso
de open_basedir usted
puede controlar y restringir aquellos directorios que
podrían ser usados por PHP. También puede definir
áreas solo-Apache, para restringir todas las actividades
basadas en web a archivos que no son de usuarios, o del sistema.