Vejo a partir de sua própria resposta que era um problema de permissões do SELinux devido à tentativa de executar scripts CGI a partir do Apache em um diretório não padrão.
A maneira correta de resolver o problema de permissões, mantendo o SELinux no modo 'enforcing' e, assim, melhorando a segurança do seu servidor é aplicar o contexto apropriado aos arquivos no diretório de script CGI personalizado. Se for para ser um diretório permanente, você deve alterar a política do selinux para criar automaticamente novos arquivos com as devidas permissões.
Você pode verificar a política do selinux para o diretório cgi-bin com o comando:
$ semanage fcontext --list | grep cgi-bin
(...)
/var/www/[^/]*/cgi-bin(/.*)? all files system_u:object_r:httpd_sys_script_exec_t:s0
/var/www/html/[^/]*/cgi-bin(/.*)? all files system_u:object_r:httpd_sys_script_exec_t:s0
(...)
Isso significa que todos os arquivos criados dentro dos diretórios padrão cgi-bin para o apache receberão automaticamente o tipo SELinux httpd_sys_script_exec_t
e serão executáveis pelo httpd, então é isso que seus arquivos no diretório cgi-test
devem ter também .
NOTA: os exemplos mostrados abaixo são baseados no CentOS / RHEL6, ele deve funcionar da mesma forma para o RHEL7 com o ajuste final.
Solução temporária
Você pode simplesmente alterar o contexto SELinux do seu script perl com:
$ chcon -t httpd_sys_script_exec_t /var/www/html/cgi-test/first.pl
Verifique os atributos do SELinux do arquivo com ls -laZ
:
$ ls -laZ /var/www/html/cgi-test/first.pl
-rwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 /var/www/html/cgi-test/first.pl
No entanto, se houver uma operação de reclassificação do SELinux nesse sistema de arquivos, os atributos serão revertidos para os padrões e parará de funcionar novamente.
Também terá que ser feito toda vez que um novo script CGI for adicionado.
Solução definida
Você pode alterar a política do SELinux adicionando uma regra para seu diretório CGI personalizado e todos os subdiretórios e arquivos contidos.
Isso é feito por meio do comando semanage
(disponível no pacote policycoreutils-python
RPM):
$ semanage fcontext -a -t httpd_sys_script_exec_t "/var/www/html/cgi-test(/.*)?"
Isso vai demorar um pouco para ser executado. Depois de alterar a política, todos os novos arquivos criados em seu diretório personalizado terão o novo contexto.
Para aqueles que já estão lá, você pode aplicar a política manualmente com:
$ restorecon -R -v /var/www/html/cgi-test
Você pode verificar sua regra recém-adicionada com:
$ semanage fcontext --list | grep cgi-test