{"id":428,"date":"2012-11-25T12:32:13","date_gmt":"2012-11-25T10:32:13","guid":{"rendered":"https:\/\/www.asafety.fr\/?p=428"},"modified":"2015-11-11T00:15:01","modified_gmt":"2015-11-10T22:15:01","slug":"proteger-un-serveur-web-apache2-avec-suexec-et-suphp","status":"publish","type":"post","link":"https:\/\/www.asafety.fr\/en\/administration-reseaux-et-systemes\/proteger-un-serveur-web-apache2-avec-suexec-et-suphp\/","title":{"rendered":"Prot\u00e9ger un serveur web Apache2 avec suEXEC et suPHP"},"content":{"rendered":"<p><\/p>\n<p><p>Sur la plupart des services d&#8217;h\u00e9bergement mutualis\u00e9s actuels, chaque site est ind\u00e9pendant des autres au niveau de l&#8217;utilisateur Apache. En effet, lors du d\u00e9ploiement basique d&#8217;un serveur web, l&#8217;utilisateur sous lequel fonctionne le d\u00e9mon est la plupart du temps &#8220;www-data&#8221;, &#8220;nobody&#8221; ou &#8220;apache&#8221;. Cela signifie que si plusieurs sites existent sous la m\u00eame instance d&#8217;Apache, tous utilisent le m\u00eame utilisateur. Ainsi, si l&#8217;un des site s&#8217;av\u00e8re corrompu par un utilisateur malveillant, et qu&#8217;un shell est obtenu, alors l&#8217;assaillant peut profiter pleinement de tous les droits de l&#8217;utilisateur sous lequel tourne le serveur web. Tous les sites s&#8217;av\u00e8rent donc vuln\u00e9rables.<\/p>\n<p>Une des techniques la plus r\u00e9pandue est de scinder chaque site d&#8217;un h\u00e9bergement mutualis\u00e9 via des utilisateurs (Unix) distincts. Cette m\u00e9thode permet de cloisonner l&#8217;ex\u00e9cution des scripts web d&#8217;un site \u00e0 un seul et unique utilisateur, emp\u00eachant ainsi que cet utilisateur puisse alt\u00e9rer les autres sites mutualis\u00e9s.<\/p>\n<p>Cette configuration est \u00e0 r\u00e9aliser en amont du d\u00e9ploiement des divers sites. Dans le cas d&#8217;une migration d&#8217;un environnement d\u00e9j\u00e0 en production, des manipulations suppl\u00e9mentaires peuvent \u00eatre n\u00e9cessaire (modification des .htaccess etc.).<\/p>\n<p>Deux modules d&#8217;Apache permettent de r\u00e9aliser une telle configuration ais\u00e9ment :<\/p>\n<ul>\n<li><a title=\"suEXEC\" href=\"https:\/\/httpd.apache.org\/docs\/current\/fr\/suexec.html\" target=\"_blank\">suEXEC<\/a> : module permettant d&#8217;ex\u00e9cuter des scripts CGI \u00e0 partir de l&#8217;utilisateur propri\u00e9taire du dit script.<\/li>\n<li><a title=\"suPHP\" href=\"http:\/\/www.suphp.org\/Home.html\" target=\"_blank\">suPHP<\/a> : module permettant d&#8217;ex\u00e9cuter des scripts PHP \u00e0 partir de l&#8217;utilisateur propri\u00e9taire.<\/li>\n<\/ul>\n<p>Apr\u00e8s l&#8217;installation et le d\u00e9ploiement de ces modules de s\u00e9curit\u00e9, la configuration de PHP5 sur le serveur web exploitera le fichier de configuration php.ini CGI.<\/p>\n<p>Dans un premier temps, installer les modules concern\u00e9s :<\/p>\n<p>[bash]&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;root@ubuntu:\/# apt-get install apache2-suexec&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nroot@ubuntu:\/# apt-get install apache2-suexec-custom&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nroot@ubuntu:\/# apt-get install libapache2-mod-suphp&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;[\/bash]<\/p>\n<p>Pour la configuration de ceux-ci, consid\u00e9rons que tous les sites clients vont se trouver dans &#8220;\/var\/www\/&lt;SITE&gt;\/&#8221;, et que chaque r\u00e9pertoire propre \u00e0 un site disposera des r\u00e9pertoires &#8220;httpdocs&#8221; pour le contenu du site en lui m\u00eame et &#8220;log&#8221; pour la journalisation.<\/p>\n<p>Modification de &#8220;\/etc\/apache2\/suexec\/www-data&#8221;. On indique le r\u00e9pertoire racine de tous les site dans ce fichier, puis le r\u00e9pertoire contenant les fichiers de chaque site (httpdocs).<\/p>\n<p>[bash]&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;root@ubuntu:\/var\/www\/monsite\/httpdocs# cat \/etc\/apache2\/suexec\/www-data&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n\/var\/www&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nhttpdocs&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n# The first two lines contain the suexec document root and the suexec userdir&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n# suffix. If one of them is disabled by prepending a # character, suexec will&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n# refuse the corresponding type of request.&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n# This config file is only used by the apache2-suexec-custom package. See the&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n# suexec man page included in the package for more details.&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;[\/bash]<\/p>\n<p>Pour la configuration de &#8220;suphp&#8221;, il est n\u00e9cessaire de connaitre l&#8217;uid et le gid minimum d&#8217;ex\u00e9cution des scripts web. Il est conseill\u00e9 d&#8217;indiquer ceux de l&#8217;utilisateur par d\u00e9faut &#8220;www-data&#8221; (33 ou 100 g\u00e9n\u00e9ralement) que l&#8217;on peut r\u00e9cup\u00e9rer via la commande:<\/p>\n<p>[bash]&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;root@ubuntu:\/# id www-data&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nuid=33(www-data) gid=33(www-data) groupes=33(www-data)&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;[\/bash]<\/p>\n<p>Configuration du fichier &#8220;\/etc\/suphp\/suphp.conf&#8221; :<\/p>\n<p>[bash]&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;[root@[dedix chrooted]:\/]$ cat \/etc\/suphp\/suphp.conf&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n[global]&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n;Path to logfile&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nlogfile=\/var\/log\/suphp\/suphp.log&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;;Loglevel&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nloglevel=info&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;;User Apache is running as&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nwebserver_user=www-data&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;;Path all scripts have to be in&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\ndocroot=\/var\/www:${HOME}\/httpdocs:\/usr\/share&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;;Path to chroot() to before executing script&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n;chroot=\/mychroot&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;; Security options&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nallow_file_group_writeable=false&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nallow_file_others_writeable=false&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nallow_directory_group_writeable=false&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nallow_directory_others_writeable=false&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;;Check wheter script is within DOCUMENT_ROOT&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\ncheck_vhost_docroot=false&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;;Send minor error messages to browser&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nerrors_to_browser=false&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;;PATH environment variable&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nenv_path=\/bin:\/usr\/bin&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;;Umask to set, specify in octal notation&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\numask=0022&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;; Minimum UID&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nmin_uid=33&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;; Minimum GID&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nmin_gid=33&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;[handlers]&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n;Handler for php-scripts&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\napplication\/x-httpd-suphp=&amp;amp;amp;quot;php:\/usr\/bin\/php-cgi&amp;amp;amp;quot;&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;;Handler for CGI-scripts&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nx-suphp-cgi=&amp;amp;amp;quot;execute:!self&amp;amp;amp;quot;&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;[\/bash]<\/p>\n<p>Ajouter les chemins d&#8217;acc\u00e8s aux scripts, notamment &#8220;\/usr\/share&#8221; s&#8217;il y a une installation de <a title=\"phpMyAdmin\" href=\"http:\/\/www.phpmyadmin.net\/home_page\/index.php\" target=\"_blank\">phpMyAdmin<\/a> :<\/p>\n<p>[bash]&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;;Path all scripts have to be in&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\ndocroot=\/var\/www:${HOME}\/httpdocs:\/usr\/share&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;[\/bash]<\/p>\n<p>D\u00e9sactiver la v\u00e9rification des racines des &#8220;vhost&#8221; :<\/p>\n<p>[bash]&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;;Check wheter script is within DOCUMENT_ROOT&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\ncheck_vhost_docroot=false&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;[\/bash]<\/p>\n<p>Enfin, r\u00e9gler convenablement l&#8217;uid\/gid minimum avec celui du compte &#8220;www-data&#8221;; ainsi que l&#8217;umask par d\u00e9faut &#8220;0022&#8221;.<\/p>\n<p>Pour laisser la main au module suPHP et suEXEC, la d\u00e9sactivation du module PHP5 est requise. suEXEC exploitera le fichier de configuration &#8220;\/etc\/php5\/cgi\/php.ini&#8221; \u00e0 l&#8217;avenir :<\/p>\n<p>[bash]&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;root@ubuntu:\/# a2dismod php5&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nroot@ubuntu:\/# a2enmod suexec&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nroot@ubuntu:\/# a2enmod suphp&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;[\/bash]<\/p>\n<p>Il ne reste plus qu&#8217;\u00e0 d\u00e9ployer chacun des sites dans &#8220;\/var\/www&#8221;. Chaque site n\u00e9cessite la cr\u00e9ation d&#8217;un nouvel utilisateur\/groupe\/home qui lui est propre ! Ainsi &#8220;\/var\/www\/&#8221; ne doit pas d\u00e9j\u00e0 contenir de r\u00e9pertoire pour un site.<\/p>\n<p>[bash]&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;root@ubuntu:\/var\/www# useradd &#8211;home \/var\/www\/monsite\/ &#8211;create-home monsite&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nroot@ubuntu:\/var\/www# mkdir -p monsite\/httpdocs&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nroot@ubuntu:\/var\/www# mkdir -p monsite\/log&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;[\/bash]<\/p>\n<p>A noter que vous pouvez ajouter un mot de passe pour chaque compte de site (utile pour avoir un serveur FTP par site qui pointe dans son $HOME respectif). Pour d\u00e9finir le mot de passe de chaque compte, utiliser la commande &#8220;passwd&#8221; ou automatiser la d\u00e9finition du mot de passe via l&#8217;attribut &#8220;-p&#8221; de la commande &#8220;useradd&#8221; (n\u00e9cessite un hachage md5-unix, qui peut \u00eatre cr\u00e9\u00e9 via le paquet &#8220;<a title=\"makepasswd\" href=\"http:\/\/people.defora.org\/~khorben\/projects\/makepasswd\/\" target=\"_blank\">makepasswd<\/a>&#8220;).<\/p>\n<p>Cr\u00e9er un fichier de test dans &#8220;\/var\/www\/monsite\/httpdocs\/index.php&#8221; contenant la v\u00e9rification de l&#8217;utilisateur d&#8217;ex\u00e9cution courante :<\/p>\n<p>[php]&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;&amp;amp;amp;lt;?php&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nsystem(&amp;amp;amp;quot;\/usr\/bin\/id&amp;amp;amp;quot;);&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\necho &amp;amp;amp;quot;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;amp;quot;;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nsystem(&amp;amp;amp;quot;\/usr\/bin\/whoami&amp;amp;amp;quot;);&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\necho &amp;amp;amp;quot;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;amp;quot;;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nphpinfo();&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n?&amp;amp;amp;gt;&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;[\/php]<\/p>\n<p>Ne pas oublier que tous les fichiers\/dossiers d&#8217;un site prot\u00e9g\u00e9 par suEXEC et suPHP doivent \u00eatre la propri\u00e9t\u00e9 du seul utilisateur Unix autoris\u00e9 \u00e0 exploiter le site pr\u00e9c\u00e9demment cr\u00e9\u00e9. Ainsi, red\u00e9finir le chown :<\/p>\n<p>[bash]root@ubuntu:\/var\/www# chown -R monsite:monsite monsite\/[\/bash]<\/p>\n<p>Pour finir, il faut indiquer \u00e0 Apache2 que tel site doit fonctionner sous tel utilisateur. Pour cela, c&#8217;est dans les fichiers des &#8220;vhosts&#8221; qu&#8217;une nouvelle directive fait son\u00a0apparition\u00a0:<\/p>\n<p>[bash]&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;root@ubuntu:\/etc\/apache2\/sites-available# cat monsite&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;amp;lt;VirtualHost *:80&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n ServerAdmin webmaster@localhost&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n DocumentRoot \/var\/www\/monsite\/httpdocs&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n ServerName www.monsite.fr&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n ServerAlias monsite.fr&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n SuexecUserGroup monsite monsite&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;Directory \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n Options FollowSymLinks&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n AllowOverride All&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;\/Directory&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n ErrorLog \/var\/www\/monsite\/log\/error.log&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n # Possible values include: debug, info, notice, warn, error, crit,&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n # alert, emerg.&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n LogLevel warn&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n CustomLog \/var\/www\/monsite\/log\/access.log combined&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;amp;lt;\/VirtualHost&amp;amp;amp;gt;&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;[\/bash]<\/p>\n<p>Il est conseill\u00e9 dans ce fichier &#8220;vhost&#8221; de rediriger la journalisation vers le r\u00e9pertoire &#8220;log&#8221; pr\u00e9c\u00e9demment cr\u00e9\u00e9 pour le site en question. Indiquer le nom du site, les bons alias, le r\u00e9pertoire racine et la directive suEXEC qui pr\u00e9cise l&#8217;utilisateur et le groupe propri\u00e9taire du site :<\/p>\n<p>[bash]SuexecUserGroup monsite monsite[\/bash]<\/p>\n<p>Activation du nouveau site (vhost) :<\/p>\n<p>[bash]&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;root@ubuntu:\/etc\/apache2\/sites-available# a2ensite monsite&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;[\/bash]<\/p>\n<p>Enfin, red\u00e9marrage d&#8217;Apache avec toute la nouvelle configuration des modules :<\/p>\n<p>[bash]&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;root@ubuntu:\/# \/etc\/init.d\/apache2 stop&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nStopping web server: apache2.&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nroot@ubuntu:\/# \/etc\/init.d\/apache2 start&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\nStarting web server: apache2.&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;[\/bash]<\/p>\n<p>V\u00e9rification de la bonne configuration :<\/p>\n<div id=\"attachment_429\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/su1.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-429\" class=\"size-medium wp-image-429\" title=\"V\u00e9rification du fonctionnement de suEXEC et suPHP\" src=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/su1-300x281.png\" alt=\"V\u00e9rification du fonctionnement de suEXEC et suPHP\" width=\"300\" height=\"281\" srcset=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/su1-300x281.png 300w, https:\/\/www.asafety.fr\/wp-content\/uploads\/su1.png 669w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-429\" class=\"wp-caption-text\">V\u00e9rification du fonctionnement de suEXEC et suPHP<\/p><\/div>\n<p>On constate que le script &#8220;index.php&#8221; cr\u00e9\u00e9 tout \u00e0 l&#8217;heure s&#8217;ex\u00e9cute bien. La commande &#8220;\/usr\/bin\/id&#8221; retourne bien &#8220;monsite&#8221; ainsi que le &#8220;whoami&#8221; pour le compte d&#8217;ex\u00e9cution courant. La configuration de PHP5 est \u00e0 pr\u00e9sent g\u00e9r\u00e9e en mode CGI. Chaque site est \u00e0 pr\u00e9sent scind\u00e9 par le biais de son utilisateur propri\u00e9taire d\u00e9fini dans son fichier vhost.<\/p>\n<p>Dans le cas d&#8217;une erreur interne au serveur (erreur 500), v\u00e9rifier le propri\u00e9taire des scripts vis-\u00e0-vis du compte d\u00e9fini dans le fichier vhost.<\/p>\n<p>Ce m\u00e9canisme est tr\u00e8s simple \u00e0 mettre en oeuvre et permet d&#8217;apporter une s\u00e9curit\u00e9 notable \u00e0 un environnement web complet. Coupl\u00e9 \u00e0 un serveur FTP type &#8220;<a title=\"vsFTPd\" href=\"https:\/\/security.appspot.com\/vsftpd.html\" target=\"_blank\">vsFTPd<\/a>&#8220;, chaque site est administrable via FTP en connaissance du nom d&#8217;utilisateur\/mot de passe propre \u00e0 chaque site.<\/p>\n<\/p>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Sur la plupart des services d&#8217;h\u00e9bergement mutualis\u00e9s actuels, chaque site est ind\u00e9pendant des autres au niveau de l&#8217;utilisateur Apache. En [&hellip;]<\/p>\n","protected":false},"author":1337,"featured_media":1167,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[59,165],"tags":[172,194,180,186,189,184,188,192,193,185,183,182,187,190,191],"class_list":["post-428","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administration-reseaux-et-systemes","category-os","tag-apache2","tag-cgi","tag-cloisonnement","tag-compte-unix","tag-ftp","tag-hebergeur","tag-module-apache","tag-nobody","tag-php-ini","tag-securite","tag-suexec","tag-suphp","tag-vhost","tag-vsftpd","tag-www-data"],"_links":{"self":[{"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/posts\/428","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/users\/1337"}],"replies":[{"embeddable":true,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/comments?post=428"}],"version-history":[{"count":7,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/posts\/428\/revisions"}],"predecessor-version":[{"id":1635,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/posts\/428\/revisions\/1635"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/media\/1167"}],"wp:attachment":[{"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/media?parent=428"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/categories?post=428"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/tags?post=428"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}