Dê acesso a arquivos / var / www para www-data e meu usuário?

3

Qualquer pasta que eu queira que meu código php possa salvar em ou qualquer arquivo que eu queira que seja capaz de modificar, deve pertencer a www-data. Isso é irritante porque tudo que eu crio ou quero editar sem sudo é de propriedade do meu usuário.

Por outro lado, o servidor da minha escola mostra que tudo pertence ao usuário, mas problemas como esse nunca acontecem. O www-data parece não ter problemas para salvar ou modificar as coisas, apesar de não ser proprietário.

Como faço para que meu site / var / www funcione assim, onde posso manter a propriedade de tudo, mas não atrapalhar o acesso do www-data?

    
por Stoopkid 21.02.2016 / 01:13

2 respostas

1

Uma solução que geralmente uso em servidores da web está usando ACLs. Basicamente, isso significa usar conjuntos adicionais de permissões, além do sistema usual de grupo de usuários. Eu acho isso particularmente útil quando estou configurando acesso PHP restrito (por exemplo, usando suPHP).

Para manter a propriedade dos meus arquivos, tenho certeza de que eles pertencem a mim:

$ chown me:me /var/www -R

Em seguida, dou www-data acesso de leitura em todos os lugares (e permissão de acesso em diretórios; configurações mais refinadas podem ser desejáveis às vezes).

$ setfacl -Rdm 'u:www-data:r-X' /var/www
$ setfacl -Rm 'u:www-data:r-X' /var/www

Eu também dou acesso de gravação ao Apache onde quer que eu escreva coisas. Por exemplo:

$ setfacl -Rdm 'u:www-data:rwX' /var/www/uploads
$ setfacl -Rm 'u:www-data:rwX' /var/www/uploads

Observe que, para usar as ACLs, você precisa certificar-se de montar o sistema de arquivos com a opção acl . Isso é feito em /etc/fstab :

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/sdxy       /var            ext4    defaults,acl    0       2

(assumindo que /var esteja em uma partição diferente, caso contrário, veja / )

A propósito, em alguns sistemas, a opção acl é configurada por padrão. Por exemplo :

As of Ubuntu 14.04 and for ext4, the above is not required as acl are already default.

Você pode verificar se as ACLs estão ativadas em um sistema de arquivos usando tune2fs (assumindo um ext * FS):

# tune2fs -l /dev/sdxy | grep acl
Default mount options: acl ...

Para mais informações sobre setfacl , dê uma olhada aqui .

    
por 21.02.2016 / 03:43
0

A coisa mais simples que você poderia fazer (em uma máquina que você controla) seria

  • adicione o ID do grupo de www-data aos grupos da sua conta e torne as pastas editáveis por grupo, por exemplo, chmod 775 .

  • Como alternativa, você pode alterar o DocumentRoot para apontar para um diretório que você possui e ter assegurado que www-data possa ler (e executar scripts de).

Nenhum destes seria uma solução satisfatória para um servidor real (não é seguro o suficiente).

    
por 21.02.2016 / 01:21