Sécuriser votre serveur Web avec 2 modules apache : suEXEC et suPHP

sécuriser son serveur

Dans ce tuto vidéo (sommaire ici), nous allons voir comment installer et configurer 2 extensions apache, suEXEC et suPHP, qui permettent d’augmenter la sécurité de votre serveur. Par défaut, lorsque apache travaille sur un fichier ou un script php, il le fait en tant qu’utilisateur www-data (l’utilisateur apache du système,…

52 commentaires ont été ajoutés, ajoutez le vôtre.

Vous pouvez laisser un commentaire, cependant je ne peux pas vous garantir qu'il sera modéré rapidement ou qu'il aura une réponse, faute de temps pour m'occuper du site.

  1. mikeli

    Hi Alexis,

    Thank you very much for such a great tutorial:)You helped me a lot!!
    At the end I had error problems 500 and 403 in my script related to the image gallery. So I just wanted to say how I solved the problem if someone is interested in:)I needed 3 days to realise about permissions so I’ve changed suphp.conf file ( /etc/suphp/suphp.conf ) umask=0022 ( default was 0077 ) but it is still in developing fase:)Here you are external links if someone needs http://www.diablotin.com/librairie/networking/puis/ch05_03.htm
    Thank you very much and keep going you really rock!!!:))

    btw I speak french and I understand you as well:))
    Cheers!

    • Madrzejewski Alexis

      Hi Mikeli,

      I’m glad I could help, I made the same mistake and it took me more than 3 days to realize it was the umask 🙂
      Thanks for your comment, it’s the first english comment I get (at least which is not a spam).

  2. akif

    j ai modifier le umask de suphp en 022 à la place de 077 (dans /etc/suphp.conf) pour afficher les images de mon site Opencart image/cache/data/demo/mes_images ( j avais
    l erreur 403: You don’t have permission to access image/cache/data/demo/toutes_mes_images on this server, même après chmod 777 .

    niveau sécurité est ce bon ?

    j’ ai pas trouver d autre solution 🙁

    • Madrzejewski Alexis

      Bonjour Akiff,

      Oui, pas de soucis c’est bon 😉 j’ai fait la même chose sur mon serveur, c’est simplement un oublie de ma part sur le tuto, je n’avais pas testé l’upload en php et donc j’avais pas fait attention aux droits appliqués aux fichiers.

  3. Bastien

    Hello,

    Pour tous ceux qui auraient fait un mv /usr/share/phpmyadmin […] au lieu d’un cp […] (comme indiqué la première fois sur la vidéo, ce qui peut induire en erreur si on exécute « en direct » ce que fait Alexis), les 2 symlinks vers mootools.js et mootools-more.js sont brisés. En fait ils pointent de façon relative (un peu sale d’ailleurs, non ?) vers des fichiers situés dans /usr/share/javascript/mootools et donc si on déplace phpmyadmin les symlinks ne suivent pas. Pour réparer cela, vous avez simplement à mettre à jour ces deux symlinks :
    ln -sfn /usr/share/javascript/mootools/mootools.js /home/phpmyadmin/www/js/mootools.js
    ln -sfn /usr/share/javascript/mootools/mootools-more.js /home/phpmyadmin/www/js/mootools-more.js

    Ça devrait maintenant marcher, en utilisant l’URL http://[…].kimsufi.com/phpmyadmin (sans le tilde)

      • Bastien

        Je rajoute d’ailleurs 2 petites explications pour ceux qui ne veulent plus voir les warnings sur la page d’accueil de phpmyadmin suite à l’installation de suPHP.

        « 1. Vous devez ajouter dans le fichier de configuration une phrase de passe secrète (blowfish_secret). »

        Pour cela il suffit de rajouter : $cfg[‘blowfish_secret’] = ‘ce_que_vous_voulez’; à la fin du fichier /etc/phpmyadmin/config.inc.php, et ne pas oublier de supprimer les cookies dans votre navigateur liés à phpmyadmin sur votre serveur dédié.

        « 2. Ce serveur utilise Suhosin. Veuillez vous référer à la documentation pour en connaître les conséquences possibles. »

        Vous pouvez paramétrer Suhosin comme bon vous semble (je ne connais pas du tout, personnellement) dans le fichier /etc/php5/conf.d/suhosin.ini. Ensuite, il suffit de rajouter $cfg[‘SuhosinDisableWarning’] = TRUE; à la fin du fichier /etc/phpmyadmin/config.inc.php (le même que précédemment).

        Et vous serez débarrassés de ces deux warnings !

    • Tchupa

      Bonjour Bastien,

      je suis actuellement dans le cas que tu expose par contre mon petit soucis est que je n’ai pas de répertoire javascript dans mon /usr/share/

      Est ce que celui-ci est lié à l’installation et la version de phpmyadmin?

      En te remerciant.

      Cordialement.

  4. Tchupa

    Bonsoir,
    je suis arrivée a la fin du tutoriel , ou il faut créer un utilisateur « phpmyadmin » seulement petit problème pour ma part:

    j’ai installé une version de phpmyadmin bien plus récente que la votre: la 3.5.2.2 et je n’ai aucun répertoire phpmyadmin dans /etc/

    Mon répertoire phpmyadmin se trouve dans /var/www/ et là oh surprise aucun fichier apache.conf donc je suis un peu bloqué je ne trouve pas de solution.

    Et j’ai aussi un autre problème c’est que mon ftp ne fonctionne plus …

    En vous remerciant.

    Cordialement.

    • Madrzejewski Alexis

      Bonjour Tchupa,

      Le fichier apache.conf de phpmyadmin sert seulement à indiquer à Apache le répertoire ou se trouve les fichiers de phpmyadmin et à faire un alias pour que tonsite.com/phpmyadmin fonctionne.

      Ce fichier sert également à sécuriser certains répertoire (setup, de mémoire) avec un htaccess. Je te recommande de faire un htaccess sur tout le répertoire pour limiter certaines attaque brute force, ça fera une double identification (htaccess + mot de passe SQL).

      Par conséquent, tu peux traiter phpmyadmin comme « un simple site » que tu ajouterais sur ton serveur. C’est à dire que tu dois faire un fichier virtualhost, préciser le répertoire ou sont les fichiers, un alias et mettre en htaccess. Rien de bien compliqué en fait et puis tu peux toujours regarder le fichier apache.conf de l’ancienne version de phpmyadmin pour t’inspirer.

      Edit : voilà l’apache.conf que j’ai sur mon serveur pour t’aider : http://pastebin.com/ZybRw2Gf

      • Tchupa

        Bonjour,

        je te remercie bien Madrzejewski Alexis

        Cordialement.

  5. pedro

    salut pourriez vous me donner les astusd’intrusion

    • Madrzejewski Alexis

      Bonjour Pedro,

      Non et pour plusieurs raisons :
      1) Je n’ai aucune idée de comment « pirater » un autre site, je sais juste que certaines failles existent mais je ne sais pas les exploiter
      2) Je n’ai pas envie de fournir des tutoriels pour « pirater » d’autres sites et gâcher le travail d’autres personnes. Il y une différence entre « pirater » et hacker. Je respecte les hackers au vrai sens du terme mais pas les pirates qui s’amusent à détruire des sites.

  6. mike02

    c’est encore moi,

    j’ai poursuivi la mise en œuvre des tutos et notamment iptables, fail2ban […] suEXEC et suPHP mais à la fin de ce tuto, je souhaite accéder à la page d’accueil de mon serveur, http://188.165.192.219 mais je rencontre une erreur 500 alors que j’accède à PHPMYADMIN sans problème, pareille pour ROUNDCUBE

    je voulais donc savoir s’il fallait dans le virtualhost du fichier « default » mettre la ligne avec suEXEC

    cordialement

  7. Antoine

    Bonsoir,

    Juste un petit retour d’expérience, si jamais il était d’une quelconque utilité :
    1 – J’installe phpmyadmin par apt-get. il se trouve donc bêtement dans /usr/share/phpmyadmin
    2 – Je suis cet excellent tuto et installe suexec /suphp – a partir de la, phpmyadmin ne marche plus …
    3 – Je modifie /etc/apache2/mods-available/suphp.conf : Après les lignes qui excluent /usr/share, j’ajoute 3 lignes pour re autoriser suphp : Directory /usr/share/phpmyadmin, suPHP_Engine on
    4 – dans /etc/suphp/suphp.conf , j’ajoute phpmyadmin:
    ;Path all scripts have to be in
    docroot=/var/www:/home:/usr/share/phpmyadmin
    5 – je créé un utilisateur « pouf », du groupe 100 (users) et je fait
    chown -r pouf:users /usr/share/phpmyadmin (ça c’est du classique pour tous ici …)
    6 – un redémarrage apache et un vidage en règle des cookies dans le navigateur et ça roule. juste quelques messages insultants sur le blowfish et suhosin patch, mais je reste de marbre, ça marche, et les solutions existent…
    Bien cordialement

    • Antoine

      Je pense avoir été un peu rapide.
      La solution proposé par Memphis007 est à priori bien plus efficace
      Désolé.

  8. Tarok

    Bonjour, alors à nouveau un souci..
    Je souhaite afficher les erreurs sur le navigateur, je renseigne donc dans le fichier de conf de suphp errors_to_browser à true, mais toujours pas d’affichage d’erreur …
    une idée ?

    • Madrzejewski Alexis

      Salut,

      Je pense qu’il faut éditer le fichier /etc/php5/cgi/php.ini qui contient la configuration de php losrqu’il est exécuté en cgi.
      La ligne à chercher est display_errors = On, pour afficher les erreurs de php.

      • Chanlô

        Bonsoir,

        je confirme les propos d’alexis: le fichier php.ini global qui est utilisé par suPHP est bien sûr celui de la version CGI qui se trouve dans /etc/php5/cgi.

        J’attire votre attention sur le fait que si vous paramétrez un fichier php.ini custom dans votre virtual host apache avec suPHP_ConfigPath, il faut absolument penser à ajouter ces lignes dans le fichier /etc/apache2/apache2.conf:

        order allow,deny
        deny from all

        Ceci interdit l’accès au fichier php.ini custom depuis un navigateur…

        Merci pour ces tutos super bien!

        Chanlô

  9. erwiket

    salut j’ai installé suexec et suphp mais j’ai un petit probleme mon roundcube ne fonctionne plus j’ai suivi le tutos a plus de 20 fois et je refais la meme chose mais toujours rien alors que mon phpmyadmin et le php qui ne fonctionnait plus fonctionne . le seul probleme c’es roundcube je suis bloquer stp j’ai besoin de ton aide

  10. Bobo

    Ok j’ai trouvé ! YESSS ! Vu que le Phpmyadmin s’exécute avec l’utilisateur phpmyadmin et non pas root par défaut, il faut donc donner les droits de lecture a l’utilisateur phpmyadmin sur le fichier « config-db.php » avec un petit : « chown phpmyadmin:www-data config-db.php ». Car dans le fichier de config.inc.php (qui lui ce charge bien) il y a un test de lecture avant d’inclure le fichier de config.
    Du coup pensez vous qu’il serait préférable de passer tous les fichiers du dossier /etc/phpmyadmin à l’utilisateur phpmyadmin ? De plus j’essaye de voir pour le dernier message avec suhosin , je vous tient au courant…