Não é possível usar a pasta compartilhada do VirtualBox como raiz do documento do Apache


3

Tendo pulado várias centenas de aros, finalmente consegui que o Centos 5.8 montasse uma pasta compartilhada do VirtualBox (que é não read-only), que agora aparece em:

/media/sf_sites

Esta é uma pasta na minha máquina host (Mac OS X 10.8.2) contendo sites.

O diretório e suas subpastas são todos de propriedade do usuário root e grupo vboxsf

Eu adicionei o usuário apache para o grupo vboxsf

Contudo httpd não me permite usar minha pasta compartilhada como raiz do documento. Meu vhost está configurado como:

DocumentRoot /media/sf_sites/mysite/public

No Apache reiniciar eu recebo isso:

Starting httpd: Warning: DocumentRoot [/media/sf_sites/mysite/public] does not exist
                                                           [  OK  ]

E, sem surpresa, ao visualizar o site no meu navegador, recebo um erro 403. ("Você não tem permissão para acessar / neste servidor")

Alguma idéia se é possível fazer isso funcionar?

Eu quero desenvolver no meu Mac, mas usar o Linux no VirtualBox como meu servidor de desenvolvimento. Existe uma maneira alternativa de fazer isso?

Respostas:


1

Crie um ponto de montagem no seu Linux, instale sshfs se você não tem ainda.

Faça o seguinte no CentOS

sudo su - apache
sshfs root@< your OS X IP >:< web folder path > < mount point >

Por exemplo:

  • OS X IP: 192.168.0.10
  • Caminho da pasta da Web do OS X: / Users / me / webOSX
  • Ponto de montagem do CentOS: / var / www / webLinux

O comando sshfs será: sshfs root@192.168.0.10: / Users / me / webOSX / var / www / webLinux


Isso monta com sucesso, mas mesmo problema: DocumentRoot [/var/www/sites/mysite/public] does not exist
Adrian

Atualização: conseguiu trabalhar com user_allow_other definido em /etc/fuse.conf e sshfs -o allow_other me@192.168.1.103:/Users/me/Sites /var/www/sites. Mas o Apache lançando erros "inesperados no final do arquivo" em error_log.
Adrian

@Abe, você sudo su - apache antes de fazer o monte sshfs?
John Siu

Sim eu fiz. Parecia estar funcionando basicamente, mas o PHP está tendo problemas com comprimentos de arquivo (final inesperado de erros de arquivo). Chegando à conclusão de que o código de back-end é melhor local no servidor!
Adrian

1

Isso porque o contexto de segurança do SELinux da pasta compartilhada não permite que o Apache o use. Como o contexto de segurança das pastas compartilhadas VBox não pode ser alterado, você pode modificar a política de segurança do SELinux para permitir que o Apache trabalhe com o contexto. É semelhante a abrir uma porta no firewall para expor uma determinada porta a um aplicativo. NÃO é uma boa ideia desligar o SELinux como outros sugeriram, pois isso deixa o servidor mais vulnerável.

Primeiro, certifique-se de que seu usuário do apache faça parte do grupo que possui a pasta compartilhada, se não for, você pode adicioná-lo com um comando que seria assim (os nomes de usuário / grupo podem ser diferentes em seu sistema):

usermod -aG vboxsf apache

Então você pode usar audit2allow para gerar uma nova política de segurança para solucionar seus problemas. Aqui está um bom tutorial .

Se você é preguiçoso e só quer permitir acesso de leitura Apache às suas pastas compartilhadas VBox, provavelmente você pode adaptar o seguinte my_httpd_t.te arquivo de política e use os comandos incluídos para aplicá-lo em seu sistema.

module my_httpd_t 1.0;

require {
        type httpd_t;
        type vmblock_t;
        class dir read;
        class file { read getattr open };
}

#============= httpd_t ==============
allow httpd_t vmblock_t:dir read;
allow httpd_t vmblock_t:file { getattr open read };

# Generated by audit2allow

# To apply this policy:
## checkmodule -M -m -o my_httpd_t.mod my_httpd_t.te
## semodule_package -o my_httpd_t.pp -m my_httpd_t.mod
## semodule -i my_httpd_t.pp
## systemctl restart httpd

0

Eu nunca resolvi os problemas do 'fim de arquivo inesperado', mas depois Vagabundo veio junto e isso faz todo o trabalho duro para você.


-1

Você precisa desativar o SELinux se precisar definir uma pasta compartilhada como DocumentRoot do seu servidor Apache.

Vamos para /etc/selinux/config e atualize-o para ler:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#       targeted - Targeted processes are protected,
#       mls - Multi Level Security protection.
SELINUXTYPE=targeted

Em seguida, reinicie sua máquina virtual. Isso funciona com o vagrant também.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.