Concedendo permissões de gravação ao grupo de dados www

27

Estou criando um site e parte da função é gravar dados gerados pelo usuário com php. Estou usando o nginx no Ubuntu 13.04. No momento, estou apenas testando e tudo é servido através do nginx no locahost.

Meu script php falha ao gravar o arquivo de texto (embora eu possa fazer isso manualmente) e acho que é um problema de permissão para gravar no meu diretório /var/www/example.com/public_html.

No momento eu (iain) sou proprietário deste diretório, mas parece que faria mais sentido transferir a propriedade do diretório / var / www e tudo o que está dentro dele para o usuário www-data (ou esse deveria ser o grupo?) E me adicionar a o grupo de dados www. O seguinte é o caminho certo para fazer isso?

useradd -G www-data iain
chown -R www-data:www-data /var/www/example.com
chmod 775 /var/www

Então, isso significa que qualquer pessoa no grupo www-data agora pode ler, escrever e executar em / var / www?

duff
fonte

Respostas:

52

Primeiro, useraddcria um novo usuário. Como você (iain) já existe, você deseja ligar usermod. Então isso seria:

sudo usermod -aG www-data iain
addgroup www-data

(observe os -aservidores baseados no Debian (Ubuntu incluído) que o adicionarão a esse grupo e manterão sua associação a outros grupos. Esqueça e você pertencerá apenas ao grupo www-data - pode ser uma experiência ruim se um dos Nos servidores do tipo SUSE, a opção é, em -Avez de -aGler com man usermodcuidado, para acertar.)

Segundo, você não deseja que o apache tenha acesso total à rw /var/www: essa é potencialmente uma grande violação de segurança. Como regra geral, permita apenas o que você precisa e nada mais ( princípio de menor privilégio ). Nesse caso, você precisa apache ( www-data) e você ( www-datagrupo) para escrever (e ler) /var/www/example.com/public_html, então

sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chmod -R 770 /var/www/example.com/public_html

Edit : para responder à sua pergunta original, sim, qualquer membro do www-dataagora pode ler e executar /var/www(porque o último bit de suas permissões é 5 = read + exec). Mas, como você não usou a -Ropção, isso se aplica apenas a /var/www, e não aos arquivos e subdiretórios que ela contém. Agora, se eles sabem escrever é outra questão e depende do grupo de /var/wwwque você não definiu. Eu acho que é tipicamente root:root, então não, eles (provavelmente) não podem escrever.

Editar em 22/06/2014 : adicionou uma observação de que a -aGopção é válida em servidores baseados em Debian. Aparentemente, varia com a distribuição, portanto, leia com manatenção antes de executar.

Calimo
fonte
OK eu vejo. O grupo de / var / www é realmente root: root. Obrigado pelo link. Parece mais sensato ter o hábito de conceder o necessário, em vez de procurar por conveniência. Obrigado pela orientação.
Duff
2
Ok, tentei escrever em /var/www/example.com/public_html cp -r php /var/www/example.com/public_htmle recebo permissão negada. Estou no grupo www-data que possui rwxrwx --- permissões para este diretório. Por que é isso?
Duff
Pode haver muitas coisas aqui. Por exemplo, você não podia ter permissão para ler algumas coisas no php, ou não efetuou logoff e logon após o usermod (atualizei minha resposta nesse ponto com addgroup para evitar isso e especifiquei onde usar o sudo).
Calimo 17/09/2013
De todas as respostas www-data:www-data, este resolveu o problema com as permissões ausentes. Obrigado.
Eugene