
Estoy ejecutando un servidor web Apache experimental solo por diversión. Parte de la idea detrás de este servidor es que debería estar inusualmente abierto al público; por ejemplo, el sistema de archivos raíz debería estar abierto para que cualquiera pueda explorarlo. (De hecho, aquí está:http://sylvester.s.zbasu.net/rootfs/) Como consecuencia, la seguridad pasará a un segundo plano.
Dicho esto, hay cosas a las que Apache debería poder acceder, pero el público no. El ejemplo con el que me encuentro es un sitio de Django. Apache debe poder leer el archivo settings.py
; de lo contrario, Django no funcionará. Pero settings.py
no debe ser legible por el público, ya que contiene una clave secreta. Por lo tanto, el archivo debería ser propiedad de www-data
, pero Apache debería negarse a entregarlo.
Una posible solución (gracias a ellipsis753
Freenode) es crear una directiva especial, tal vez en un .htaccess
archivo, que le indique a Apache que no entregue este archivo. Sin embargo, me imagino que si un archivo no es legible por todos los usuarios, probablemente Apache tampoco debería entregarlo.
¿Puedo decirle a Apache que si un archivo no es legible en todo el mundo, entonces no debería entregarse?
Respuesta1
Si ejecuta su aplicación Django en FastCGI o en el modo Daemon de mod_wsgi, puede ejecutarla como un usuario diferente al que ejecuta Apache. Luego, puede eliminar por completo el permiso de Apache y World para leer cualquier archivo que no desee servir.
Por ejemplo, tenga en cuenta que su archivo de contraseña/etc/shadow
ya no es accesible porque Apache no tiene permisos y no es legible en todo el mundo. Si crea un nuevo usuario, digamos web-apps
por ejemplo, y lo agrega WSGIDaemonProcess myapp user=web-apps ...
a la configuración de Apache, entonces puede hacer que la aplicación Django sea propiedad del web-apps
usuario, con su archivo de configuración no legible en todo el mundo, como shadow
ya lo es el archivo.