Permitir acceso a PhpMyadmin solo en un host virtual especificado

9

Estoy trabajando en un entorno virtualhost múltiple. He instalado PhpMyadmin para Mysql Remote Control.

El entorno se configura de la siguiente manera:

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

Ahora, si accedo a uno de los tres dominios

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

el resultado es el mismo, se permite el acceso a Phpmyadmin.

El objetivo es obtener una situación como esta a continuación

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

sin truco similar a

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

 ...
 ?>

en algún archivo Phpmyadmin.


Aquí mi archivo de configuración de 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
fuente

Respuestas:

25

Eliminar la declaración de alias

Alias /phpmyadmin /usr/share/phpmyadmin

del contexto del servidor y ponerlo en el contexto vhost relevante

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

Puede ser más fácil y preferible incluir toda la configuración de phpmyadmin en el vhost relevante

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

y luego elimine esa inclusión del contexto del servidor y reinicie apache para que los cambios surtan efecto.

usuario9517
fuente
No parece funcionar para mí en Centos 6.5. Probé ambos métodos y aún puedo acceder desde todos los dominios.
Jeremy
Recuerde reiniciar Apache2 después de cambiar su configuración y eventualmente agregar un nuevo CNAME a la configuración de DNS
realtebo
3

En RHEL / CentOS, Apache carga /etc/httpd/conf.d/phpmyadmin.conf para configurar el alias / phpmyadmin. La directiva de directorio también se configuró inicialmente para permitir solo el tráfico de localhost, por lo que puede recibir un error 403 al acceder a phpmyadmin como "domain.com/phpmyadmin".

Usando lo siguiente, puede configurar RHEL / CentOS para permitir que el alias / phpmyadmin funcione desde un host virtual específico.

/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

A continuación, agregue la directiva de alias a su vhost y reinicie Apache.

Tenga en cuenta que esta no es la implementación más segura. Tenga cuidado de asegurar / phpmyadmin mediante autenticación, restricciones de IP o una combinación de ambas.

Liam
fuente