Corri para isso devido à configuração do "SELinux". Se o SELinux estiver em execução, você precisa habilitar explicitamente a capacidade do Apache de gravar em arquivos. Para usar isso, você também precisa definir permissões adicionais nos diretórios e arquivos para os quais você está concedendo acesso de gravação.
Para determinar se o SELinux está ativado, execute:
sestatus
Para ativar as booleanas do SE que permitiram que o cgi gravasse em arquivos:
sudo setsebool -P allow_httpd_anon_write 1
sudo setsebool -P allow_httpd_sys_script_anon_write 1
Então, finalmente para definir o arquivo / diretório "tipo de contexto de segurança SELinux" para um arquivo / diretório de leitura / gravação "sistema" (você também pode torná-lo um tipo "público" - Google "chcon" para informações), execute isso:
sudo chcon -R -t httpd_sys_rw_content_t /some/write/path
(Mude / algum / escreva / caminho para o seu caminho.)