SuPHP est un module apache qui permet à PHP de fonctionner sous un utilisateur Linux différent de l'utilisateur apache. Cela améliore la sécurité des sites Web hébergés car vous pouvez exécuter les scripts PHP de chaque site Web sous un utilisateur différent. Ce tutoriel décrit l'installation de SuPHP sur centOS 7.2 à partir de la source car il n'y a pas de packages SuPHP disponibles pour CentOS 7.2.
Prérequis
Vous devez avoir un serveur sur lequel CentOS 7.2 ou version ultérieure est installé, j'utiliserai ce tutoriel comme base pour ma configuration. Dans le premier chapitre, j'installerai le serveur web Apache. Si Apache est déjà installé, commencez tout de suite par le chapitre 2.
Mon serveur utilisera le nom d'hôte server1.example.com et l'adresse IP 192.168.1.100. Remplacez ces valeurs par le nom d'hôte et l'adresse IP de votre serveur partout où elles apparaissent dans le didacticiel suivant.
Je recommande d'installer un pare-feu pour des raisons de sécurité, si vous n'avez pas encore installé firewalld, vous pouvez l'installer avec ces commandes :
yum -y install firewalld
démarrez le pare-feu et activez-le au démarrage.
systemctl start firewalld.service
systemctl enable firewalld.service
Ensuite, ouvrez votre port SSH pour vous assurer que vous pourrez vous connecter au serveur par SSH.
firewall-cmd --permanent --zone=public --add-service=ssh
firewall-cmd --reload
1 Installation d'Apache 2.4 et PHP 5
Apache et PHP sont disponibles dans le référentiel de base CentOS, nous pouvons donc installer les deux packages logiciels avec yum.
Installez Apache et le package de développement Aapache qui contient les fichiers nécessaires à la compilation ultérieure de SuPHP.
yum -y install httpd httpd-devel
Installation de PHP (j'ai ajouté quelques modules PHP fréquemment utilisés) :
yum -y install php php-mysql php-gd php-pear php-xml php-xmlrpc php-mbstring curl
Nous devons permettre à Apache de démarrer au démarrage et de démarrer le service.
systemctl start httpd.service
systemctl enable httpd.service
Nous devons ouvrir les ports HTTP (80) et HTTPS (443) pour rendre le serveur Web accessible à partir d'autres ordinateurs. Exécutez les commandes suivantes pour configurer le pare-feu.
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
2 Installation de SuPHP
Nous allons compiler SuPHP à partir de la source dans cette étape. Installez les outils de développement pour configurer la chaîne de compilation requise.
yum -y groupinstall 'Outils de développement'
Et wget pour télécharger les fichiers source et l'éditeur nano.
yum -y installer wget nano
Téléchargez l'archive source tar.gz de SuPHP et décompressez-la.
cd /usr/local/src
wget http://suphp.org/download/suphp-0.7.2.tar.gz
tar zxvf suphp-0.7.2.tar.gzCentOS 7 utilise Apache 2.4, nous devons donc patcher suphp avant de pouvoir le compiler avec Apache. Le patch est appliqué comme ceci :
wget -O suphp.patch https://lists.marsching.com/pipermail/suphp/attachments/20130520/74f3ac02/attachment.patch[[email protected] suphp-0.7.2]# autoreconf -if
patch -Np1 -d suphp-0.7.2cd suphp-0.7.2
autoreconf -if
libtoolize :mettre les fichiers auxiliaires dans AC_CONFIG_AUX_DIR, `config'.
libtoolize :copier le fichier `config/ltmain.sh'
libtoolize :envisagez d'ajouter `AC_CONFIG_MACRO_DIR([m4])' à configure.ac et
libtoolize :relancez libtoolize, pour conserver les macros libtool correctes dans l'arborescence.
libtoolize :envisagez d'ajouter `-I m4' à ACLOCAL_AMFLAGS dans Makefile.am.
configure.ac:9 :avertissement :AM_INIT_AUTOMAKE :les formes à deux et trois arguments sont obsolètes. Pour plus d'informations, consultez :
configure.ac:9 : http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_005fINIT_005fAUTOMAKE-invocation
configure.ac:24 :installation de 'config/config.guess'
configure.ac:24 :installation de 'config/config.sub'
configure.ac:9 :installation de 'config/install-sh'
configure .ac:9 :installation de 'config/missing'
src/Makefile.am :installation de 'config/depcomp'
[[email protected] suphp-0.7.2]#La commande autoreconf applique le patch, nous pouvons maintenant configurer la nouvelle source comme suit. REMARQUE : La commande configure tient sur une ligne !
./configure --prefix=/usr/ --sysconfdir=/etc/ --with-apr=/usr/bin/apr-1-config --with-apache-user=apache --with-setid -mode=propriétaire --with-logfile=/var/log/httpd/suphp_logPuis compilez et installez SuPHP.
faire
faire installerAjoutez ensuite le module suPHP à la configuration Apache en ajoutant un nouveau fichier suphp.conf.
nano /etc/httpd/conf.d/suphp.confAvec le contenu suivant.
LoadModule suphp_module modules/mod_suphp.so... et créez le fichier /etc/suphp.conf comme suit :
nano /etc/suphp.conf[global];Chemin d'accès au logfilelogfile=/var/log/httpd/suphp.log;Loglevelloglevel=info;L'utilisateur Apache s'exécute en tant que webserver_user=apache;Le chemin d'accès à tous les scripts doit être indocroot=/;Le chemin d'accès à chroot() pour avant d'exécuter le script;chroot=/mychroot; Options de sécuritéallow_file_group_writeable=trueallow_file_others_writeable=falseallow_directory_group_writeable=trueallow_directory_others_writeable=false;Vérifier si le script se trouve dans DOCUMENT_ROOTcheck_vhost_docroot=true;Envoyer des messages d'erreur mineurs au navigateurerrors_to_browser=false;PATH variable d'environnementenv_path=/bin:/usr/bin;Umask à définir, spécifier en notation octale 0077 ; UIDmin_uid=100 minimum ; GIDmin_gid=100[handlers] ;Gestionnaire pour php-scriptsx-httpd-suphp="php:/usr/bin/php-cgi";Gestionnaire pour CGI-scriptsx-suphp-cgi="execute:!self"Enfin, nous redémarrons Apache :
systemctl redémarre httpd.service
3 Configurer un Apache Vhost avec SuPHP
Dans ce chapitre, je montrerai comment vous pouvez ajouter un hôte virtuel dans apache qui exécute PHP sous un utilisateur distinct. J'utiliserai le nom de domaine www.example.com pour le site Web et PHP doit être exécuté en tant qu'utilisateur et groupe "web1 ", la racine du document pour le site Web est /var/www/example.com
Tout d'abord, ajoutez un nouvel utilisateur et groupe "web1".
useradd web1Ajoutez le répertoire racine du site Web.
mkdir /var/www/example.com
chown web1:web1 /var/www/example.comAjoutez maintenant le fichier de configuration de l'hôte virtuel dans le répertoire apache conf.d.
nano /etc/httpd/conf.d/example.com.confavec ce contenu :
DocumentRoot /var/www/example.com
ServerName example.com
ServerAdmin [email protected]
SetHandler Aucun
suPHP_Engine sur
SetHandler x-httpd-suphp
suPHP_AddHandler x-httpd-suphp
Remplacez le nom de domaine par votre propre domaine dans les lignes ServerName et ServerAdmin.
Ensuite, redémarrez apache pour appliquer les modifications de configuration.
systemctl redémarre httpd.service
4 Tester la configuration de SuPHP
Dans ce chapitre, je vais vous montrer plusieurs méthodes pour tester PHP sur ce site Web. Tout d'abord, je vais créer un fichier qui utilise la fonction phpinfo() pour montrer si PHP fonctionne et s'il s'exécute maintenant en mode CGI.
Créez un fichier info.php avec nano :
nano /var/www/example.com/info.phpet ajoutez les lignes suivantes au nouveau fichier :
phpinfo();Changez ensuite le propriétaire du fichier en utilisateur et groupe web1.
chown web1:web1 /var/www/example.com/info.phpOuvrez l'URL du fichier http://example.com/info.php dans un navigateur Web, il affichera la page suivante.
L'important est le ServerAPI ligne qui affiche CGI/FastCGI . qui montre que PHP est exécuté via SuPHP et non mod_php.
Maintenant, je vais tester si PHP s'exécute sous le bon utilisateur (web1). Comment SuPHP sait-il quel utilisateur il doit utiliser ? SuPHP bascule PHP vers l'utilisateur qui possède le script PHP, il est donc important que tous les fichiers PHP de notre dossier racine Web /var/www/example.com appartiennent à l'utilisateur et au groupe web1.
Alors, comment tester si PHP utilise le bon utilisateur ? Une façon consiste à exécuter la commande "whoami" qui renvoie le nom d'utilisateur.
Je vais créer un nouveau script testuser.php à la racine du site :
nano /var/www/example.com/testuser.phpavec ce contenu :
system('whoami');Changez ensuite le propriétaire du fichier en utilisateur et groupe web1.
chown web1:web1 /var/www/example.com/testuser.phpOuvrez http://example.com/testuser.php dans un navigateur Web, le résultat sera : web1
SuPHP est configuré et exécute les fichiers PHP en tant qu'utilisateur de ce site Web. Supprimez les fichiers de test du répertoire du site Web et commencez à ajouter les scripts de votre site Web.
5 Téléchargez ce serveur CentOS 7.2 en tant que machine virtuelle
Cette configuration est disponible en téléchargement de machine virtuelle au format ova/ovf (compatible avec VMWare et Virtualbox) pour les abonnés howtoforge.
Informations de connexion pour la VM
- Le mot de passe root est :howtoforge
- Le mot de passe de l'utilisateur "administrateur" est :howtoforge
Veuillez modifier les deux mots de passe lors de la première connexion.
- L'adresse IP de la VM est 192.168.1.100
6 liens
- CentOS
- Serveur Web Apache
- SuPHP