Zezwalaj na dostęp do PhpMyadmin tylko na określonym wirtualnym hoście

9

Pracuję na wielu środowiskach Virtualhost. Zainstalowałem PhpMyadmin dla Mysql Remote Control.

Środowisko można skonfigurować w następujący sposób:

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

Teraz, jeśli mam dostęp do jednej z trzech domen

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

wynik jest taki sam, dostęp do Phpmyadmin jest dozwolony.

Celem jest uzyskanie sytuacji takiej jak ta poniżej

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

nie hack podobny do

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

 ...
 ?>

na jakiś plik Phpmyadmin.


Tutaj mój plik konfiguracyjny 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
źródło

Odpowiedzi:

25

Usuń deklarację aliasu

Alias /phpmyadmin /usr/share/phpmyadmin

z kontekstu serwera i umieść go w odpowiednim kontekście vhost

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

Może być łatwiej i lepiej po prostu dołączyć całą konfigurację phpmyadmin do odpowiedniego vhosta

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

a następnie usuń to z kontekstu serwera i zrestartuj apache, aby zmiany odniosły skutek.

użytkownik9517
źródło
Wydaje się, że nie działa dla mnie w Centos 6.5. Wypróbowałem obie metody i nadal mogę uzyskać do nich dostęp ze wszystkich domen.
Jeremy
Pamiętaj, aby zrestartować Apache2 po zmianie jego konfiguracji i ostatecznie dodać nową CNAME do konfiguracji DNS
realtebo
3

W RHEL / CentOS, Apache ładuje /etc/httpd/conf.d/phpmyadmin.conf, aby ustawić alias / phpmyadmin. Dyrektywa Directory jest również początkowo ustawiona tak, aby zezwalała tylko na ruch z hosta lokalnego, więc może pojawić się błąd 403 podczas uzyskiwania dostępu do phpmyadmin, np. „Domena.com/phpmyadmin”.

Korzystając z poniższych instrukcji, możesz skonfigurować RHEL / CentOS tak, aby alias / phpmyadmin działał tylko z określonego wirtualnego hosta.

/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

Następnie dodaj dyrektywę aliasową do vhosta i zrestartuj Apache.

Uwaga: nie jest to najbezpieczniejsza implementacja. Proszę zadbać o bezpieczeństwo / phpmyadmin poprzez uwierzytelnianie, ograniczenia IP lub połączenie obu.

Liam
źródło