Execute o seguinte comando como root e tente novamente:
# setsebool -P allow_execstack 1
Você também pode ativar a pilha executável somente por oci8.so
com:
# execstack -c /usr/lib64/php/modules/oci8.so
Eu tenho tentado adicionar 2 extensões PHP a um servidor Linux do CentOS 6.0 recém-instalado, mas recebo as mensagens de erro em / var / log / httpd / error_log:
[notice] SELinux policy enabled; httpd running as context unconfined_u:system_r:httpd_t:s0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/gdchart.so' - /usr/lib64/php/modules/gdchart.so: undefined symbol: php_gd_gdFontMediumBold in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/oci8.so' - libnnz11.so: cannot enable executable stack as shared object requires: Permission denied in Unknown on line 0
[notice] Apache/2.2.15 (Unix) DAV/2 PHP/5.3.2 mod_ssl/2.2.15 OpenSSL/1.0.0-fips mod_wsgi/3.2 Python/2.6.5 mod_perl/2.0.4 Perl/v5.10.1 configured -- resuming normal operations
eu corri
# chcon system_u:object_r:lib_t:s0 /usr/lib64/php/modules/oci8.so
# chcon system_u:object_r:lib_t:s0 /usr/lib64/php/modules/gdchart.so
# ls -alZ /usr/lib64/php/modules/
-rwxr-xr-x. root root system_u:object_r:lib_t:s0 curl.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0 dom.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0 fileinfo.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0 gdchart.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0 gd.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0 json.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0 oci8.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0 pdo_pgsql.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0 pdo.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0 pdo_sqlite.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0 pgsql.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0 phar.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0 sqlite3.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0 wddx.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0 xmlreader.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0 xmlwriter.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0 xsl.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0 zip.so
Veja como eu compilei os dois módulos:
1) Para oci8.so - setup /etc/tnsnames.ora e depois:
# rpm -Uvh oracle-instantclient11.2-basic-11.2.0.2.0.x86_64.rpm
# rpm -Uvh oracle-instantclient11.2-devel-11.2.0.2.0.x86_64.rpm
# pecl install oci8 (entered: instantclient,/usr/lib/oracle/11.2/client64/lib there)
2) Para gdchart.so:
# yum install gd-devel php-devel gcc
# wget http://pecl.php.net/get/gdchart-0.2.0.tgz
# tar xvfz $!
# cd $!
# ./phpize
# ./configure
# make && make install
Alguém por favor tem uma ideia, o que estou perdendo?
Usando as duas libs (Oracle instant clicent e GDChart) da linha de comando, tudo bem.
ATUALIZAÇÃO:
Quando eu desligo o SELinux colocando SELINUX = permissivo em / etc / selinux / config e reboot, o oci8.so carrega, mas gdchart.so ainda tem um bug .
Então, eu acho que minha pergunta é: como habilitar o SELinux de volta e ainda usar o oci8.so? Por favor, compartilhe sua experiência aqui - se você já luta com Oracle + PHP + CentOS / RHEL 6.
UPDATE 2:
Ao iniciar o Apache, eu vejo em /var/log/audit/audit.log:
type=AVC msg=audit(1316698464.300:51213): avc: denied { execstack } for pid=2833 comm="httpd" scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:system_r:httpd_t:s0 tclass=process
type=SYSCALL msg=audit(1316698464.300:51213): arch=c000003e syscall=10 success=yes exit=0 a0=7fff95f4b000 a1=1000 a2=1000007 a3=7f5e22611000 items=0 ppid=1 pid=2833 auid=10116 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=34 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
Talvez seja uma notícia antiga, mas eu tenho o PHP / 5.3.3 com o OCI8 (Oracle Instant Client 10.2.0.5) trabalhando no RHEL6.3 com o SELinux ativado fazendo isso:
chcon system_u:object_r:lib_t:s0 /usr/lib64/php/modules/oci8.so
execstack -c /usr/lib/oracle/<VERSION>/client64/lib/*.so
chcon -t texrel_shlib_t /usr/lib/oracle/<VERSION>/client64/lib/*.so
setsebool -P httpd_can_network_connect_db 1
Eu usei uma combinação de audit2allow -w -a
e dicas de este artigo para chegar a esta conclusão bem-sucedida.
No lançamento do CentosOS 6.4 (Final), problemas semelhantes. Nossa solução parecia ser booleano 'httpd_execmem'
Após aplicar sem sucesso todas as suas recomendações úteis, continue a falhar na carga do oci8 no Apache. Então, nós conseguimos "auditar" o resgate!
$> echo "type=AVC msg=audit(1384944299.002:75458): avc: denied { execstack } for pid=6356 comm="httpd" scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:system_r:httpd_t:s0 tclass=process" | audit2allow
Obtendo a saída: "This avc can be allowed using the boolean 'httpd_execmem'"
Finalmente, a solução até agora: $> setsebool httpd_execmem 1