J'ai remarqué qu'il y avait d'étranges requêtes sur mon site Web qui tentaient de trouver phpmyadmin, comme
/phpmyadmin/
/pma/
etc.
Maintenant, j'ai installé PMA sur Ubuntu via apt et j'aimerais y accéder via une adresse Web différente de/phpmyadmin /. Que puis-je faire pour le changer?
Merci
Mettre à jour
Pour Ubuntu 9.10 et Apache2, le paramètre correspondant se trouve dans le fichier /etc/Apache2/conf.d/phpmyadmin.conf
qui est un lien vers /etc/phpmyadmin/Apache.conf
. Le fichier contient
Alias /phpmyadmin /usr/share/phpmyadmin
où le premier /phpmyadmin
devrait être changé en quelque chose de différent si on veut éviter l'activité inutile, par exemple:
Alias /secret /usr/share/phpmyadmin
La plus grande menace est qu'un attaquant pourrait exploiter une vulnérabilité telle que; travers de répertoire ou en utilisant SQL Injection pour appeler load_file()
pour lire le nom d'utilisateur/mot de passe en texte brut dans le fichier de configuration, puis vous connecter en utilisant phpmyadmin ou sur le port tcp 3306. En tant que pentester, j'ai utilisé ce modèle d'attaque pour compromettre un système.
Voici un excellent moyen de verrouiller phpmyadmin:
grant
ni file_priv
. file_priv
de chaque compte. file_priv
est l’un des privilèges les plus dangereux dans MySQL car il permet à un attaquant de lire des fichiers ou de télécharger une porte dérobée. Order deny,allow Deny from all allow from 199.166.210.1
Ne pas avoir un emplacement de fichier prévisible comme: http://127.0.0.1/phpmyadmin
. Les scanners de vulnérabilité tels que Nessus/Nikto/Acunetix/w3af le rechercheront.
Pare-feu du port tcp 3306 afin qu’un attaquant ne puisse y accéder.
Une de mes préoccupations avec phpMyAdmin était que, par défaut, tous les utilisateurs de MySQL peuvent accéder à la base de données. Si le mot de passe root de la base de données est compromis, quelqu'un peut faire des dégâts sur la base de données. Je voulais trouver un moyen d'éviter cela en limitant quel utilisateur de MySQL peut se connecter à phpMyAdmin.
J'ai trouvé très utile d'utiliser la configuration AllowDeny dans PhpMyAdmin. http://wiki.phpmyadmin.net/pma/Config#AllowDeny_.28rules.29
AllowDeny vous permet de configurer l'accès à phpMyAdmin de la même manière qu'à Apache. Si vous définissez 'ordre' sur explicite, il n'accordera l'accès qu'aux utilisateurs définis dans la section 'règles'. Dans les règles, vous restreignez l'accès aux utilisateurs de MySql qui utilisent phpMyAdmin.
$cfg['Servers'][$i]['AllowDeny']['order'] = 'explicit'
$cfg['Servers'][$i]['AllowDeny']['rules'] = array('pma-user from all')
Maintenant que vous avez un accès limité à l'utilisateur nommé pma-user dans MySQL, vous pouvez accorder des privilèges limités à cet utilisateur.
grant select on db_name.some_table to 'pma-user'@'app-server'
Dans les versions plus récentes de phpMyAdmin, des autorisations d'accès pour les noms d'utilisateur et les adresses ip peuvent être définies dans le fichier config.inc.php de phpMyAdmin. Il s'agit d'une méthode beaucoup plus efficace et plus robuste pour limiter l'accès (au-delà d'un codage en dur des adresses URL et IP dans le fichier httpd.conf d'Apache).
Voici un exemple complet sur la façon de passer à la liste blanche de tous les utilisateurs (aucun utilisateur en dehors de cette liste ne sera autorisé à y accéder), mais également sur la manière de restreindre l'utilisateur root au système et au réseau locaux uniquement.
$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 -
);
Source: Comment installer et sécuriser phpMyAdmin sur localhost pour Windows
Cela vous donne beaucoup plus de restrictions d'accès détaillées que les autorisations d'URL d'Apache ou qu'un fichier .htaccess ne peut fournir, au niveau du nom d'utilisateur MySQL.
Assurez-vous que l'utilisateur avec lequel vous vous connectez a son champ MySQL Host:
défini sur 127.0.0.1
ou ::1
, car phpMyAdmin et MySQL sont sur le même système.
Une autre solution consiste à utiliser le fichier de configuration sans aucun paramètre. La première fois, vous devrez peut-être inclure votre nom d'utilisateur/mot de passe mysql root afin qu'il puisse installer tout son contenu, puis le supprimer.
$ 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';
Le laisser comme ça sans aucun alias Apache/lighhtpd ne vous présentera qu'un écran de connexion .
Vous pouvez vous connecter avec root, mais il est conseillé de créer d'autres utilisateurs et de n'autoriser que root pour un accès local. Pensez également à utiliser des mots de passe de chaîne, même courts mais avec une majuscule et le nombre de caractères spéciaux. par exemple !34sy2rmbr!
aka "easy 2 Remember"
-EDIT: Un bon mot de passe maintenant, jours, est en réalité quelque chose qui ressemble à des mots qui ne donne aucun sens grammatical mais vous pouvez vous en souvenir car ils sont drôles . Ou utilisez keepass pour générer de fortes randonnées et y avoir un accès facile
Très probablement, quelque part sur votre serveur Web sera une directive Alias comme ceci;
Alias /phpmyadmin "c:/wamp/apps/phpmyadmin3.1.3.1/"
Dans ma configuration wampserver/localhost, il se trouvait dans c: /wamp/alias/phpmyadmin.conf.
Il suffit de changer la directive alias et vous devriez être prêt à partir.
Si vous utilisez un serveur linux:
Ce système est assez sécurisé/pratique pour les serveurs domestiques (généralement avec tous les ports bloqués par défaut). Il vous suffit de transférer le port SSH (n'utilisez pas le numéro 22).
Si vous aimez Microsoft Terminal Server, vous pouvez même définir un tunneling SSH sur votre ordinateur et vous connecter en toute sécurité à votre serveur Web.
Avec ssh tunneling vous pouvez même transférer le port 3306 de votre serveur distant vers un port local et vous connecter en utilisant phpMyAdmin ou MySQL Workbench.
Je comprends que cette option est excessive, mais qu’elle est aussi sécurisée que l’accès à votre clé privée.
Le meilleur moyen de sécuriser phpMyAdmin est la combinaison de tous ces 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)
Voici comment faire tout cela avec: Ubuntu 16.4 + Installation d’Apache 2 Ordinateur Windows + PuTTY pour connecter et tunnelliser la connexion SSH à un port local:
# 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's 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/
Si vous êtes capable de faire tout cela avec succès,
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.
La méthode la plus simple consiste à modifier le serveur Web, probablement une installation d’Apache2, à configurer et à donner à phpmyadmin un nom différent.
Une deuxième approche consisterait à limiter les adresses IP à partir desquelles phpmyadmin est accessible (par exemple, uniquement les réseaux locaux ou locaux).
Vous pouvez utiliser la commande suivante:
$ 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
Explication:
Assurez-vous que votre adresse IP n'est pas répertoriée avant de passer à travers iptables drop !!
Cela va d'abord trouver toutes les lignes dans $ path_to_access.log qui contiennent phpmyadmin,
puis grep l'adresse ip depuis le début de la ligne,
puis les trier et les uniques,
puis ajoutez une règle pour les déposer dans iptables
Encore une fois, il suffit de modifier echo %
à la fin au lieu de la commande iptables pour vous assurer que votre adresse IP n'y figure pas. Ne bannissez pas par inadvertance votre accès au serveur!
Limitations
Vous devrez peut-être modifier la partie grep de la commande si vous utilisez un ordinateur Mac ou un système ne disposant pas de grep -P. Je ne sais pas si tous les systèmes commencent par xargs, il faudra peut-être également l'installer. C'est super utile quand même si vous faites beaucoup de bash.