Corrigido: Apache - Permissões do PHP para criar / editar arquivos e diretórios?

1

Eu tenho um servidor em nuvens rackspace ... Fedora 13, e eu instalei o apache, mysql.

Agora, eu tenho um código (PHP) que meu aplicativo da Web usa muito. Ele funciona na minha máquina local executando o XAMPP, mas quando eu carrego esse código no meu servidor rackspace, ele não funciona:

$myFile = "textfile.txt";
$fh = fopen($myFile, 'w') or die("cant open");
$stringData = "CONTENT";
fwrite($fh, $stringData);
fclose($fh);

Código PHP realmente simples que deve funcionar. No entanto, ele não vai criar o arquivo, e se eu carregar o arquivo textfile.txt eu mesmo, e eu mesmo der as permissões para 0666, ele edita o arquivo. No entanto, isso não é o ideal, pois ainda não criará novos arquivos (ou diretórios) e chmoding cada um com a mão não é viável.

O proprietário do arquivo é root e o grupo é root

Como faço isso funcionar?

UPDATE - corrigido

Mudei o proprietário para o apache: apache fazendo: chown -R apache: apache / var / www / html

Isso pareceu funcionar:)

Existe algum problema de segurança com isso, ou é bom ter o usuário apache e o grupo apache?

Obrigado!

    
por DylanJones_md 06.04.2011 / 16:22

2 respostas

1

Dar ao usuário do Apache acesso de gravação a todo o seu DocRoot não é o ideal. Eu costumo configurar as coisas um pouco diferente.

Primeiro eu identifico um lugar onde os arquivos serão escritos - isso pode estar no DocRoot, ou pode estar em um local separado que é trazido com uma configuração de Alias no apache.

Eu crio um grupo (geralmente chamado de www-pub) e adiciono o usuário do apache a ele.

Então eu faço

chown root:www-pub <directory>

e

chmod g+rwxs <directory>

que define o bit setgid, o que significa que quaisquer arquivos ou diretórios criados sob o topo terão o mesmo grupo que o diretório pai, além de serem graváveis (e legíveis) por esse grupo.

Dessa forma, você restringe onde e o que o usuário do apache pode obter, mas ainda permite a criação de arquivos e assim por diante somente nessa área.

    
por 06.04.2011 / 16:55
0

Coloque um info.php.

echo -e "<?php \nphpinfo(); \n?>" > info.php com propriedade apropriada. Em seguida, atualize aqui para que eu possa verificar se display_errors está ativado ou não.

Ou simplesmente gire ON display_errors e ele ajudará você a solucionar problemas.

    
por 06.04.2011 / 16:30