Dando permisão de www-data à subpasta do Dropbox?

3

Eu quero dar ao meu site a permissão para ler arquivos & pastas de uma subpasta do Dropbox.

Eu acho que adicionei as permissões corretas, mas não consigo fazer com que o usuário www-data tenha acesso às pastas.

$ cd /home/edent/Dropbox
$ ls -la
total 9944
drwxrwxr-x    6 edent edent       4096 Aug 14  2012 .
drwx------   67 edent edent      20480 Feb 27 09:11 ..
drwxrwxr-x+ 772 edent www-data  118784 Jan 29 20:45 Foo
drwxrwxr-x    4 edent edent       4096 Aug 14  2012 Bar

Todas as subpastas e arquivos de Foo também são drwxrwxr-x+ edent www-data

Então, mudo para o usuário www-data , mas ele não tem permissão para acessar esses arquivos e pastas!

$ sudo su www-data
$ groups
www-data
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ cd /home/edent/Dropbox/Foo
sh: 3: cd: can't cd to /home/edent/Dropbox/Foo

No entanto, se eu iniciar em /home/edent/Dropbox/Foo , posso acessar arquivos, mas não diretórios.

$ cd ~/Dropbox/Foo/
$ sudo su www-data
$ ls
(file listing)
$ tail example.txt
(file displayed)
$ cd Bar/
sh: 4: cd: can't cd to Bar

O que estou fazendo de errado? Tudo que eu quero é que o Apache acesse um conjunto limitado de pastas - não quero abrir todo o meu sistema de arquivos.

    
por Terence Eden 27.02.2014 / 13:04

2 respostas

4

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
    
por 27.02.2014 / 14:16
2

Isso porque seus atributos / home são

 drwx------   67 edent edent      20480 Feb 27 09:11 ..

no x para grupo ou outro, então

cd /home/.... falhará

Mas quando já está no diretório inicial do edent,

cd ./Dropbox/...

funcionaria, porque você não usa / home

editar 1

chmod o+x /home permitirá que o cd funcione.

Aqui está a documentação do Apache para configurar um Alias do Diretório

    
por 27.02.2014 / 13:22