Разрешить доступ к PhpMyadmin только на указанном виртуальном хосте

9

Я работаю над множеством виртуальных хостов. Я установил PhpMyadmin для Mysql Remote Control.

Среда настраивается, как показано ниже:

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

Теперь, если я получу доступ к одному из трех доменов

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

результат тот же, доступ к Phpmyadmin разрешен.

Цель состоит в том, чтобы получить ситуацию, подобную этой ниже

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

без взлома, похожего на

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

 ...
 ?>

в каком-то файле Phpmyadmin.


Здесь мой файл конфигурации 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
источник

Ответы:

25

Удалить объявление псевдонима

Alias /phpmyadmin /usr/share/phpmyadmin

из контекста сервера и поместите его в соответствующий контекст vhost

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

Может быть проще и предпочтительнее просто включить всю конфигурацию phpmyadmin в соответствующий vhost

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

а затем удалите это включение из контекста сервера и перезапустите apache, чтобы изменения вступили в силу.

user9517
источник
Кажется, не работает для меня на Centos 6.5. Я попробовал оба метода и все еще смог получить к нему доступ из всех доменов.
Джереми
Не забудьте перезапустить Apache2 после изменения его конфигурации и в конечном итоге добавить новое CNAME в конфигурацию DNS
realtebo
3

В RHEL / CentOS Apache загружает /etc/httpd/conf.d/phpmyadmin.conf для установки псевдонима / phpmyadmin. Директива Directory также изначально настроена на разрешение трафика только от localhost, поэтому вы можете получить ошибку 403 при доступе к phpmyadmin, например, «domain.com/phpmyadmin».

Используя следующее, вы можете настроить RHEL / CentOS так, чтобы псевдоним / phpmyadmin работал только с определенного виртуального хоста.

/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

Затем добавьте директиву псевдонима вашему vhost и перезапустите Apache.

Обратите внимание, это не самая безопасная реализация. Пожалуйста, позаботьтесь о том, чтобы обеспечить безопасность / phpmyadmin через аутентификацию, ограничения IP или их комбинацию.

Liam
источник