Isso ocorre porque as permissões são verificadas em todos os níveis para chegar a um diretório, não apenas ao diretório de destino. Você pode conceder a um usuário ou grupo permissão para passar por um diretório sem poder acessar o que está dentro dele, definindo o bit de execução para esse usuário ou grupo sem definir os bits de leitura ou gravação.
Por exemplo:
chmod 710 /home/$USER
chmod 710 /home/edent/Dropbox
chmod 750 /home/edent/Dropbox/Foo
Mas para que isso funcione, você precisará que o grupo para todos esses níveis seja www-data
. Isso é um pouco desordenado, já que ter que alterar o grupo do seu diretório home apenas para um cenário específico pode entrar em conflito com outras coisas que você deseja fazer mais tarde.
Se você tem raiz no host, uma solução mais ordenada é usar uma montagem de ligação. Em /etc/fstab
adicione algo como:
/home/edent/Dropbox/foo /var/www/html/foo none bind 0 0
Isso deve fazer com que o diretório no Dropbox apareça no diretório /var/www/html
, irrelevante de qualquer outra permissão do sistema de arquivos. Agora você só precisa se preocupar com permissões de arquivo dentro desse diretório e não na hierarquia acima disso. Você pode pensar nisso como um super link simbólico que pode abranger os sistemas de arquivos.
Por exemplo, faço uso disso em uma máquina com uma pequena unidade SSD para /
e todos os meus arquivos de mídia grandes estão em um disco maior separado. Eu faço com que pareça que os arquivos de mídia estão no meu diretório pessoal:
/media/bigdrive/media /home/me/media none bind 0 0