Autoriser l'accès à PhpMyadmin uniquement sur un hôte virtuel spécifié

9

Je travaille sur un environnement virtualhost multiple. J'ai installé PhpMyadmin pour Mysql Remote Control.

L'environnement est configuré comme ci-dessous:

one.domain.com
two.domain.com
onlyphpmyadmin.domain.com

Maintenant, si j'accède à l'un des trois domaines

http://one.domain.com/phpmyadmin/
http://two.domein.com/phpmyadmin/
http://onlyphpmyadmin.domain.com/phpmyadmin/

le résultat est le même, l'accès à Phpmyadmin est autorisé.

Le but est d'obtenir une situation comme celle-ci ci-dessous

http://one.domain.com/phpmyadmin/ --> access denied
http://two.domein.com/phpmyadmin/ --> access denied 
http://onlyphpmyadmin.domain.com/phpmyadmin/ -->access allowed

sans hack similaire à

<?php 
if($_SERVER['HTTP_HOST'] != 'onlyphpmyadmin.domain.com')
die('access denied');

 ...
 ?>

sur un fichier Phpmyadmin.


Voici mon fichier de configuration Phpmyadmin

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
    Options FollowSymLinks
    DirectoryIndex index.php

    <IfModule mod_php5.c>
        AddType application/x-httpd-php .php

        php_flag magic_quotes_gpc Off
        php_flag track_vars On
        php_flag register_globals Off
        php_admin_flag allow_url_fopen Off
        php_value include_path .
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/
    </IfModule>

</Directory>

# Authorize for setup
<Directory /usr/share/phpmyadmin/setup>
    <IfModule mod_authn_file.c>
    AuthType Basic
    AuthName "phpMyAdmin Setup"
    AuthUserFile /etc/phpmyadmin/htpasswd.setup
    </IfModule>
    Require valid-user
</Directory>

# Disallow web access to directories that don't need it
<Directory /usr/share/phpmyadmin/libraries>
    Order Deny,Allow
    Deny from All
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
    Order Deny,Allow
    Deny from All
</Directory>
alesdario
la source

Réponses:

25

Supprimer la déclaration d'alias

Alias /phpmyadmin /usr/share/phpmyadmin

à partir du contexte du serveur et le mettre dans le contexte vhost pertinent

<VirtualHost *:80>
    ServerName onlyphpmyadmin.domain.com
    .
    .
    .
    Alias /phpmyadmin /usr/share/phpmyadmin
</VirtualHost>

Il peut être plus facile et préférable d'inclure simplement la configuration phpmyadmin entière dans le vhost correspondant

<VirtualHost *:80>
    ServerName onlyphpmyadmin.domain.com
    .
    .
    .
    include /path/to/phpmyadmin.conf
</VirtualHost>

puis supprimez cette inclusion du contexte du serveur et redémarrez apache pour que les modifications prennent effet.

user9517
la source
Ne semble pas fonctionner pour moi sur Centos 6.5. J'ai essayé les deux méthodes et toujours en mesure d'y accéder à partir de tous les domaines.
Jeremy
N'oubliez pas de redémarrer Apache2 après avoir changé sa configuration et d'ajouter éventuellement un nouveau CNAME à la configuration DNS
realtebo
3

Dans RHEL / CentOS, Apache charge /etc/httpd/conf.d/phpmyadmin.conf pour configurer l'alias / phpmyadmin. La directive Directory est également initialement définie pour autoriser uniquement le trafic provenant de localhost, vous pouvez donc recevoir une erreur 403 lorsque vous accédez à phpmyadmin comme "domain.com/phpmyadmin".

En utilisant ce qui suit, vous pouvez configurer RHEL / CentOS pour autoriser uniquement l'alias / phpmyadmin à fonctionner à partir d'un hôte virtuel spécifique.

/etc/httpd/conf.d/phpmyadmin.conf

<Directory "/usr/share/phpmyadmin">
#  Order Deny,Allow
#  Deny from all
   Allow from 127.0.0.1
</Directory>

#Alias /phpmyadmin /usr/share/phpmyadmin
#Alias /phpMyAdmin /usr/share/phpmyadmin
#Alias /mysqladmin /usr/share/phpmyadmin

Ensuite, ajoutez la directive alias à votre vhost et redémarrez Apache.

Veuillez noter que ce n'est pas l'implémentation la plus sécurisée. Veuillez prendre soin de sécuriser / phpmyadmin via l'authentification, les restrictions IP ou une combinaison des deux.

Liam
la source