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 www
nã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 chcon
para 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 -Z
mudanç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