Problema de permissões do Apache2

Problema de permissões do Apache2

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

As permissões de/home/user/www são 0774. Adicionei o usuário www-data ao grupo do meu usuário e o proprietário /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 só poderá escrever se eu definir www-data como proprietário, mas se eu fizer isso, não poderei 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 wwwnão consegue excluir ou criar arquivos. Alguma ideia?

Responder1

Você teria ficado melhor com o diretório www em /var/www, com o proprietário www-data e o grupo www-data, eadicionando 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 nele contidos) 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 algum arquivo em /home/user/www que você deseja manter, mova-o para /var/www agora com:

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

Agora corrija as permissões e 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' fizer login (ou executar newgrp www-data), ele deverá ter permissão de gravação em /var/www

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

 ln -s /var/www/ /home/user/

Responder2

Para acesso de leitura/gravação, é importante ter permissões de execução também nos diretórios pais (no seu caso/home/user). Verificaresseresponder.

Você está usando a raiz em /home/user/www (que se enquadra emUsuáriosO diretório inicial e os diretórios iniciais têm como padrão 700 permissões no momento da criação. Tente criar a raiz do Apache em outro lugar, por exemplo./apache/www

Responder3

Se sua distribuição usa algo como SELinux ou App Armor, você provavelmente precisará conceder acesso ao processo Apache para que ele tenha "permissão" de acessar a área do diretório inicial.

SELinux Booleanos

Você pode usar este comando para ver a lista de booleanos relacionados ao 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

Este booleano precisa ser habilitado:

httpd_enable_homedirs --> on

Rótulos de contexto

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

httpd_sys_content_t:s0

Portanto, você precisa executar este comando chconpara adicionar esse rótulo aos arquivos/diretórios em/home. Adicione apenas o rótulo ao diretório de onde o Apache servirá os arquivos.

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

Você pode confirmar se isso funcionou usando a -Zmudança 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

informação relacionada