pg_hba.conf und pam/password/md5

Hallo,
Ich habe Postgresql 9.04 bei mir unter Ubuntu 10.04.3 LTS installiert mittels
./configure --with-openssl --with-pam --with-tcl --enable-nls
make
sudo make install

und dann im wesentlichen das Post-Installation Setup der Datei
postgres-9.0.4/INSTALL
abgearbeitet.

Der Server startet, ich kann die Testdatenbank anlegen und mich auch als User postgres anmelden.

Dann habe ich versucht, die Datei
/usr/local/pgsql/data/pg_hba.conf
anzupassen, wobei ich trust durch pam ersetzt habe; die relevanten Zeilen lauten:

TYPE DATABASE USER CIDR-ADDRESS METHOD

“local” is for Unix domain socket connections only

local all all pam

IPv4 local connections:

host all all 127.0.0.1/32 pam

IPv6 local connections:

host all all ::1/128 pam

Die Folge war, dass ich mich zwar als user postgres anmelden kann, aber kein weiterer user Zugriff auf die
Datenbank hat. (Insbesondere auch user, die ich mittels createuser angelegt habe.)

Die Ersetzung von pam durch md5 oder passwort führte dazu, dass ich mich nun nicht einmal mehr als user postgres anmelden konnte. Nach einigem Hin und Her bin ich schließlich bei der folgenden Version gelandet:

TYPE DATABASE USER CIDR-ADDRESS METHOD

“local” is for Unix domain socket connections only

local all postgres pam
local all all trust

IPv4 local connections:

host all postgres 127.0.0.1/32 pam
host all all 127.0.0.1/32 trust

IPv6 local connections:

host all postgres ::1/128 pam
host all all ::1/128 trust


Dies hat dazu geführt, dass sich postgres (als einziger Superuser) nur mittels pam anmelden kann,
jeder andere Nutzer kann sich ohne weitere Authentifizierung anmelden. Ich kann mir aber nicht
erklären, warum ich nach Änderung von pam in md5 oder passwort nicht mehr auf den Datenbankserver zugreifen kann

  • und zwar nicht mittels Terminal, ssh und phppgadmin (hierbei habe ich die Konfiguration so geändert, dass ich mich als user
    postgres über phppgadmin anmelden kann, aber eben nur mittels pam).


    Offenbar verstehe ich das Konzept der pg_hba.conf nicht richtig. Kann mir jemand einen Tipp geben, wo mein Fehler liegt?

Danke für alle Hinweise
Wolfgang

So, nachdem ich nun dem User postgres ein Passwort verpasst habe, kann ich mich auch als User postgres mittels Authentifizierungsmethode md5 anmelden. Das gleiche gilt für alle anderen User. Bleibt für mich die Frage: Wie arbeitet die Authentifizierungsmethode pam, insbesondere warum funktionierte sie beim User postgres, versagte aber bei allen anderen Usern.

Nächste Frage: Welche Authentifizierungsmethode wird als sinnvoll angesehen, wenn die Datenbank ein Webinterface bedienen soll?

Viele Grüße
Wolfgang

So, nachdem ich nun dem User postgres ein Passwort verpasst habe, kann ich mich auch als User postgres mittels Authentifizierungsmethode md5 anmelden. Das gleiche gilt für alle anderen User. Bleibt für mich die Frage: Wie arbeitet die Authentifizierungsmethode pam, insbesondere warum funktionierte sie beim User postgres, versagte aber bei allen anderen Usern.



Nächste Frage: Welche Authentifizierungsmethode wird als sinnvoll angesehen, wenn die Datenbank ein Webinterface bedienen soll?



Viele Grüße

Wolfgang

Also: pam ist eine Authentifizierungs Methode unter Linux, die mehrere Login-Verfahren zusmmenfassen kann. Z.B. mehrere LDAP-Server, Publickey-Authentifizierung und lokel per username/Passwort. So können halt verschidene Möglichkeiten des Login kombiniert werden. Das Ding ist aber eine Welf für sich :wink:

Für eine Webanwendung würde ich die die Auslagerung des Login in die Applikation empfehlen. Diese stellt dann einen zentralen Pool an Verbindungen bereit, die über einen internen Nutzer und die Applikation gemanaget werden. Gängige Webframeworks arbeite alle auf diese Weise. Vorteil: man hat die einzelnen User aus der Datenbank (viel Arbeit…) und kann in der Applikation komplexere Berechtigungsmodelle (z.B. CMS o.ä.) entwickeln als die in der Datenbank möglich wäre. AFAIR müssen die Nutzer die sich einloggen können sollen alle in der Datenbank angelegt sein.
Um das genau zu verstehen kann ich dir dem ads sein Buch und oder die Postgres-Doku empfehlen. Und viel Rumprobieren :wink:

Gruß Uwe

Hallo Gisman,

Ok. Soweit ich das verstehe, sind Datenbankuser und Betriebssystemaccounts nicht das gleiche. Wenn ich einen Betriebssystemaccount mit Namen “wolfgang” habe und einen Datenbankuser mit Namen “wolfgang”, sind das also zwei unterschiedliche Sachen. Verwende ich als Authentifizierungsmethode “trust”, dann kann sich jeder, der Zugriff auf den Server erlangt als jeder Datenbankuser anmelden - keine Sicherheit.

Verwende ich als Authentifizierungsmethode “md5” oder “passwort”, dann muss jeder sich mit einem Passwort legitimieren um auf die Datenbank zugreifen zu können. Das Passwort ist das Passwort des Datenbankusers und ist im Datenbereich von postgres gespeichert. Der Unterschied besteht darin, dass “md5” verschlüsselte Passwortübertragung macht und “Passwort” unverschlüsselte. So habe ich das verstanden.

Verwende ich “pam” als Authentifizierungsmethode, dann wird eben das PAM-Modul des Betriebssystems zur Authentifizierung verwendet. Mir ist allerdings nicht klar, wie das funktioniert. Wähle ich pam als einzige Authentifizierungsmethode aus und der Superuser (postgres) hat in der Datenbank kein Passwort, dann kann er sich doch anmelden. Lege ich weitere Datenbankuser an -egal, ob mit oder ohne Passwort- so können sich diese aber nicht anmelden. Da würde ich einen Konfigurationsfehler vermuten. Ich finde aber nicht heraus, wo der liegt. Wenn das PAM-Modul des Betriebssystems nicht für postgres konfiguriert ist, warum kann sich der User postgres dann mit seinen Betriebssystempasswort anmelden? Wenn es konfiguriert ist, warum können sich dann andere Nutzer nicht anmelden -egal, ob mit Betriebssystempasswort oder datenbankspezifischem Passwort-

Grundsätzlich würde ich erwarten, wenn PAM die Authentifizierung übernimmt, dass dann die Passwörter nicht im Datenbereich von postgres abgespeichert werden. Das passt dazu, wie die Anmeldung des Superusers funktioniert. Aber wie funktioniert dann die Anmeldung von Datenbankusern, die keinen Betriebssystemaccount haben? Ich finde das Kapitel 19.3.10 des postgresql Handbuchs in dieser Hinsicht überhaupt nicht erhellend. Auch der Hinweis auf die Linux-PAM-Page hat mir da nicht wirklich weitergeholfen. Deshalb hatte ich gehofft, hier hätte irgendjemand schon einmal diese Authentifizierungsmethode erfolgreich angewendet.


Gut. Nehmen wir an, ich möchte Wordpress mit einer Postgresql-Datenbank betreiben. Dann hätte ich z.B. einen Betriebssystemnutzer wordpress, der auf die Daten im html-Bereich zugreifen darf (bei mir /var/www/wordpress) und der auf die Datenbank zugreifen darf. Jeder Datentransfer zwischen wordpress und der Datenbank wird über diesen User abgewickelt. Datenbankpasswort und Passwort des Useraccounts unterscheiden sich, weil das Datenbankpasswort im Quelltext in irgendeiner php-Datei auftaucht.

Viele Grüße
Wolfgang

Das ist richtig.



Verwende ich “pam” als Authentifizierungsmethode, dann wird eben das PAM-Modul des Betriebssystems zur Authentifizierung verwendet. Mir ist allerdings nicht klar, wie das funktioniert. Wähle ich pam als einzige Authentifizierungsmethode aus und der Superuser (postgres) hat in der Datenbank kein Passwort, dann kann er sich doch anmelden. Lege ich weitere Datenbankuser an -egal, ob mit oder ohne Passwort- so können sich diese aber nicht anmelden. Da würde ich einen Konfigurationsfehler vermuten. Ich finde aber nicht heraus, wo der liegt. Wenn das PAM-Modul des Betriebssystems nicht für postgres konfiguriert ist, warum kann sich der User postgres dann mit seinen Betriebssystempasswort anmelden? Wenn es konfiguriert ist, warum können sich dann andere Nutzer nicht anmelden -egal, ob mit Betriebssystempasswort oder datenbankspezifischem Passwort-

Per Default gibt es am Anfang der pg_hba.conf zwei Zeilen, die den Unix User “postgres” mittels “ident” Verfahren in die Datenbank lassen.


Nehmen wir an, ich möchte Wordpress mit einer Postgresql-Datenbank betreiben.

Geht das überhaupt?

Es gibt ein PlugIn für

Jetzt sagt mir nicht, ich müsste langsam mein Blog umstellen …

Nuja… wie es nunmal so ist… Einfach mal in ner Sandbox ausporbieren… und wenns Stabil und den Aufwand wert ist, kann man es auch umstellen.
Der Elefant ist mir schon seit Jahren sympathischer als der Delfin…
Der Delfin hat aber immer noch die größere Base… ändert sich hoffentlich mit der Ernennung des Elefanten zum “Hoflieferant” :wink: