Simplemente hice girar un cuadro de Ubuntu 11.10 y luego corrí apt-get install apache2 php5
para instalar apache2 y PHP 5 en el cuadro. Ahora funciona como un "servidor web" y carga "Funciona". página. Ahora estoy tratando de reforzar la seguridad y tengo las siguientes preguntas sobre los servidores web de Linux:
- ¿Con quién debería estar corriendo Apache?
- ¿En qué grupo (s) debería estar este usuario?
- ¿Qué paquete (s) puede hacer que PHP (y Apache?) Se ejecute como el propietario de los archivos? (como en los servidores web compartidos) ¿Debo usar estos paquetes? ¿Son fáciles / factibles de mantener en un sistema pequeño?
- ¿Cuáles deberían ser los permisos predeterminados para los archivos y carpetas que se sirven en la web con Apache ejecutándose como
www-data
? ¿Para apache / php ejecutándose como el usuario?
He hecho lo siguiente al examinar la configuración predeterminada:
Estructura de archivo
Cuando cd /
y hago una ls -al
lista de los contenidos, veo /var
:
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 var/
Si cd
entro var
y ls -al
veo:
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 www/
Finalmente, adentro /var/www
veo:
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 ./
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 ../
-rw-r--r-- 1 root root 177 2012-02-04 20:47 index.html
Mi conclusión clave es que hasta ahora todos estos archivos pertenecen root:root
, los archivos tienen permisos de 644 y los directorios tienen permisos de 755.
Permisos de Apache
Si creo un archivo como root /var/www/test.php
con los contenidos:
<?php echo shell_exec('whoami');
y cargar ese archivo en un navegador que me dice www-data
, que es lo mismo que en el /etc/apache2/envvars
archivo:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
Si lo hago ps aux | grep -i apache
, veo lo siguiente:
root 1916 1.2 104664 7488 Ss 20:47 /usr/sbin/apache2 -k start
www-data 1920 0.8 105144 5436 S 20:47 /usr/sbin/apache2 -k start
www-data 1921 1.0 105144 6312 S 20:47 /usr/sbin/apache2 -k start
www-data 1922 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1923 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1924 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1925 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
Entonces, ¿quién está ejecutando Apache? Parece que tal vez el primer proceso es root
, tal vez desde el /etc/init.d/apache
script cuando se inició el sistema, y los otros se www-data
generaron desde el primero. ¿Es eso correcto?
Luego, si escribo, groups www-data
entonces veo www-data : www-data
, por lo que parece que solo está en el www-data
grupo. Supongo que esto también es una práctica estándar.
Hosting Compartido y Seguridad
Entonces, si entiendo las cosas correctamente, si apache se ejecuta como www-data
y quiero que apache pueda leer un directorio, el x
bit debe establecerse para el grupo world (other) ( o+x
), y eso también debe establecerse en todos los padres directorios hasta el final de la cadena ( www
, var
). Y si quiero que Apache pueda leer un archivo, entonces el o+r
bit necesita ser configurado.
Desafortunadamente, creo que esto introduce un agujero de seguridad para múltiples aplicaciones y / o múltiples usuarios en la misma caja de Linux: todos los archivos web deben ser legibles en todo el mundo, por lo que también son accesibles para otras aplicaciones y otros usuarios en el sistema. Si una aplicación instalada en el sistema tenía una vulnerabilidad de seguridad que permitía una entrada de usuario sin validar, que luego fue ejecutada por PHP, un atacante remoto podría examinar todos los demás archivos del sistema web que eran legibles en todo el mundo. Del mismo modo, si la caja tenía múltiples usuarios, y un usuario conocía la ruta de los archivos web de otro usuario, él / ella podría leer el contenido del archivo (y ver cosas sensibles como cadenas de conexión de base de datos, etc.).
He oído hablar de dos paquetes, suphp
y phpsuexec
que tratan de permitir que los archivos de los usuarios se distribuyan "como ellos" en un sistema compartido. Una de las ventajas de esto es que permite que las aplicaciones web (como Wordpress) creen y modifiquen archivos, muy útil para agregar temas, complementos y actualizar software. Por supuesto, probablemente sea más seguro hacer estas cosas manualmente, pero ¿se puede llegar a un compromiso quizás con uno de los paquetes mencionados anteriormente? ¿O posiblemente usando chown
para hacer que el grupo del directorio de wordpress pertenezca www-data
y establezca el bit fijo en el grupo ( g+s
)?
Solo los he usado como usuario final de una empresa de alojamiento web, por lo que no conozco los entresijos de ellos, y si es razonable instalarlos en un sistema pequeño, o si hay algún otro En su lugar, debería usar medidas de seguridad, pero pensé en mencionarlas aquí, ya que parecen ser una forma posible de abordar algunas de mis preocupaciones.
Regresar a las preguntas
- ¿Con quién debería estar corriendo Apache?
- ¿En qué grupo (s) debería estar este usuario?
- ¿Qué paquete (s) puede hacer que PHP (y Apache?) Se ejecute como el propietario de los archivos? (como en los servidores web compartidos) ¿Debo usar estos paquetes? ¿Son fáciles / factibles de mantener en un sistema pequeño?
- ¿Cuáles deberían ser los permisos predeterminados para los archivos y carpetas que se sirven en la web con Apache ejecutándose como
www-data
? ¿Para apache / php ejecutándose como el usuario?