it-swarm.com.de

So sichern Sie phpMyAdmin

Mir ist aufgefallen, dass meine Website mit merkwürdigen Anfragen versucht, phpmyadmin zu finden

/phpmyadmin/
/pma/

usw.

Jetzt habe ich PMA über apt auf Ubuntu installiert und möchte über eine andere Webadresse als/phpmyadmin/darauf zugreifen. Was kann ich tun, um es zu ändern?

Vielen Dank


Update

Für Ubuntu 9.10 und Apache2 befindet sich die entsprechende Einstellung in der Datei /etc/Apache2/conf.d/phpmyadmin.conf, die eine Verknüpfung zu /etc/phpmyadmin/Apache.conf ist. Die Datei enthält

Alias /phpmyadmin /usr/share/phpmyadmin

wobei der erste /phpmyadmin in etwas anderes geändert werden soll, wenn die unnötige Aktivität vermieden werden soll, z.

Alias /secret /usr/share/phpmyadmin
59
Andrei

Die größte Bedrohung besteht darin, dass ein Angreifer eine Schwachstelle wie z. Durchsuchen des Verzeichnisses oder Verwenden von SQL Injection zum Aufrufen von load_file() zum Lesen des Klartext-Benutzernamens/Kennworts in der Konfigurationsdatei und Anmelden mit phpmyadmin oder über TCP-Port 3306. Als Pentester habe ich dieses Angriffsmuster verwendet, um ein System zu gefährden.

Hier können Sie phpmyadmin abschließen:

  • REMOTE ROOT LOGINS NICHT ERLAUBEN! Stattdessen kann phpmyadmin so konfiguriert werden, dass "Cookie Auth" verwendet wird, um den Zugriff des Benutzers auf das System einzuschränken. Wenn Sie einige Root-Berechtigungen benötigen, erstellen Sie ein benutzerdefiniertes Konto, das/drop/create hinzufügen kann, jedoch keine grant oder file_priv enthält. 
  • Entfernen Sie die file_priv-Berechtigungen von jedem Konto. file_priv ist eine der gefährlichsten Berechtigungen in MySQL, da ein Angreifer Dateien lesen oder ein Backdoor hochladen kann. 
  • Whitelist-IP-Adresse, die Zugriff auf die phpmyadmin-Schnittstelle hat. Hier ist ein Beispiel .htaccess reulset:
Order deny,allow
Deny from all
allow from 199.166.210.1
  • Sie haben keinen vorhersagbaren Dateispeicherort wie: http://127.0.0.1/phpmyadmin. Scanner für Sicherheitslücken wie Nessus/Nikto/Acunetix/w3af werden dies prüfen. 

  • Firewall deaktiviert TCP-Port 3306, sodass ein Angreifer nicht darauf zugreifen kann. 

  • Verwenden Sie HTTPS, andernfalls können Daten und Kennwörter an einen Angreifer durchgesickert werden. Wenn Sie nicht die $ 30 für ein Zertifikat herausgreifen möchten, verwenden Sie Ein selbstsigniertes Zeichen. Sie akzeptieren es einmal, und selbst wenn es aufgrund eines MITM geändert wurde, werden Sie benachrichtigt.
81
rook

Mein Anliegen bei phpMyAdmin war, dass standardmäßig alle MySQL-Benutzer auf die Datenbank zugreifen können. Wenn das Root-Passwort der DB gefährdet ist, kann jemand die Datenbank beschädigen. Ich wollte einen Weg finden, um das zu vermeiden, indem ich einschränke, welcher MySQL-Benutzer sich bei phpMyAdmin anmelden kann.

Die Verwendung der AllowDeny-Konfiguration in PhpMyAdmin hat sich als sehr nützlich herausgestellt. http://wiki.phpmyadmin.net/pma/Config#AllowDeny_.28rules.29

Mit AllowDeny können Sie den Zugriff auf phpMyAdmin auf ähnliche Weise wie Apache konfigurieren. Wenn Sie die 'Reihenfolge' auf explizit setzen, wird nur Benutzern Zugriff gewährt, die im Abschnitt 'Regeln' definiert sind. In dem Abschnitt Regeln beschränken Sie MySql-Benutzer, auf die mit phpMyAdmin zugegriffen werden kann. 

$cfg['Servers'][$i]['AllowDeny']['order'] = 'explicit'
$cfg['Servers'][$i]['AllowDeny']['rules'] = array('pma-user from all')

Jetzt haben Sie eingeschränkten Zugriff auf den Benutzer mit dem Namen "pma-user" in MySQL. Sie können diesem Benutzer eingeschränkte Berechtigungen erteilen.

grant select on db_name.some_table to 'pma-user'@'app-server'
12
Jae Cho

In neueren Versionen von phpMyAdmin können Zugriffsberechtigungen für Benutzernamen + IP-Adressen in der Datei config.inc.php von phpMyAdmin eingerichtet werden. Dies ist eine viel bessere und robustere Methode, den Zugriff zu beschränken (über hart codierende URLs und IP-Adressen in die httpd.conf von Apache).

Im Folgenden finden Sie ein vollständiges Beispiel, wie Sie alle Benutzer auf White-List setzen können (niemand außerhalb dieser Liste wird Zugriff erhalten) und auch, wie Sie den Benutzer root auf das lokale System und das Netzwerk beschränken.

$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 -    
    );

Quelle: phpMyAdmin auf localhost für Windows installieren und sichern

Auf diese Weise erhalten Sie weitaus detailliertere Zugriffsbeschränkungen, als Apache-URL-Berechtigungen oder eine .htaccess-Datei auf MySQL-Benutzernamenebene bieten können.

Stellen Sie sicher, dass der Benutzer, bei dem Sie sich anmelden, sein MySQL-Feld Host: auf 127.0.0.1 oder ::1 gesetzt hat, da sich phpMyAdmin und MySQL auf demselben System befinden.

6
rightstuff
4
ppumkin

Wahrscheinlich wird irgendwo auf Ihrem Webserver eine Alias-Direktive wie diese sein.

Alias /phpmyadmin "c:/wamp/apps/phpmyadmin3.1.3.1/"

In meinem wampserver/localhost-Setup befand es sich in c: /wamp/alias/phpmyadmin.conf.

Ändern Sie einfach die Alias-Direktive, und Sie sollten sich auf den Weg machen.

4
Mathew

Wenn Sie einen Linux-Server betreiben:

  • Mit SSH können Sie die Benutzer-/Kennwortprotokollierung verbieten und nur einen öffentlichen Schlüssel in der Datei authorized_keys akzeptieren
  • Verwenden Sie PuTTY, um eine Verbindung zu Ihrem Server herzustellen und ein Remote-Terminal zu öffnen
  • Leiten Sie X11 weiter und bringt localhost firefox/iceweasel auf Ihren Desktop (in Windows muss Xming-Software installiert sein)
  • Jetzt haben Sie Ihren phpMyAdmin durch ssh gesichert

Dieses System ist für Homeserver recht sicher/praktisch - normalerweise werden alle Ports standardmäßig gesperrt. Sie müssen nur den SSH-Port weiterleiten (verwenden Sie nicht die Nummer 22).

Wenn Sie Microsoft Terminal Server mögen, können Sie sogar ein SSH-Tunneling für Ihren Computer einrichten und eine sichere Verbindung zu Ihrem Webserver herstellen. 

Mit ssh-Tunneling können Sie sogar den 3306-Port Ihres Remote-Servers an einen lokalen Port weiterleiten und die Verbindung über lokales phpMyAdmin oder MySQL Workbench herstellen. 

Ich verstehe, dass diese Option ein Overkill ist, aber genauso sicher ist wie der Zugriff auf Ihren privaten Schlüssel. 

2
JJFS

Der beste Weg, um phpMyAdmin zu sichern, ist die Kombination all dieser 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)

Und so machen Sie das alles mit: buntu 16.4 + Apache 2 Windows-Computer einrichten + PuTTY, um die SSH-Verbindung mit einem lokalen Port zu verbinden und zu tunneln:

# 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/

Wenn Sie dies alles erfolgreich machen können,

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.
1
Tarik

Am einfachsten ist es, den Webserver zu bearbeiten, höchstwahrscheinlich eine Apache2-Installation und -Konfiguration, und phpmyadmin einen anderen Namen zu geben.

Ein zweiter Ansatz wäre, die IP-Adressen zu begrenzen, von denen aus auf phpmyadmin zugegriffen werden kann (z. B. nur lokales LAN oder lokaler Host).

1
lexu

Sie können den folgenden Befehl verwenden:

$ 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 

Erklärung:

Vergewissern Sie sich, dass Ihre IP-Adresse nicht aufgeführt ist, bevor Sie durch iptables fallen.

Dies findet zuerst alle Zeilen in $ path_to_access.log, die phpmyadmin enthalten.

dann grep die IP-Adresse vom Zeilenanfang aus,

dann sortieren und einzigartig sie,

fügen Sie dann eine Regel hinzu, um sie in iptables abzulegen

Bearbeiten Sie einfach am Ende anstelle von iptables den Befehl echo %, um sicherzustellen, dass sich Ihre IP nicht dort befindet. Verbieten Sie nicht versehentlich den Zugriff auf den Server!

Einschränkungen

Möglicherweise müssen Sie den grep-Teil des Befehls ändern, wenn Sie mit einem Mac oder einem anderen System ohne grep -P arbeiten. Ich bin mir nicht sicher, ob alle Systeme mit xargs beginnen, daher müssen diese möglicherweise ebenfalls installiert werden. Es ist sowieso super nützlich, wenn Sie viel Bash machen.

0
Technical Blood