PHP exec () tem erro de permissão de escrita apesar do privilégio de gravação

1

Estou executando o 7.0.28-0ubuntu0.16.04.1, sob o LAMP, em dois Ubuntu 16.04. O código C, para abrir o arquivo para escrita é:

 #define ERROR_OPENING_FILE -4

 fprintf(stderr, "Open output file: /var/www/dropbox/candidates_results.lst.");
 if (!(fpOutputFile=fopen("/var/www/dropbox/candidates_results.lst", "w"))){
       perror("Error opening output file: ");
       throw ERROR_OPENING_FILE;
 }

Eu chamo o executável, do PHP, com o seguinte.

    $program="/var/www/executables/programName ";
    $inFile="/var/www/dropbox/candidates.lst";
    $str=$program . " -i " . $inFile;
    $Result=exec($str, $output, $return);

Após atualizar a página da web, eu vou para o shell do linux e digite

cat /var/log/apache2/error.log

Isso retorna

Open output file: /var/www/dropbox/candidates_results.lst.
Error opening output file: : Permission denied
terminate called after throwing an instance of 'int'
Aborted (core dumped)

Quando eu entro

ls -l /var/www/dropbox/candidates_results.lst

Eu obtenho

-rw-rw-r-- 1 ubuntu www 107 May 20 11:40 /var/www/dropbox/candidates_results.lst   

O problema desaparece se eu entrar

sudo chmod o+w /var/www/dropbox/candidates_results.lst

para que a longa listagem se torne

-rw-rw-rw- 1 ubuntu www 107 May 20 11:40 /var/www/dropbox/candidates_results.lst

No entanto, o www-data é um membro do grupo www

 $ grep '^www' /etc/group
 www-data:x:33:
 www:x:1001:ubuntu

Parece que o www-data deve ter permissões de grupo. Não vejo por que recebo o erro de permissão de gravação depois de inserir

sudo chmod o-w /var/www/dropbox/candidates_results.lst
    
por OtagoHarbour 20.05.2018 / 14:33

1 resposta

3
$ grep '^www' /etc/group
  www-data:x:33:
  www:x:1001:ubuntu

Isso mostra claramente que www-data não é membro do grupo www. Apenas ubuntu é membro de www group.

Executar

sudo usermod -a -G www www-data

para adicionar www-data a www -group e reinicie o servidor da Web.

    
por vidarlo 20.05.2018 / 15:20