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