Permitir acesso ao PhpMyadmin apenas em um host virtual especificado

9

Estou trabalhando em um ambiente de vários hosts virtuais. Eu instalei o PhpMyadmin for Mysql Remote Control.

O ambiente é configurado como abaixo:

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

Agora, se eu acessar um dos três domínios

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

o resultado é o mesmo, o acesso ao Phpmyadmin é permitido.

O objetivo é obter uma situação como esta abaixo

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

com nenhum hack semelhante

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

 ...
 ?>

em algum arquivo Phpmyadmin.


Aqui meu arquivo de configuração 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
fonte

Respostas:

25

Remova a declaração de alias

Alias /phpmyadmin /usr/share/phpmyadmin

no contexto do servidor e coloque-o no contexto vhost relevante

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

Pode ser mais fácil e preferível incluir apenas toda a configuração do phpmyadmin no vhost relevante

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

e remova essa inclusão do contexto do servidor e reinicie o apache para que as alterações tenham efeito.

user9517
fonte
Não parece funcionar para mim no Centos 6.5. Eu tentei os dois métodos e ainda consigo acessá-lo de todos os domínios.
Jeremy
Lembre-se de reiniciar o Apache2 após alterar sua configuração e, eventualmente, adicionar um novo CNAME à configuração do DNS
realtebo
3

No RHEL / CentOS, o Apache carrega /etc/httpd/conf.d/phpmyadmin.conf para configurar o alias / phpmyadmin. A diretiva Directory também é inicialmente definida para permitir apenas o tráfego do host local; portanto, você pode receber um erro 403 ao acessar o phpmyadmin como "domain.com/phpmyadmin".

Usando o seguinte, você pode configurar o RHEL / CentOS para permitir apenas que o alias / phpmyadmin funcione a partir de um 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

Em seguida, adicione a diretiva de alias ao seu vhost e reinicie o Apache.

Observe que essa não é a implementação mais segura. Tome cuidado para proteger / phpmyadmin através de autenticação, restrições de IP ou uma combinação de ambos.

Liam
fonte