Ajouter le support OCI8 à php sous Centos 5

L’extension OCI8 permet ajoute à php des fonctionnalités permettant de communiquer avec une base Oracle.
OCI8 n’est pas fourni de base avec php, il convient de l’installer manuellement.

Avant toute chose, nous allons installer apache-php :

yum install php php-devel httpd
/etc/init.d/httpd start

Nous créons ensuite un fichier /var/www/html/phpinfo.php contenant :

<?php
phpinfo();
?>

Cette page est donc accessible depuis l'adresse http://127.0.0.1/phpinfo.php

Il faut ensuite télécharger et décompresser l'extension oci8 pour php :

wget http://pecl.php.net/get/oci8-1.4.5.tgz
tar zxf oci8-1.4.5.tgz

Pour installer l'extension OCI8, deux cas de figures peuvent se présenter. Soit la machine possède déjà un serveur oracle configuré (cf article sur l'installation d'un serveur oracle) soit la machine ne possède pas de serveur oracle local et devra accéder à un serveur oracle distant.

Si un serveur oracle local est installé :

cd oci8-1.4.5
phpize
./configure --with-oci8=shared,$ORACLE_HOME
make 
make install

Si aucun serveur oracle n'est présent sur la machine :
Il faut alors installer oracle_instantclient. Nous choisirons la version 11.2-basic et 11.2-devel en rpm depuis cette page

rpm -ivh oracle-instantclient11.2-basic-11.2.0.2.0.i386.rpm
rpm -ivh oracle-instantclient11.2-devel-11.2.0.2.0.i386.rpm

Nous pouvons maintenant compiler l'extension OCI8 :

cd oci8-1.4.5
phpize
./configure --with-oci8=shared,instantclient,/usr/lib/oracle/11.2/client/lib
make
make install

Configuration de php

Cette étape est commune aux deux méthodes d'installation précédentes.

Ajouter au fichier /etc/php.ini la ligne :

extension=oci8.so

et redémarrer le serveur apache :

/etc/init.d/httpd restart

Maintenant, en allant sur la page http://127.0.0.1/phpinfo.php, vous devez avoir une section oci8 de ce style :

Executer des scripts php sous différentes identités.

Il peut parfois être utile que des scripts php s’exécutent sous différents UID/GID.

Dans notre exemple,nous allons faire en sorte que les scripts s’exécutent sous l’uid/gid du propriétaire du script. Nous allons également permettre d’executer des scripts sous l’identité du root (ATTENTION : CECI EST UNIQUEMENT FAIT A DES FINS PÉDAGOGIQUES ET NE DOIT PAS ÊTRE MIS EN PRODUCTION POUR DES RAISONS ÉVIDENTES DE SÉCURITÉ).

La plateforme utilisée est une Centos 5.5.

Tout d’abord, il convient d’installer apache ainsi que la version « cgi » de php.

yum install httpd httpd-devel php-common php-cli

Attention à ce que le module apache php ne soit pas installé sinon le désinstaller :

rpm -e php

Nous installons ensuite quelques outils de compilation

yum install autoconf gcc-c++ gcc libtool-ltdl-devel

Il nous faut ensuite installer apr depuis les sources :

wget http://mir2.ovh.net/ftp.apache.org/dist/apr/apr-1.4.2.tar.gz
tar zxf apr-1.4.2.tar.gz
cd apr-1.4.2
./configure --prefix=/usr/ && make && make install

Nous allons ensuite compiler et installer le module Apache suPHP :

wget http://www.suphp.org/download/suphp-0.7.1.tar.gz
tar zxf suphp-0.7.1.tar.gz
./configure --prefix=/usr --disable-checkpath --disable-checkuid --disable-checkgid --with-min-uid=0 --with-min-gid=0 --with-apache-user=apache --with-apr=/usr/bin/apr-1-config --sysconfdir=/etc --with-setid-mode=owner
make
make install

Si nous avions voulu interdire l’exécution de scripts possédant des uid/gid <100, il aurait fallu modifier les parametres –with-min-uid et –with-min-gid en conséquence.

Editons ensuite un fichier /etc/suphp.conf :

Modifions ensuite le fichier /etc/httpd/conf/httpd.conf.

Dans les options générales du fichier de configuration, ajoutons :

LoadModule suphp_module modules/mod_suphp.so
suPHP_Engine on

puis sous la section <Directory /var/www/html> :

  AddType application/x-httpd-php .php
  suPHP_AddHandler application/x-httpd-php

Il faut ensuite relancer le service avec :

service httpd restart

Pour tester, créons un fichier /var/www/html/test.php

<?
 echo("<html><body>");
 system("/usr/bin/id");
 echo("</body></html>");
?>

Positionnons les droits sur ce fichier sur root:root :

chown root:root /var/www/html/test.php

Si nous lancons un navigateur sur http://xxx.xxx.xxx.xxx/test.php
nous obtenons :

Et si nous changeons les droits sur le fichier :

chown nobody:nobody /var/www/html/test.php

Nous obtenons :

Le script est donc bien exécuté en fonction du propriétaire du script et non pas sous l’identité « apache:apache ».

suPhP propose de nombreuses options permettant d’affiner les permissions accordées aux scripts. Pour cela, consultez la documentation officielle ici.

Masquer les options de compilation de PHP

La fonction phpinfo affiche de nombreuses informations sur la configuration de PHP dont les options de compilation. Nous allons masquer cette information.

Dans le répertoire contenant les sources de PHP, vous devez éditer le fichier ./ext/standard/info.c pour commenter la partie correspondante :

/*
#ifdef CONFIGURE_COMMAND
php_info_print_table_row(2, "Configure Command", CONFIGURE_COMMAND );
#endif
*/

Vous devez ensuite recompiler et installer PHP, sans oublier de redémarrer votre serveur Web.

Aperçu de PhpInfo

A présent, la ligne correspondante aux options de compilation n’est plus affichée.