¿Cómo configuro el DocumentRoot de Apache2 en una carpeta compartida VirtualBox "vboxsf"? (problema de permisos?)

17

Configuré el escritorio Ubuntu 11.04 de 32 bits en una VM VirtualBox con una carpeta compartida para el host. La carpeta compartida es

/media/sf_Dev/

Quiero cambiar Apache2 para que apunte DocumentRoota esa carpeta, así que edité /etc/apache2/sites-available/defaultpara reemplazar las dos rutas existentes en ese archivo a / media / sf_Dev / en lugar de / var / www y no mostrará index.html.

Cuando miro /varcon ls -lveo

drwxr-xr-x  2 root root ... www

y cuando ls -l /media/veo

drwxrwx---  1 root vboxsf ... sf_Dev

y Apache no parece ver el index.html que puse en ese directorio ( cp /var/www/index.html /media/sf_Dev/iirc)

También intenté editar envvars para hacer que el grupo sea vboxsf pero creo que hice esa parte mal.

export APACHE_RUN_GROUP=www-data

a

export APACHE_RUN_GROUP=vboxsf

¿Qué estoy haciendo mal? ¿Qué debo hacer para que Apache2 sirva los archivos de ese directorio? (técnicamente quiero servir archivos para apache, /media/sf_Dev/apache/wwwpero calculo un paso a la vez, así que si eso te ayuda a cortocircuitar las cosas, que así sea)

jcolebrand
fuente

Respuestas:

22

Probablemente sería más fácil agregar el grupo vboxsf como grupo suplementario para apache.

Ubuntu:

sudo usermod -a -G vboxsf www-data

Fedora

sudo usermod -a -G vboxsf apache

Esto lo hace por mí cuando quiero acceder a las carpetas compartidas montadas automáticamente. También es posible que desee agregar su propio nombre de usuario al grupo vboxsf para acceder a los archivos.

Fuu
fuente
¿Pero la aplicación apache se ejecuta con el nombre de usuario apache? Pensé que eso había cambiado>.>
jcolebrand
Tienes razón, mezclé el usuario de apache para fedora y ubuntu. editado :)
Fuu
1
Me ahorró un montón de tiempo jugando con el montaje manual ... ¡gracias!
xorinzor
Esta solución me lo arregló en Ubuntu 15. ¡Muchas gracias!
Ian Lewis el
3

Eso parece un problema de permisos. Necesitará leer y ejecutar el permiso /media/sf_Dev/para "otro" (el tercer grupo de bits de permiso, que actualmente no tienen permisos ---).

Por lo tanto, deberá ejecutar este comando (ya que es Ubuntu, tenga en cuenta el sudo):

sudo chmod 775 /media/sf_Dev/

Eso agregará lectura y ejecución para "otro" y dejará permisos completos para el propietario y el grupo.

También asegúrese de que el archivo de índice realmente exista en / media / sf_Dev /. (Asumiré que olvidó el sudo en el comando cp y que no se está ejecutando como root).

George Marian
fuente
1
Ahhh, pero cuando hago eso no hace los cambios que necesito. Algo sobre vboxfs no permite que se realicen esos cambios (es decir, como NFTS) ... oooh, que puede ser el problema, los archivos están originalmente alojados en NTFS (ya que es un host de Windows), así que no creo que puede hacer eso ~~ Me había olvidado de mirar el registro de errores antes de preguntar. Lo comprobaré esta noche. Sin embargo, suponga que es un error de permisos.
jcolebrand
@jcolebrand Regla # 1 de solución de problemas: ¿está enchufado? No importa que esté pensando en la utilidad a largo plazo de la respuesta y que te conozco como un tipo de DB y .NET. : P
George Marian
@jcolebrand Entonces, pregunta tonta: ¿reiniciaste Apache? sudo apache2ctl restart
George Marian
jajajajaja, es por eso que necesito ayuda, soy un tipo db y .net;) ... sí, en realidad me metí sudo suuna vez que comenzó a ser una moza para poder ir a todos los directorios y ver qué estaba "roto" ... Haré lo que Josh sugirió más tarde con el archivo PHP.
jcolebrand
1
Es posible que vboxsf no sea compatible con la configuración de permisos para la carpeta raíz del sistema de archivos y puede proporcionar opciones de montaje de modo, uid y gid para configurar los permisos de archivos a nivel mundial.
billc.cn
2

No dijiste cuál era el error específico, solo

y Apache no parece ver el index.html que puse en ese directorio

El error específico ayudaría. Puede archivar esto en Apache error_log, que generalmente se encuentra /var/log/apache2/error.logdebajo de Ubunt, pero se puede configurar a través de una ErrorLogDirectiva en su<VirtualHost>

Sin el error real, supongo que George Marian es correcto y es un error de permisos. Puede verificar para ver en qué grupo se está ejecutando Apache usando:

ps -o pid,group -o atime,comm=CMD awx | grep apache

Intenta encadenar permisos /media/sf_Dev/como él dijo.

Creo que es mejor manejar esto con una directiva Alias, ya que eso le permitirá hacer que solo ciertas partes de su DocumentRoot apunten a ubicaciones externas:

Alias /info /media/sf_Dev
<Directory /media/sf_Dev >
  Order allow,deny
  Allow from all
</Directory>

EDITAR: si el servidor Apache tiene mod_php(no FastCGI PHP) y no está usando suexec, puede determinar si Apache se está ejecutando bajo el GID adecuado (ID de grupo) con el siguiente fragmento de código PHP:

<?php

var_dump(posix_getegid());

Asegúrese de que devuelve el mismo GID que vboxsf. (Puede encontrar el GID para vboxsf en /etc/groups)

Josh
fuente
Había olvidado mirar el registro de errores antes de preguntar. Lo comprobaré esta noche. Sin embargo, suponga que es un error de permisos. Vea mi respuesta a George arriba
jcolebrand
OKAY. Entonces deberíamos centrarnos en hacer que Apache se ejecute como GID vboxsf. ¿Puedes editar y publicar las partes relevantes donde cambiaste el Group?
Josh
Edité una línea en envvars, y decía grupo, pero no estoy mirando la caja en este momento.
jcolebrand
0

Si ha configurado la carpeta compartida para que se monte automáticamente. Luego, primero debe deshabilitar el mismo y montar la carpeta compartida manualmente. Si necesita montarlo automáticamente cada vez que inicia el vm, debe agregar la entrada correspondiente dentro de su / etc / fstab. (Parece que hay algún problema al montar la carpeta compartida de vbox a través de fstab. Por lo tanto, agregar el comando mencionado a continuación dentro de /etc/rc.local me funcionó para montarlo al inicio).

Cargar carpeta compartida con usuario / grupo correcto

Por lo que puedo decir, este error se debe al propietario y al grupo de la carpeta compartida. Apache espera que los archivos pertenezcan al grupo www-data. Sin embargo, de manera predeterminada, la carpeta compartida en VirtualBox pertenece al usuario vboxsf. Agregaremos este usuario al grupo www-data. Para hacerlo, edite las propiedades del grupo en el invitado:

sudo usermod -a -G vboxsf www-data

Ahora montaremos la carpeta compartida y la asignaremos al usuario y grupo de www-data. Para verificar la identificación de usuario y grupo, puede ver el archivo / etc / passwd en la máquina invitada (cat / etc / passwd | grep 'www-data'). En el sistema operativo basado en Debian, ambos identificadores generalmente se establecen en el valor 33. Entonces, simplemente emita el siguiente comando en el invitado:

mount -t vboxsf -o rw,uid=33,gid=33 website /media/sf_website

Tenga en cuenta que el sitio web es el nombre de la carpeta compartida (como se ilustra en la captura de pantalla anterior) y / media / sf_website es donde se montará la carpeta.

Para más detalles, consulte este enlace http://jimmybonney.com/articles/configure_virtualbox_shared_folder_apache_virtual_host/

Pandurang Patil
fuente