Permissões de pasta para determinada pasta

2

Eu quero permitir apenas permissões de leitura / gravação de um usuário para uma determinada pasta, e não para nenhuma das pastas pai

assim, por exemplo

mywebsite

Pode acessar somente /var/www/html/mywebsite

E não /var/www/html/otherwebsite

Eu tentei:

chown -R www-data /var/www/html
chown -R mywebsite:www-data /var/www/html/mywebsite
chmod -R 770 /var/www/html

O problema que estou tendo é que, quando logado em mywesbite , eu não tenho permissões de leitura de escrita para a pasta mywebsite, ou qualquer outra pasta para esse assunto

O que estou fazendo de errado?

    
por Ben Shepherd 11.05.2015 / 01:29

2 respostas

5

Para conceder ao usuário mywebsite permissão de leitura / gravação em /var/www/html/mywebsite :

chown -R mywebsite /var/www/html/mywebsite 

Isso deve ser suficiente. Você não deve ter que alterar o proprietário ou as permissões do grupo, porque o proprietário do usuário deve receber permissões de leitura / gravação já.

Se você quisesse conceder uma permissão de leitura / gravação em grupo dentro dessa pasta, digamos, grupo my-group , você precisaria:

chgrp -R my-group /var/www/html/mywebsite 
chmod -R g+w /var/www/html/mywebsite

Notas importantes

  1. Não defina a propriedade (usuário ou grupo) dos arquivos em /var/www para o usuário www-data . O ponto de ter o servidor da Web executado como o usuário www-data é que essa é uma conta sem privilégios , incapaz de modificar os arquivos. Se você definir alguns arquivos para pertencer a esse usuário, estará negando essa medida de segurança. Se você precisar que o seu servidor web possa modificar certos arquivos, apenas defina a propriedade para esses arquivos em particular e seja muito cuidadoso para não permitir a execução direta (ex. Via PHP) deles. Em geral, nunca configure para que www-data possa modificar arquivos.

  2. Ao fazer um chmod recursivo, geralmente é melhor usar letras do que números, por exemplo, chmod -R g+w something em vez de chmod -R 770 something . Isso ocorre porque o primeiro é capaz de modificar apenas a permissão desejada e deixar os outros. Por padrão, os diretórios e arquivos terão permissões de "execução" diferentes - os arquivos desativados (por exemplo, 644) e os diretórios ativados (por exemplo, 755), porque essas permissões têm um significado diferente para os diretórios. Se você fizer chmod -R 770 something , os arquivos regulares terão permissões de execução ativadas. Em geral, é uma boa ideia modificar apenas o que você precisa.

    Outra coisa a notar é que 770 removeria a permissão legível para o mundo, o que impedirá que o servidor da Web (que é executado como um usuário sem privilégios) possa lê-lo. Nesse caso, também está impedindo que o usuário mywebsite consiga ver o diretório /var/www/html/mywebsite , porque você configurou o diretório pai /var/www/html para 770.

por thomasrutter 11.05.2015 / 02:04
1

O que eu fiz no Ubuntu 16.04 (para minha futura referência também):

sudo groupadd web-content                 # creates a new group 'web-content'
sudo usermod -a -G web-content myuser     # adds 'myuser' to the group
sudo usermod -a -G web-content www-data   # adds 'www-data' to the group
sudo chown -R myuser:web-content /var/www/html          # changes owner to 'myuser' and 'web-content' group
sudo find /var/www/html -type f -exec chmod 640 {} \;   # applies rw for myuser and r permissions to all files
sudo find /var/www/html -type d -exec chmod 750 {} \;   # applies rwx for myuser and rx permissions to all directories
sudo systemctl restart apache2.service    # restarts the apache web service

Por favor, deixe-me saber se isso não é seguro ou sensato.

(Nota. Eu só queria adicionar isso como um comentário adicional ao meu comentário anterior, mas ele perdeu a formatação das linhas de código quando eu fiz isso)

    
por Craig 02.12.2016 / 00:22