Я заметил, что на моем сайте есть странные запросы на поиск phpmyadmin, например
/phpmyadmin/
/pma/
и др.
Теперь я установил PMA на Ubuntu через apt и хотел бы получить к нему доступ через webaddress, отличную от /phpmyadmin/. Что я могу сделать, чтобы изменить его?
Спасибо
Обновление
Для Ubuntu 9.10 и Apache2 соответствующий параметр находится в файле /etc/apache2/conf.d/phpmyadmin.conf
, который является ссылкой на /etc/phpmyadmin/apache.conf
. Файл содержит
Alias /phpmyadmin /usr/share/phpmyadmin
где первый /phpmyadmin
следует изменить на что-то другое, если вы хотите избежать ненужной активности, например:
Alias /secret /usr/share/phpmyadmin
Самая большая угроза заключается в том, что злоумышленник может использовать уязвимость, такую как; обход каталога или использование SQL Injection для вызова load_file()
для чтения имени пользователя/пароля обычного текста в файле конфигурации, а затем для входа в систему с использованием phpmyadmin или через порт tcp 3306. В качестве пентэстера я использовал этот шаблон атаки для компрометации системы.
Вот отличный способ заблокировать phpmyadmin:
grant
или file_priv
.file_priv
от каждой учетной записи. file_priv
является одной из самых опасных привилегий в MySQL, поскольку позволяет злоумышленнику читать файлы или загружать бэкдор.Order deny,allow Deny from all allow from 199.166.210.1
У вас нет предсказуемого расположения файлов, например: http://127.0.0.1/phpmyadmin
. Сканеры уязвимостей, такие как Nessus/Nikto/Acunetix/w3af, будут проверять это.
Брандмауэр отключен от порта 3306 tcp, чтобы злоумышленник не смог получить доступ.
Одна из моих проблем с phpMyAdmin заключалась в том, что по умолчанию все пользователи MySQL могут получить доступ к db. Если пароль администратора БД взломан, кто-то может разрушить хаос на db. Я хотел найти способ избежать этого, ограничив, какой пользователь MySQL может войти в phpMyAdmin.
Я нашел, что использование конфигурации AllowDeny в PhpMyAdmin очень полезно. http://wiki.phpmyadmin.net/pma/Config#AllowDeny_.28rules.29
AllowDeny позволяет настроить доступ к phpMyAdmin аналогично Apache. Если вы установите "порядок" в явном виде, он предоставит доступ только пользователям, определенным в разделе "правила". В разделе правил вы ограничиваете пользователей MySql, которые могут получить доступ, используйте phpMyAdmin.
$cfg['Servers'][$i]['AllowDeny']['order'] = 'explicit'
$cfg['Servers'][$i]['AllowDeny']['rules'] = array('pma-user from all')
Теперь у вас ограниченный доступ к пользователю с именем pma-user в MySQL, вы можете предоставить ограниченный доступ этому пользователю.
grant select on db_name.some_table to 'pma-user'@'app-server'
$cfg['Servers'][$i]['AllowDeny']['rules'] = array('allow pma-user from all');
В новых версиях прав доступа phpMyAdmin для имен пользователей + ip-адреса можно настроить внутри файла phpMyAdmin config.inc.php. Это намного лучший и более надежный способ ограничения доступа (по URL-адресам жесткого кодирования и IP-адресам в Apache httpd.conf).
Вот полный пример того, как переключиться на белый список всех пользователей (никому из этого списка не будет разрешен доступ), а также как ограничить root пользователя только локальной системой и сетью.
$cfg['Servers'][$i]['AllowDeny']['order'] = 'deny,allow';
$cfg['Servers'][$i]['AllowDeny']['rules'] = array(
'deny % from all', // deny everyone by default, then -
'allow % from 127.0.0.1', // allow all local users
'allow % from ::1',
//'allow % from SERVER_ADDRESS', // allow all from server IP
// allow user:root access from these locations (local network)
'allow root from localhost',
'allow root from 127.0.0.1',
'allow root from 10.0.0.0/8',
'allow root from 172.16.0.0/12',
'allow root from 192.168.0.0/16',
'allow root from ::1',
// add more usernames and their IP (or IP ranges) here -
);
Источник: Как установить и защитить phpMyAdmin на localhost для Windows
Это дает вам гораздо более мелкие ограничения доступа, чем разрешения URL-адреса Apache, или файл .htaccess может предоставлять на уровне имени пользователя MySQL.
Убедитесь, что пользователь, с которым вы входите, имеет поле MySQL Host:
, установленное в 127.0.0.1
или ::1
, так как phpMyAdmin и MySQL находятся в одной системе.
Другое решение - использовать конфигурационный файл без каких-либо настроек. В первый раз вам, возможно, придется включить свой логин/пароль root в mysql, чтобы он мог установить все его материалы, но затем удалить его.
$cfg ['Servers'] [$ i] ['auth_type'] = 'cookie';
$cfg ['Servers'] [$ i] ['host'] = 'localhost';
$cfg ['Servers'] [$ i] ['connect_type'] = 'tcp';
$cfg ['Servers'] [$ i] ['compress'] = false;
$cfg ['Servers'] [$ i] ['extension'] = 'mysql';
Оставляя это как без алиасов apache/lighhtpd, вы просто представите вам экран входа.
Вы можете войти в систему с помощью root, но рекомендуется создавать другие пользователи и разрешать root для локального доступа. Также не забудьте использовать строковые пароли, даже если короткие, но с капиталом и количеством специального символа. например !34sy2rmbr!
aka "easy 2 запомнить"
-EDIT: Хороший пароль теперь на днях - это что-то вроде слов, которые не делают грамматического смысла, но вы можете вспомнить, потому что они забавные. Или используйте keepass для создания сильных randoms, у которых есть легкий доступ к ним.
Скорее всего, где-то на вашем веб-сервере будет директива Alias, например:
Alias /phpmyadmin "c:/wamp/apps/phpmyadmin3.1.3.1/"
В моей настройке wampserver/localhost это было в c:/wamp/alias/phpmyadmin.conf.
Просто измените директиву псевдонима, и вам должно быть хорошо идти.
Если вы используете Linux-сервер:
Эта система достаточно безопасна/удобна для домовладельцев - обычно со всеми заблокированными по умолчанию портами. Вам нужно только переслать SSH-порт (не использовать номер 22).
Если вам нравится Microsoft Terminal Server, вы даже можете настроить SSH Tunneling на свой компьютер и безопасно подключиться к веб-серверу через него.
С помощью ssh tunneling вы даже можете перенаправить порт 3306 своего удаленного сервера на локальный порт и подключиться с помощью локального phpMyAdmin или MySQL Workbench.
Я понимаю, что этот параметр является излишним, но настолько же безопасен, как и доступ к вашему закрытому ключу.
Лучший способ защитить phpMyAdmin - это комбинация всех этих 4:
1. Change phpMyAdmin URL
2. Restrict access to localhost only.
3. Connect through SSH and tunnel connection to a local port on your computer
4. Setup SSL to already encrypted SSH connection. (x2 security)
Вот как это сделать: Настройка Ubuntu 16.4 + Apache 2 Компьютер Windows + PuTTY для подключения и туннелирования подключения SSH к локальному порту:
# Secure Web Serving of phpMyAdmin (change URL of phpMyAdmin):
sudo nano /etc/apache2/conf-available/phpmyadmin.conf
/etc/phpmyadmin/apache.conf
Change: phpmyadmin URL by this line:
Alias /newphpmyadminname /usr/share/phpmyadmin
Add: AllowOverride All
<Directory /usr/share/phpmyadmin>
Options FollowSymLinks
DirectoryIndex index.php
AllowOverride Limit
...
sudo systemctl restart apache2
sudo nano /usr/share/phpmyadmin/.htaccess
deny from all
allow from 127.0.0.1
alias phpmyadmin="sudo nano /usr/share/phpmyadmin/.htaccess"
alias myip="echo ${SSH_CONNECTION%% *}"
# Secure Web Access to phpMyAdmin:
Make sure pma.yourdomain.com is added to Let Encrypt SSL configuration:
https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-16-04
PuTTY => Source Port (local): <local_free_port> - Destination: 127.0.0.1:443 (OR localhost:443) - Local, Auto - Add
C:\Windows\System32\drivers\etc
Notepad - Run As Administrator - open: hosts
127.0.0.1 pma.yourdomain.com
https://pma.yourdomain.com:<local_free_port>/newphpmyadminname/ (HTTPS OK, SSL VPN OK)
https://localhost:<local_free_port>/newphpmyadminname/ (HTTPS ERROR, SSL VPN OK)
# Check to make sure you are on SSH Tunnel
1. Windows - CMD:
ping pma.yourdomain.com
ping www.yourdomain.com
# See PuTTY ports:
netstat -ano |find /i "listening"
2. Test live:
https://pma.yourdomain.com:<local_free_port>/newphpmyadminname/
Если вы в состоянии сделать все это успешно,
you now have your own url path for phpmyadmin,
you denied all access to phpmyadmin except localhost,
you connected to your server with SSH,
you tunneled that connection to a port locally,
you connected to phpmyadmin as if you are on your server,
you have additional SSL conenction (HTTPS) to phpmyadmin in case something leaks or breaks.
Самый простой способ - отредактировать веб-сервер, скорее всего, установить Apache2, настроить и дать phpmyadmin другое имя.
Второй подход заключается в том, чтобы ограничить IP-адреса, из которых можно получить доступ к phpmyadmin (например, только локальный локальный или локальный хост).
Вы можете использовать следующую команду:
$ grep "phpmyadmin" $path_to_access.log | grep -Po "^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" | sort | uniq | xargs -I% sudo iptables -A INPUT -s % -j DROP
Объяснение:
Удостоверьтесь, что ваш IP-адрес не указан перед прохождением через iptables!
Сначала будут найдены все строки в $path_to_access.log, в которых есть phpmyadmin,
затем выгрузите ip-адрес с начала строки,
затем сортировать и уникально их,
затем добавьте правило, чтобы удалить их в iptables
Опять же, просто отредактируйте в echo %
в конце вместо команды iptables, чтобы убедиться, что ваш IP-адрес там отсутствует. Не производите непреднамеренный запрет доступа к серверу!
Ограничения
Вам может потребоваться изменить grep-часть команды, если вы находитесь на Mac или любой системе, у которой нет grep -P. Я не уверен, что все системы начинаются с xargs, поэтому их также необходимо установить. Это очень полезно, если вы делаете много bash.