Problema de permissões do Apache2

2

Alterei meu DocumentRoot para /home/user/www . Para conseguir isso, acabei de alterar as duas ocorrências do caminho em / etc / apache2 / sites-available / default.

As permissões de / home / user / www são 0774. Eu adicionei o usuário www-data ao grupo do meu usuário e o proprietário de /home/user/www é meu próprio usuário e grupo (usuário: usuário).

Eu fiz isso por:

sudo chmod -R 0774 www
sudo chown -R user:user www
sudo adduser www-data user

O problema é que o Apache não pode gravar neste diretório. Ele pode escrever somente se eu definir www-data como proprietário, mas se eu fizer isso, não posso escrever no diretório.

Eu testei as permissões com:

sudo -u www-data ls /home/user/www
sudo -u www-data cat /home/user/www/some-file

e funciona.

Mas o Wordpress que tenho em www não pode excluir ou criar arquivos. Alguma idéia?

    
por barakuda28 05.10.2013 / 15:34

3 respostas

2

Você teria ficado melhor com o diretório www em / var / www, com o proprietário www-data e o grupo www-data, e adicionando seu usuário ao grupo www-data .

Primeiro, altere o DocumentRoot, etc, de volta para / var / www na configuração do apache.

O diretório / var / www (e todos os subdiretórios) deve ser setgid, para que arquivos e diretórios sejam criados com o grupo www-data.

Todos os itens a seguir devem ser executados como root ou com sudo:

mkdir -p /var/www

se houver arquivos em / home / user / www que você deseja manter, mova-os para / var / www agora com:

mv /home/user/www/* /var/www/

Agora corrija as permissões e a propriedade do diretório / var / www.

chown -R www-data:www-data /var/www
chmod -R 775 /var/www
find /var/www -type d -print0 | xargs -0r chmod g+s
adduser user www-data

Na próxima vez que o 'usuário' logar (ou executar newgrp www-data ), ele deve ter permissão de gravação em / var / www

BTW, se você quiser facilitar para o 'usuário' encontrar os arquivos da web, basta criar um link simbólico em seu diretório pessoal:

 ln -s /var/www/ /home/user/
    
por 05.10.2013 / 21:48
0

Para acesso de leitura / gravação, também é importante ter permissões de execução para diretórios pai (no seu caso / home / user). Verifique this answer.

Você está usando a raiz em / home / user / www (que se enquadra no diretório inicial user e nos diretórios home padrão com 700 permissões no momento da criação.Tente criar a raiz para o apache em outro lugar Por exemplo, /apache/www

    
por 05.10.2013 / 16:19
0

Se a sua distro faz uso de algo como o SELinux ou o App Armor, você provavelmente precisará conceder acesso ao processo do Apache para que seja "permitido" acessar a área do diretório inicial.

SELinux Booleans

Você pode usar este comando para ver a lista de booleanos relacionados a httpd (Apache).

$/usr/sbin/getsebool -a | grep httpd
allow_httpd_anon_write --> off
allow_httpd_bugzilla_script_anon_write --> off
allow_httpd_mod_auth_pam --> off
allow_httpd_nagios_script_anon_write --> off
allow_httpd_squid_script_anon_write --> off
allow_httpd_sys_script_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_network_connect --> off
httpd_can_network_connect_db --> off
httpd_can_network_relay --> off
httpd_disable_trans --> off
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> on
httpd_rotatelogs_disable_trans --> off
httpd_ssi_exec --> off
httpd_suexec_disable_trans --> off
httpd_tty_comm --> on
httpd_unified --> on

Esse booleano precisa ser ativado:

httpd_enable_homedirs --> on

Rótulos de Contexto

Além disso, você precisa adicionar um contexto do SELinux (um rótulo) a cada diretório, o que essencialmente informa ao SELinux que esse diretório ou arquivo pode ser acessado por qualquer serviço / daemon associado a esse rótulo. O Apache (httpd) usa este rótulo:

httpd_sys_content_t:s0

Portanto, você precisa executar este comando, chcon para adicionar esse rótulo aos arquivos / diretórios em / home. Apenas adicione o rótulo ao diretório em que o Apache servirá os arquivos.

$ chcon -R -t httpd_sys_content_t /home/user/www

Você pode confirmar que isso funcionou usando a opção -Z para ls , que mostra os rótulos de contexto.

$ ls -Z /var/www/manual/
drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t:s0 mod

Referências

por 05.10.2013 / 17:28