compile time options

Guten Tag.

Wie ermittelt man mit welchen Optionen postgres kompiliert wurde?

Ich versuche ssl anzubieten. Aus mir nicht ersichtlichen Gründe startet der
Server mit mehreren Konfigurationsvariationen nicht. Ob die openssl-Unterstützung
bei der Kompilation des db-servers berücksichtigt wurde, habe ich noch nicht
überprüft. Im log waren keine passenden Meldungen zu sehen.

Viele Grüße
George

Du könntest mal mit “ldd” das Binary anschauen, ob SSL Bibliotheken geladen werden.

Dunno, weiß nicht, ob das ersichtlich ist. Falls der Server läuft und Du mit psql angemeldet bist, kannst aber mit show ssl; nachschauen, ob SSL ‘drin’ und eingeschaltet ist.

Ich versuche ssl anzubieten. Aus mir nicht ersichtlichen Gründe startet der
Server mit mehreren Konfigurationsvariationen nicht. Ob die openssl-Unterstützung

Der Server startet nicht? Da sollten sich aber Hinweise auf die Ursache im Log finden lassen.

Andreas

Die gekennzeichnete Zeile würde besagen, dass der openssl-Schalter bei der Kompilation
aktiviert war, die ssl-Option also genutzt werden kann?

srv:~ # ldd /usr/bin/postgres
linux-vdso.so.1 => (0x00007fff7d3ec000)
libxslt.so.1 => /usr/lib64/libxslt.so.1 (0x00007f70e5b16000)
libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00007f70e57b8000)
libpam.so.0 => /lib64/libpam.so.0 (0x00007f70e55ab000)
==> libssl.so.0.9.8 => /usr/lib64/libssl.so.0.9.8 (0x00007f70e5357000)
libcrypto.so.0.9.8 => /usr/lib64/libcrypto.so.0.9.8 (0x00007f70e4fda000)
libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00007f70e4dae000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f70e4b71000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f70e496d000)
libm.so.6 => /lib64/libm.so.6 (0x00007f70e4717000)
libldap-2.4.so.2 => /usr/lib64/libldap-2.4.so.2 (0x00007f70e44d3000)
libc.so.6 => /lib64/libc.so.6 (0x00007f70e417a000)
libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00007f70e3ed8000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f70e3cd4000)
libz.so.1 => /lib64/libz.so.1 (0x00007f70e3abe000)
libaudit.so.0 => /lib64/libaudit.so.0 (0x00007f70e38a4000)
libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00007f70e367e000)
libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00007f70e3475000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f70e3272000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f70e305b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f70e5d51000)
liblber-2.4.so.2 => /usr/lib64/liblber-2.4.so.2 (0x00007f70e2e4b000)
libsasl2.so.2 => /usr/lib64/libsasl2.so.2 (0x00007f70e2c30000)

Vielen Dank für die prompte Antwort.

Ja, SSL wurde da mit einkompiliert.

Man sollte noch erwähnen, daß das zwar notwendig, aber nicht ausreichend ist. Es muß auch konfiguriert sein.

Andreas

Es soll getestet werden ob der Datenbankserver mit aktivierter ssl-Option
überhaupt startet. (Die Zertifizierung gegenüber dem client oder der Aufbau
einer verschlüsselten Verbindung ist (noch) nicht im Fokus.)

Zunächst liest postgres wohl die systemweite openssl-Konfigurationsdatei. Auf
einem sles 11 wohl /etc/ssl/openssl.cnf: ($OPENSSL_CONF oder $SSLETC ist
bisher nicht gesetzt.)

postgres@srv:/db3/data $ openssl version -d
OPENSSLDIR: “/etc/ssl”
postgres@srv:/db3/data $ ls -l /etc/ssl/openssl.cnf
-rw-r–r-- 1 root root 9326 27. Aug 10:36 /etc/ssl/openssl.cnf

Beziehen sich die nun gesetzten Variablen auf den
postmaster/postgres-subprocess, da dieser die einkompilierte ssl-Bibliothek
ausführt?
(In der Datei openssl.cnf, befinden sich Zeilen wie
‘RANDFILE = $ENV::HOME/.rnd’ oder ‘HOME = .’.)

Lässt man die Variablen ENV_CA_DEFAULT und ENV_EXT undefiniert, so wird bei
einem Zertifizierungswunsch der Abschnitt [ req ] ausgeführt? Die Verwendung der
openssl-Bibliothek entspricht einem Aufruf ohne Komandozeilenparameter; diese
werden ja durch die Konfigurationsdatei übermittelt?

In der Konfigurationsdatei openssl.cnf wird im Abschnitt [ req ]
‘default_keyfile = privkey.pem’ nach ‘default_keyfile = server.key’ geändert.
Der Abschnitt [ req_distinguished_name ] wird an die lokalen Gegebenheiten
angepasst, wobei commonName den FQDN enthält.

Um den Server Start zu testen, wird gem.
PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: Secure TCP/IP Connections with SSL, Abschnitt ‘17.8.1. Creating a Self-Signed Certificate’ ein selbst signiertes Zeritfikat
erstellt. In der Konfigurationsdatei wurde der Name für das server Zertifikat
angepasst. Und siehe da, der Server startete. Das anschliessende ‘show ssl ;’
zeigte das gewünschte Ergebnis. :astonished:

Vielen Dnk, guter Tipp, einer meiner Kollegen arbeitet mit Informix und konnte ldd bei einem anderen Problem verwenden.