====== Sécurité de l'environnement Apache ====== ===== Configuration d'Apache ===== * Désactivation de l'affichage de la version du serveur sur les pages d'erreur :
Apache/1.3.34 Server at localhost Port 80
En modifiant dans votre httpd.conf ServerSignature Off * Cacher la version d'apache : patcher la fonction ap_get_server_version() dans src/main/http_main.c Remplacer : API_EXPORT(const char *) ap_get_server_version(void) { return (server_version ? server_version : SERVER_BASEVERSION); } par : API_EXPORT(const char *) ap_get_server_version(void) { return ""; } ===== Configuration de PHP ===== Cacher l'OS : ==== La constante PHP_OS ==== Dans configure.in, remplacez : *) PHP_UNAME=`uname -a | xargs` AC_DEFINE_UNQUOTED(PHP_UNAME,"$PHP_UNAME",[uname -a output]) PHP_OS=`uname | xargs` AC_DEFINE_UNQUOTED(PHP_OS,"$PHP_OS",[uname output]) ;; esac En : *) dnl PHP_UNAME=`uname -a | xargs` PHP_UNAME="Unix" AC_DEFINE_UNQUOTED(PHP_UNAME,"$PHP_UNAME",[uname -a output]) dnl PHP_OS=`uname | xargs` PHP_OS="Unix" AC_DEFINE_UNQUOTED(PHP_OS,"$PHP_OS",[uname output]) ;; esac ==== phpinfo et la fonction php_uname ==== Dans ext/standard/info.c, remplacez : #ifdef HAVE_SYS_UTSNAME_H ... #else php_uname = PHP_UNAME; #endif par : /*#ifdef HAVE_SYS_UTSNAME_H ... #else*/ php_uname = PHP_UNAME; /*#endif*/ ===== Module suExec ===== ==== Apache 1.3 ==== Compilation : ./configure \ --prefix=/usr/local/apache \ --enable-module=unique_id \ --enable-module=rewrite \ --enable-module=speling \ --enable-module=expires \ --enable-module=info \ --enable-module=log_agent \ --enable-module=log_referer \ --enable-module=usertrack \ --enable-module=proxy \ --enable-module=userdir \ --enable-module=so \ --enable-suexec=shared \ # suExec compilé en tant que module dynamique (permet de le désactiver/supprimer en cas de problème) --suexec-caller=nobody \ # Utilisateur sous lequel tourne Apache (il aurait fallu recréer un compte pour Apache) --suexec-docroot=/usr/local/apache/htdocs \ # La racine web --suexec-logfile=/var/log/apache_suexec \ # Le fichier de log dédié à ce module --suexec-userdir=www \ # Nom du répertoire utilisateur (défaut public_html) --suexec-uidmin=1000 \ # UID minimum requis --suexec-gidmin=1000 \ # GID minimum requis --suexec-umask=077 \ # ? --suexec-safepath="/usr/local/bin:/usr/bin:/bin" # Défini le PATH (ici la valeur par défaut) ===== suPHP ===== ==== Compilation et installation ==== cd wget http://www.suphp.org/... tar xzf suphp-.tar.gz -C /usr/local/src cd /usr/local/src/suphp- ./configure \ --prefix=/usr/local/suphp \ --disable-checkpath \ # Les alias et userdir ne fonctionnent plus sans --with-apxs=/usr/local/apache/bin/apxs \ --with-min-uid=1000 \ --with-min-gid=1000 \ --with-apache-user=nobody \ --with-logfile=/var/log/suphp \ --with-setid-mode=paranoid # Debian utilise : ./configure \ --prefix=/usr \ --sysconfdir=/etc/suphp \ --with-apxs=/usr/bin/apxs2 \ --with-apache-user=www-data \ --with-php=/usr/bin/php5-cgi \ --sbindir=/usr/lib/suphp \ --with-setid-mode=owner \ --with-logfile=/var/log/suphp/suphp.log make make install ==== Configuration ==== Dans le fichier httpd.conf : * Charger le module LoadModule suphp_module libexec/mod_suphp.so * Configurer le module suPHP : AddHandler x-httpd-php .php suPHP_AddHandler x-httpd-php suPHP_Engine on Configurer suPHP (fichier /usr/local/suphp/etc/suphp.conf) : [global] ;Path to logfile logfile=/var/log/suphp.log ;Loglevel loglevel=warn ;User Apache is running as webserver_user=nobody ;Path all scripts have to be in ;docroot=/usr/local/apache/htdocs ; Security options allow_file_group_writeable=true allow_file_others_writeable=false allow_directory_group_writeable=false allow_directory_others_writeable=false ;Check wheter script is within DOCUMENT_ROOT ;check_vhost_docroot=true check_vhost_docroot=false ;Send minor error messages to browser ;errors_to_browser=false errors_to_browser=true ;PATH environment variable env_path=/bin:/usr/bin ;Umask to set, specify in octal notation umask=0077 ; Minimum UID min_uid=1000 ; Minimum GID min_gid=1000 [handlers] ;Handler for php-scripts x-httpd-php=php:/usr/local/php5/bin/php ;Handler for CGI-scripts ;x-suphp-cgi=execute:!self ===== Suhosin ===== ==== Application du patch ==== cd wget URL_DU_PATCH gunzip suhosin-patch-versionPHP-versionPatch.patch cd /usr/local/src/php- patch -p1 < /root/suhosin-patch-versionPHP-versionPatch.patch ==== Compilation de PHP avec l'extension suhosin ==== === Dynamique === Pas de changement si le module suhosin est compilé dynamiquement !!! cd /usr/local/src/php- ./configure [toutes vos options ici] make make install L'extension suhosin compilée après : cd wget URL_EXTENSION tar xzf suhosin-.tgz cd suhosin- phpize ./configure make make install === Statique === cd wget URL_EXTENSION tar xzf suhosin-.tgz -C /usr/local/src/php-/ext/ ln -s /usr/local/src/php-/ext/suhosin- /usr/local/src/php-/ext/suhosin cd /usr/local/src/php- ./buildconf --force ./configure [toutes vos options ici] --enable-suhosin make make install