Apache linux y DocumentRoot

Iniciado por Becerra, 7 Noviembre 2021, 23:52 PM

0 Miembros y 1 Visitante están viendo este tema.

Becerra

Hola

Tengo instalado Apache en una distribución Manjaro, por defecto la capeta DocumentRoot apunta a /srv/http, en la cual no tengo permisos de escritura.

Estaba tratando de configurar un VirtualHost hacia una carpeta en mi home, pero al tratar de acceder al contenido, apache me tira un error de acceso denegado. Supongo que algún tema de permisos. Creo haber leído por ahí que la carpeta en la que esté el proyecto y sus carpetas padres tienen que tener permisos 755, también puedo cambiar los permisos de la carpeta /srv/http y así tener acceso y poder escribir en ella.

Ahora bien, ¿que es lo correcto hacer? No quiero cambiar permisos "indiscriminadamente" no vaya a ser que tenga problemas por otro lado. No sé si hay otra solución más adecuada.

Un saludo
Buenas preguntas obtienen mejores respuestas

MinusFour

#1
750 es mejor así no expones tu directorio a los demás usuarios. Lo que la gente hace es cambiar el grupo del directorio al grupo que usa tu usuario de apache (www-data por ejemplo). También usan el SETGID al document root, de esa forma todos los archivos que creas acaban siendo parte del grupo de apache (que mientras tengan r-x no deberían tener problemas accediéndolo).

Hay muchas maneras de trabajar los permisos, dependiendo de la situación que estés trabajando.

Becerra

#2
Hola

Soy muy torpe con la terminal de linux y me pierdo mucho. Si no me equivoco, creo que el problema es que la carpeta de usuario tiene permisos 700, por lo tanto, nadie puede acceder.

Creo que lo que voy a hacer es cambiar los permisos a /srv/http para que yo pueda acceder, así no toco
mi carpeta de usuario que me da más miedo.

EDITO: al final lo hice de otra forma, creé un nuevo usuario, añadí mi usuario y apache a su grupo, modifiqué los permisos de las carpetas de ese usuario y ahora sí, ya puedo acceder. No sé si será la forma correcta, pero de momento me vale, así no toco los permisos de mi home ni de la carpeta /srv/http.

No puedo creer que me haya costado tanto esto  :-(

Un saludo
Buenas preguntas obtienen mejores respuestas

MinusFour

Cita de: Becerra en  8 Noviembre 2021, 21:35 PM
EDITO: al final lo hice de otra forma, creé un nuevo usuario, añadí mi usuario y apache a su grupo, modifiqué los permisos de las carpetas de ese usuario y ahora sí, ya puedo acceder. No sé si será la forma correcta, pero de momento me vale, así no toco los permisos de mi home ni de la carpeta /srv/http.

No puedo creer que me haya costado tanto esto  :-(

Un saludo

Eh, personalmente yo no lo haría. Yo no quisiera que un servidor tuviera acceso a todo mi home. En primer lugar porque no lo necesita. En segundo lugar porque no debe poder leer mis otros archivos (por ejemplo, mis llaves ssh).

Encima, mi home es 700, así que ni siquiera el grupo del directorio tiene acceso a mi home.

Becerra

Hola

Esto es más complicado de lo que debería ser :-\ Vale que para un proyecto terminado y en funcionamiento haya un mínimo de seguridad, pero para entornos de desarrollo, como es mi caso, es un engorro todo esto.

Cita de: MinusFour en  9 Noviembre 2021, 03:51 AM
Eh, personalmente yo no lo haría. Yo no quisiera que un servidor tuviera acceso a todo mi home. En primer lugar porque no lo necesita.

Realmente no es mi home, es el home de un usuario nuevo que creé y tan solo contiene una carpeta en la que alojar los archivos .php

El DocumentRoot del servidor lo apunté a /home/nuevo_usuario/proyecto, pero yo lo hago todo desde mi usuario normal.

Cita de: MinusFour en  9 Noviembre 2021, 03:51 AM
En segundo lugar porque no debe poder leer mis otros archivos (por ejemplo, mis llaves ssh).

Pues eso no lo pensé (ni comprobé, de momento solo tuve tiempo para llamar a phpinfo() ::)), la verdad que el proyecto accederá a una base de datos (PostgreSQL) no sé si habrá algún problema, tengo que comprobarlo.

Menudo lío.... me veo siguiendo con el proyecto en el otro ordenador que tengo con windows....

Un saludo
Buenas preguntas obtienen mejores respuestas

MinusFour

Realmente en muchos hostings compartidos eso es lo que se hacia. Cada usuario tiene su directorio home y ahí iba todo el código de cada quien. Apache se configura para correr los archivos bajo diferentes usuarios (de forma que un usuario A no tenga acceso a los archivos del usuario B).

Si tienes un entorno de producción y solo usas tu carpeta home para mantener los archivos del servidor pues no pasa nada. Pero en desarrollo o testing, donde probablemente estés usando un usuario que tenga otros archivos (documentos, fotos, llaves, etc) pues yo no le daría permiso a un servidor web para que pudiera ver todo esto. Simplemente no es necesario. Igual le puedes poner 777 a todo tu home y quizás no pase nada pero nuevamente, no es necesario.

Becerra

Hola

Cita de: MinusFour en  9 Noviembre 2021, 22:57 PM
... en desarrollo o testing, donde probablemente estés usando un usuario que tenga otros archivos (documentos, fotos, llaves, etc) pues yo no le daría permiso a un servidor web para que pudiera ver todo esto....

Entonces, ¿cómo harías? Teniendo en cuenta que es una instalación solo para desarrollo, cuando esté terminado irá a un servidor en una pequeña red local.

Un saludo
Buenas preguntas obtienen mejores respuestas

MinusFour

Yo usaría ese directorio de /srv/http.

Añadiría un nuevo subdirectorio para el sitio (e.g. desarrollo/localhost/dev, etc) y cambiaría el dueño del directorio por mi usuario.

Código (bash) [Seleccionar]

cd /srv/http
sudo mkdir dev
sudo chown tuusuario dev
chgrp grupoDeApache dev # e.g. www-data
chmod 750 dev
chmod g+s dev


Y listo, el servidor ahora puede leer los archivos que tu creas sin ningún problema y tu directorio home está a salvo (tienes que quitar al usuario de apache del grupo de tu usuario).

Becerra

Hola

Pues me ha gustado más esta forma, muchas gracias.

Un saludo
Buenas preguntas obtienen mejores respuestas