Назад | Перейти на главную страницу

CentOS 6: PHP не может загрузить скомпилированные мной gdchart.so и oci8.so

Я пытался добавить 2 расширения PHP к недавно установленному серверу CentOS 6.0 Linux, но получаю сообщения об ошибках в / 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

Я бежал

# 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

Вот как я скомпилировал оба модуля:

1) Для oci8.so - настройте /etc/tnsnames.ora, а затем:

# 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) Для 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

У кого-нибудь есть идея, что мне не хватает?

Использование обеих библиотек (Oracle Instant clicent и GDChart) из командной строки работает нормально.

ОБНОВИТЬ:

Когда я выключаю SELinux, ставя SELINUX = разрешающий в / etc / selinux / config и перезагрузитесь, oci8.so загружается, но gdchart.so все еще есть ошибка.

Итак, я предполагаю, что мой вопрос: как снова включить SELinux и по-прежнему использовать oci8.so? Поделитесь здесь своим опытом - если вы уже боретесь с Oracle + PHP + CentOS / RHEL 6.

ОБНОВЛЕНИЕ 2:

При запуске Apache я вижу в /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)

Выполните следующую команду от имени пользователя root и повторите попытку:

# setsebool -P allow_execstack 1

Вы также можете включить исполняемый стек всего за oci8.so с участием:

# execstack -c /usr/lib64/php/modules/oci8.so

Возможно, это старые новости, но я получил PHP / 5.3.3 с OCI8 (мгновенный клиент Oracle 10.2.0.5), работающий на RHEL6.3 с включенным SELinux, выполнив следующие действия:

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

Я использовал комбинацию audit2allow -w -a и намеки от Эта статья чтобы прийти к такому успешному заключению.

В версии 6.4 (Final) CentosOS аналогичные проблемы. Наше решение казалось логическое 'httpd_execmem'

После безуспешного применения всех ваших полезных рекомендаций продолжайте терпеть неудачу при загрузке oci8 на Apache. Итак, нам на помощь приходит "audit2allow"!

$> echo "type = AVC msg = audit (1384944299.002: 75458): avc: denied {execstack} for pid = 6356 comm =" httpd "scontext = unlimited_u: system_r: httpd_t: s0 tcontext = unlimited_u: system_r: httpd_t: s0 tclass = процесс "| audit2allow

Получение вывода: "This avc can be allowed using the boolean 'httpd_execmem'"

Наконец, решение на данный момент: $> setsebool httpd_execmem 1