
Tengo una aplicación web en una máquina de alojamiento compartido Linux. Digamos que tengo un .htpasswd
archivo, algunas configuraciones que almacenan una contraseña de base de datos y, en general, no quiero que la gente husmee en mi código fuente en busca de vulnerabilidades.
El servidor web (Apache) necesita acceso de lectura (y escritura en algunos casos) a los archivos anteriores. Sin embargo, no quiero que otras personas en el mismo host compartido tengan acceso.
Nunca he entendido del todo cómo se supone que funciona esto. La preguntaaquíes similar, pero parece apuntar más a evitar que la aplicación web aloje accidentalmente un archivo de contraseñas.
AFAIK, todo lo que tengo para trabajar son los permisos básicos de Linux. En un servidor, se espera que otorgue permisos a "otros" para Apache. Luego, eliminar los permisos del grupo en el que se encuentran todos los demás usuarios les niega el acceso. Esto parece bastante indirecto. En otro servidor hay un nobody
grupo configurado public_html
con solo permisos de grupo establecidos.
Una preocupación es que si el usuario de Apache tiene acceso a mis archivos, se podría escribir y ejecutar un script simple para que otro usuario obtenga acceso:
<?php
header("Content-Type: text/plain");
include $_GET['f'];
?>
TLDR: necesito que Apache tenga acceso a los archivos fuente y las contraseñas, pero no a otros usuarios en la misma máquina (excepto los administradores).
¿Qué es una configuración común?
Preguntas relacionadas:
- ¿Cómo permitir que Apache acceda a un archivo pero evitar que otros lo vean?
- https://unix.stackexchange.com/questions/30879/what-user-should-apache-and-php-be-running-as-what-permissions-should-var-www
- https://askubuntu.com/questions/26848/permissions-issue-how-can-apache-access-files-in-my-home-directory
Respuesta1
Cree un grupo, agregue apache/www-data al grupo. Entonces:
chown -R apache:nombre de grupo /var/www/mywebapp/ && \ chmod -R 640 /var/www/mywebapp
Esto otorgará al propietario permisos de lectura y escritura (6) y al grupo de lectura (4) para la carpeta y todos los subdirectorios y archivos. El usuario de Apache podrá acceder a los archivos, al igual que el propietario, pero otros no podrán hacerlo. Debe asegurarse de que no puedan consultar al usuario de Apache.
Utilice bloques de directorio en la configuración de vhost para restringir el acceso a nivel de carpeta. http://httpd.apache.org/docs/2.0/misc/security_tips.html#Ver Proteger archivos del servidor http://www.anchor.com.au/hosting/dedicated/Security_Hardening_of_an_Apache_Virtual_Host