• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst]MariaDB: Zugriff verweigert für phpMyAdmin

halo44

Hacker
Derzeit teste ich die Suse 13.2-64 nach dem Upgrade auf meinem Notebook. Meine MariaDB kann ich wohl über CLI aber nicht über phpMyAdmin nutzen. Will ich hierüber zugreifen erhalte ich die Meldung
Zugriff verweigert!
Der Zugriff auf das angeforderte Verzeichnis ist nicht möglich. Entweder ist kein Index-Dokument vorhanden odfer das Verzeichnis ist zugriffsgeschützt.
Nach dem Upgrade wollte sich zunächst mysql.service nicht starten lassen, da für die vorhandene Datenbank ein Upgrade erforderlich sei. Dies sei zu bewerkstelligen mit
Code:
touch /var/lib/mysql/.force_upgrade
rcmysql restart
Danach konnte ich über die Konsole auf die Datenbank zugreifen und alle Funktionen ausführen. Nur über phpMyAdmin erhalte ich den erwähnten Fehler.

Die Datenbank führe ich auf meinem Desktoprechner. Bei Änderungen exportiere ich sie per mysqldump und übertrage sie per scp zum Notebook, wo ich sie dann importiere. Anschließend kann ich auch auf dem Notebook damit arbeiten.

Die Versionen der beteilgten Komponenten auf den Rechnern (Desktop / Notebook) :
MariaDB -------------> 5.5.33 bzw. 10.0.13
Apache2 -------------> 2.4.6-33.1 bzw. 2.4.10-1.1
phpMyAdmin -------> 4.1.14.6-20.1 bzw. 4.2.10.1-1.1
yast2-http-server ---> 3.0.1-2.1.4 bzw. 3.1.5-1.3
Welche Informationen könnte ein freundlicher Helfer noch benötigen?

Gruss H.
 

panamajo

Guru
halo44 schrieb:
Zugriff verweigert!
Der Zugriff auf das angeforderte Verzeichnis ist nicht möglich. Entweder ist kein Index-Dokument vorhanden odfer das Verzeichnis ist zugriffsgeschützt.
Wenn mich nicht alles täuscht ist das die Fehlermeldung vom Apache wenn er unter der angegebenen URL nichts findet und das Auflisten des Verzeichnisses nicht erlaubt ist.
Also zurück zur PMA & Apache Konfiguration, mit MariaDB hat das nichts zu tun.
 
OP
H

halo44

Hacker
panamajo schrieb:
Wenn mich nicht alles täuscht ist das die Fehlermeldung vom Apache wenn er unter der angegebenen URL nichts findet und das Auflisten des Verzeichnisses nicht erlaubt ist.
Also zurück zur PMA & Apache Konfiguration, mit MariaDB hat das nichts zu tun.

Verstehst Du unter URL die http://localhost/phpMyAdmin ?

Was soll ich noch konfigurieren? Bisher mußte ich z.B. die config.inc.php nicht anfassen. Die Anwahl der Konfiguration des Apache2-Servers über YaST meldet mir
Ihre Netzwerkschnittstellen werden zurzeit von NetworkManager gesteuert, der zu konfigurierende Dienst arbeitet jedoch möglicherweise nicht einwandfrei damit zusammen. Wirklich fortfahren?
was sie unter 13.1 nicht tat. Wenn ich fortfahren wähle, finde ich die gleichen Einstellungen wie auf meinem Desktoprechner mit 13.1.

Was kann ich noch tun?

Gruss H.
 

panamajo

Guru
Dass du die config.inc.php nicht anpassen musstest kann nicht sein, denn dort müssen Zugangsdaten zur DB drinstehen.
Wie hast du den PMA überhaupt installiert, per Paket? Was hast du beim Apache konfiguriert?
 
OP
H

halo44

Hacker
@panamajo
Vorab zu Deiner Information: ich habe mich noch nicht sehr lange mit mysql und phpMyAdmin beschäftigt. Wie bei allen für mich neuen Dingen dokumentiere ich für mich, was ich jeweils gemacht habe. Dazu weiter unter mehr.

panamajo schrieb:
Dass du die config.inc.php nicht anpassen musstest kann nicht sein, denn dort müssen Zugangsdaten zur DB drinstehen ...
Wenn Du unter Zugangsdaten zur DB diese Zeile meinst
Code:
$cfg['PmaAbsoluteUri'] = '';
so habe ich diese weder auf dem Desktoprechner noch auf dem Notebook angepasst. Auf dem Desktoprechner läuft phpMyAdmin damit.

panamajo schrieb:
... Wie hast du den PMA überhaupt installiert, per Paket? Was hast du beim Apache konfiguriert?

Ich habe phpMyAdmin, yast2-http-server und apache2 aus den openSUSE Paketquellen per YaSTinstalliert.

Was PMA angeht, so finde ich in meinen Notizen folgenden Satz:
Der Fehler „1146 - Table 'phpmyadmin.pma_table_uiprefs' doesn't exist“ trat anfänglich bei mir auf,
war aber nach Neuinstallation verschwunden.
Weiter finde ich zur config.inc.php:
Da ich bei der bereits vorher erstellten MySQL-Datenbank eine Anmeldung ohne Passwort
erlaubt hatte, musste ich dies auch für phpMyAdmin so konfigurieren. Daher in der Datei
/etc/phpMyAdmin/config.inc.php die Zeile $cfg['Servers'][$i]['AllowNoPassword']
auf true geändert.
Weiter habe ich keine Anpassungen vorgenommen.

Gruss H.
 
OP
H

halo44

Hacker
Vielleicht sagen ja auch diese Ausgaben ins error log dem Kundigen etwas
[Tue Nov 11 09:22:40.352662 2014] [mpm_prefork:notice] [pid 2082] AH00163: Apache/2.4.10 (Linux/SUSE) PHP/5.6.1 configured -- resuming normal operations
[Tue Nov 11 09:22:40.352894 2014] [core:notice] [pid 2082] AH00094: Command line: '/usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D SYSTEMD -D FOREGROUND'
[Tue Nov 11 09:23:07.174228 2014] [authz_core:error] [pid 2102] [client 127.0.0.1:39884] AH01630: client denied by server configuration: /srv/www/htdocs/phpMyAdmin/
[Tue Nov 11 09:23:07.276026 2014] [authz_core:error] [pid 2102] [client 127.0.0.1:39884] AH01630: client denied by server configuration: /srv/www/htdocs/favicon.ico
[Tue Nov 11 09:23:07.278182 2014] [authz_core:error] [pid 2102] [client 127.0.0.1:39884] AH01630: client denied by server configuration: /srv/www/htdocs/favicon.ico
Jedenfalls betreffen sie die Authorisierung, wie auch die eingangs erwähnte Fehlermeldung
Zugriff verweigert!
Der Zugriff auf das angeforderte Verzeichnis ist nicht möglich. Entweder ist kein Index-Dokument vorhanden odfer das Verzeichnis ist zugriffsgeschützt.

Weiter finde ich in der /etc/apache/httpd.conf folgende unterschiedliche Einträge, so beim Notebook:
Code:
# forbid access to the entire filesystem by default
<Directory />
    Options None
    AllowOverride None
    Require all denied
</Directory>

# use .htaccess files for overriding,
AccessFileName .htaccess
# and never show them
<Files ~ "^\.ht">
    Require all denied
und beim Desktoprechner:
Code:
# forbid access to the entire filesystem by default
<Directory />
    Options None
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

# use .htaccess files for overriding,
AccessFileName .htaccess
# and never show them
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
Sollte ich (was?) hier ändern?

Edit : ich habe geändert und daraufhin auch Zugriff. Ich markiere als gelöst!

Gruss H.
uss H.
 
OP
H

halo44

Hacker
josef-wien schrieb:
Und warum verheimlichst Du der Nachwelt, was Du geändert hast?
Ich glaubte, daß dies klar sei. Die Einstellungen in den Abschnitten <Directory> und <Files> der /etc/apache2/httpd.conf habe ich beim Notebook auf die beim Desktoprechner festgelegten geändert.

Also in beiden Abschnitten
Code:
Require all denied
entfernt und
Code:
Order deny,allow
Deny from all
eingesetzt.

Gruss H.
 

marce

Guru
Du weißt aber schon, daß Du damit eine Direktive nutzt, die der (neue) Apache eigentlich nicht mehr kennt und so auch nicht unterstützt? Seit 13.2 wird eben nicht mehr Apache 2.2 sondern 2.4 verwendet.

http://httpd.apache.org/docs/current/upgrading.html

... ich hab's noch nicht ausproibiert, wie er da reagiert, aber ich würde vermuten, daß dies zumindest eine Warnung erzeugt, sie ignoriert und damit ggf. das komplette /-Verzeichnis für den Apache offen wäre und für Lese-Attacken bereit...
 
OP
H

halo44

Hacker
marce schrieb:
Du weißt aber schon, daß Du damit eine Direktive nutzt, die der (neue) Apache eigentlich nicht mehr kennt und so auch nicht unterstützt? Seit 13.2 wird eben nicht mehr Apache 2.2 sondern 2.4 verwendet ...
Auch mein Desktoprechner, auf dem noch 13.1 läuft, arbeitet schon mit Apache 2.4.6. Und dort hab ich mir die Einstellung abgeguckt. Als ich vor einem Vierteljahr begann mich erstmals mit Mysql und Apache2 zu beschäftigen, hat der Indianer mir dies so (ohne mein Zutun) eingerichtet. Dann wird er es wohl auch unterstützen. Zumindest läuft jetzt mein Notebook mit der angepassten Einstellung.

Gruss H.
 

marce

Guru
Dann mach auf beiden die Einstellungen doch einfach richtig und nach der Syntax der verwendeten Version.

Bei allem anderen kannst Du Dir nämlich nicht sicher sein, was ggf. Nebenwirkungen davon sind. Ok, auf einem Desktop-Rechner mag das nicht relevant sein, aber stell Dir mal vor was passieren kann, wenn jemand den Thread hier entdeckt und einfach die Einstellungen per C&P auf einen richtigen Server kopiert - "weil es tut ja dann".

Deny from / Allow from wird in Apache 2.4 nicht mehr unterstützt und sollte durch die Require-Anweisung ersetzt werden. Und ein nicht gesetztes Deny from all oder eben Require all denied entspricht nun halt mal am ehesten einem Allow from all.
 
OP
H

halo44

Hacker
marce schrieb:
Dann mach auf beiden die Einstellungen doch einfach richtig und nach der Syntax der verwendeten Version ...
Leicht gesagt zu einem Neuling in Mysql und Apache.

Trotzdem habe ich mal in beiden Abschnitten eingesetzt
Code:
Require all granted
womit mein phpMyAdmin ebenfalls läuft.

Solltest Du jetzt feststellen, daß auch das unsicher ist, so muß ich Dich schon bitten, mir bei der richtigen Einstellung zu helfen. Wobei ich mir nicht vorstellen kann, wie ein Eindringling auf meine lokale Datenbank (http://localhost/phpMyAdmin/) kommen kann. Mein Notebook hängt zu 90% am LAN. Bei den restlichen 10% sind die Dienste mysql und apache2 nicht aktiviert, zumal ich auch keinen Server nach aussen anbiete.

Danke, daß Du Dich bei meinem "Problem" engagierst.

Gruss H.
 

marce

Guru
schauen wir uns mal an, was Du nun hast:

Freier Zugriff auf / des Servers. Wenn Du also dort irgendwie was komisch defniierst kann über http die passwd und evtl. die shadow ausgelesen werden. Eher suboptimal.

Der Sinn der Standard-Konfiguration ist erst mal, alles zu verbieten. Und dann gibt man das frei, was man braucht.

Sprich Du schaust nach, wo Dein phpMyAdmin liegt und setzt dann ind der Definiton (vermutlich irgendein Alias, sofern es nicht als UVZ in htdocs liegt) im dortigen Directory-Block die Zugfriffsrechte. Gern wird für phpMyAdmin dort z.B. auch nicht ein "all" genommen sondern eine Liste von Hosts, die darauf zugreifen dürfen. Z.B. nur der Rechner sellbst (weil mal lokal entwickelt) während für das Joomla gerne mal all genommen wird, damit auch Kollegen oder andere PCs im Firmen- oder Heimnetz sich die Seiten anschauen könnren.

Bei einer Neuinstallation wäre das vermutlich alles von selbst gegangen - aber Du hast ein Update gefahren und dabei werden bestehende Konfigurationsfiles (normalerweise) nicht angefasst - und damit verwendest Du Direktiven, die der Apache nicht mehr mag, hast damit keine Freigabe auf Deine Web-Verzeichnisse und damit einen hübschen 403er.
 
OP
H

halo44

Hacker
Danke für die Anregungen. Ich werde mich morgen damit beschäftigen.

Schönen Abend noch.

Gruss H.
 
OP
H

halo44

Hacker
So, ich habe mich nun noch etwas in der Apache2-Dokumentation umgesehen und hoffentlich auch richtig verstanden.

Ich habe jetzt Zugriff auf meine Datenbank per phpMyAdmin mit den folgenden Einstellungen in der httpd.conf :
Code:
<Directory /Pfad zu meiner mysql Datenbank>
    Options None
    AllowOverride None
    Require ip Liste meiner lokalen IPs
</Directory>

# use .htaccess files for overriding,
AccessFileName .htaccess
# and never show them
<Files ~ "^\.ht">
    Require all denied
</Files>
Kommentare werden gerne entgegen genommen.

Gruss H.
 

marce

Guru
ch hoffe, Du meinst "Pfad zu phpMyAdmin" (also sowas wie z.B. /var/http/phpMyAdmin oder wo auch immer das in der Standard-Installation aus den Paketen liegt) - weil auf die Datenbankfiles (so Du sowas wie /var/llib/mysql sollte der Apache ganz sicher keinen Zugriff haben.

Tip: Mal Dir mal auf (ja, so richtig Analog, mit Stift + Papier) was denn auf Deinem System die Services / Server-Prozese und die Clients / Client-Prozesse sind und wie da jeweils drauf zugegriffen wird. Und dann schreib Dir mal dazu, welche Rechte (im weitesten Sinn) dafür benötigt werden.

Dir scheint der grundsätzliche Kommunikations-Ablauf zwischen http-Client / Browser, Web-Server, Datenbank-Server und den jeweiligen Rechte-Mechanismen noch nicht so recht klar zu sein - zumindest stellt sich das an dieser Stelle so dar.
 
OP
H

halo44

Hacker
marce schrieb:
ch hoffe, Du meinst "Pfad zu phpMyAdmin" ...
Ich finde auf beiden Rechnern ein Verzeichnis /srv/www/htdocs/phpMyAdmin. Wenn ich dieses in die httpd.conf eintrage, erhalte ich beim Zugriffsversuch den 403-Fehler.

Trage ich den Pfad zum Unterverzeichnis phpmyadmin meines mysql-Verzeichnisses ein, also z.B. /Verzeichnisname/mysql/phpmyadmin, dann habe ich Zugriff.

Zur Klarstellung: unterhalb von /Verzeichnisname/mysql finden sich die Unterverzeichnisse
MeineDatenbank
mysql
performance_schema
phpmyadmin
pma
test
die ja wohl alle Datenbanken sind.

Ist also phpmyadmin aus dieser Liste der richtige Eintrag?

marce schrieb:
Dir scheint der grundsätzliche Kommunikations-Ablauf zwischen http-Client / Browser, Web-Server, Datenbank-Server und den jeweiligen Rechte-Mechanismen noch nicht so recht klar zu sein ...
Vor allem ist mir nicht klar, was ich hiermit anfangen und wie durchführen soll :
marce schrieb:
Tip: Mal Dir mal auf (ja, so richtig Analog, mit Stift + Papier) was denn auf Deinem System die Services / Server-Prozese und die Clients / Client-Prozesse sind und wie da jeweils drauf zugegriffen wird. Und dann schreib Dir mal dazu, welche Rechte (im weitesten Sinn) dafür benötigt werden.
Aber wenn mein o.a. Directory-Eintrag soweit richtig ist, will ich vorerst damit zufrieden sein.

Gruss H.
 

panamajo

Guru
marce schrieb:
Freier Zugriff auf / des Servers. Wenn Du also dort irgendwie was komisch defniierst kann über http die passwd und evtl. die shadow ausgelesen werden. Eher suboptimal.
Kommt drauf an wie das DocumentRoot definiert ist...
Aber prinzipiell hast du Recht.
 

marce

Guru
halo44 schrieb:
Zur Klarstellung: unterhalb von /Verzeichnisname/mysql finden sich die Unterverzeichnisse
MeineDatenbank
mysql
performance_schema
phpmyadmin
pma
test
die ja wohl alle Datenbanken sind.

Ist also phpmyadmin aus dieser Liste der richtige Eintrag?
NEIN.

Das ist der Pfad zur Datenbank. Der hat mit phpMyAdmin nichts, aber so auch rein gar nichts zu tun. In die Apache-Konfig gehören die Pfade zu der Applikation phpMyAdmin - sonst nichts. Keine Datenbankpfade oder Datenbank-sonst-irgendwas.

Ich sehe aber aktuell nur eine Möglichkeit, wie das hier noch sinnvoll weiter gehen kann ohne daß "sich das mal jemand bei Dir direkt anschaut" - poste die komplette Apache-Konfiguration.

Oder lass es, sei glücklich, daß es tut (ohne zu wissen, warum :) und im schlimmsten Fall des Falles "lernst" Du es beim nächsten mal, wo Du irgendwie was an der Web-Server-Konfiguration ändern musst und dann plötzlich nichts mehr funktioniert. Oder mal die Doku zu Apache durchsehen, die Konfiguration analysieren und versuchen, zu verstehen, was welche Anweisung bedeutet und bewirkt.
 
OP
H

halo44

Hacker
Noch gebe ich nicht auf. :???:

Was hältst Du von
Code:
<Directory /srv/www/htdocs/phpMyAdmin/libraries>
Jedenfalls läufts damit.

Danke für Deine Geduld.

Gruss H.
 
Oben