Permissões de arquivo padrão para o usuário php www-data

8

Eu tenho um php instalado na minha máquina ubuntu. A raiz da web é/var/www

Defino as permissões para esta pasta da seguinte maneira:

sudo chown -R ftpuser: www-data / var / www

ftpuser é o usuário que eu configuro para que eu possa ftp para / var / www de outra máquina na rede. www-data é o usuário que o php usa. Eu verifiquei usando whoamiphp.

Sempre que eu enviar por FTP um novo arquivo para a máquina, o grupo não tem permissões para o arquivo. Então, quando eu tento acessá-lo no meu navegador via machine-name/new-file.php, me disseram que a permissão foi negada e eu tenho que ir e chmodo novo arquivo.

Gostaria de saber se existe uma maneira de eu padrão do usuário / grupo www-data ter permissões de acesso a novos arquivos para que eu não tenha que manter o chmod a cada novo arquivo?

JD Isaacks
fonte

Respostas:

6

Você poderia usar o ACL. Para configurar o ACL para o Ubuntu 10.10, primeiro monte os sistemas de arquivos com a opção acl em / etc / fstab.

sudo vim /etc/fstab

UUID = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / padrões ext4, acl 0 1

sudo mount -o remount,acl /

Em seguida, faça um grupo ao qual um usuário possa pertencer para essa finalidade.

sudo groupadd developers
sudo usermod -a -G developers $username

O usuário precisa sair e entrar novamente para se tornar um membro do grupo de desenvolvedores.

Obviamente, não faça isso se você tiver conteúdo no diretório / var / www que deseja, mas apenas para ilustrar a configuração para iniciar:

sudo rm -rf /var/www
sudo mkdir -p /var/www/public
sudo chown -R root.developers /var/www/public
sudo chmod 0775 /var/www/public
sudo chmod g+s /var/www/public
sudo setfacl -d -m u::rwx,g::rwx,o::r-x /var/www/public

Em seguida, substitua as referências a "/ var / www" por "/ var / www / public" em um arquivo de configuração e recarregue.

sudo vim /etc/apache2/sites-enabled/000-default
sudo /etc/init.d/apache2 reload

Se quisermos restringir a exclusão e renomeação de todos, exceto o usuário que criou o arquivo:

sudo chmod +t /var/www/public

Dessa forma, se queremos criar diretórios para estruturas que existem fora da raiz do documento Apache ou talvez criar diretórios graváveis ​​no servidor, ainda é fácil.

Diretório de logs graváveis ​​pelo Apache:

sudo mkdir /var/www/logs
sudo chgrp www-data /var/www/logs
sudo chmod 0770 /var/www/logs

Diretório de biblioteca legível pelo Apache:

sudo mkdir /var/www/lib
sudo chgrp www-data /var/www/lib
sudo chmod 0750 /var/www/lib

fonte
Isso funcionou perfeitamente para mim, mas eu estaria interessado se você pudesse explicar o que os comandos chmod g+se setfaclfizeram (e seus parâmetros).
7894 Greg
4

Tenho certeza que você já resolveu isso, então é para qualquer pessoa com solicitação semelhante

execute o comando "alterar propriedade" na sua pasta webroot:

sudo chown manny -R www

Isso fará com que o proprietário substitua "manny" pelo seu nome de usuário, permitindo que você escreva / leia na pasta www

Manny
fonte
1

Se o seu servidor da web não consegue ler os arquivos, é muito provável que as permissões new-file.phpsejam algo como 600 (leitura e gravação para o proprietário). Procure uma configuração umask no seu aplicativo FTP e verifique se é algo como 007.

Se seu aplicativo da web precisar chmod os arquivos (ou outras operações que só podem ser executadas pelo proprietário do arquivo), você precisará de uma outra abordagem. Se você estiver usando o Apache, considere usar o itk MPM . Com esse módulo, você pode fazer o Apache executar / abrir os arquivos usando o mesmo usuário que "ftpuser". Se você precisar de mais informações sobre este assunto, adicione um comentário.

Lekensteyn
fonte