Inhaltsverzeichnis

Informix unter openSUSE Leap 16.0: fehlende /etc/services und /etc/hosts.equiv

Nach einem Update auf openSUSE Leap 16.0 startet ein Informix-Server, der in der sqlhosts mit einem Servicenamen konfiguriert ist, nicht mehr auf dem erwarteten Port. Zusätzlich werden Client-Verbindungen mit Fehler -956 „Client host or user is not trusted by the server“ abgewiesen, weil /etc/hosts.equiv fehlt.

Ursache

Mit Leap 16.0 hat openSUSE den Weg der Trennung von Distribution-Defaults (/usr/etc) und lokalen Overrides (/etc) konsequent umgesetzt:

  /etc/services ist nur noch eine **leere Dummy-Datei** und soll
  künftig ganz entfallen. Der eigentliche Inhalt liegt jetzt unter
  /usr/etc/services. Das Paket netkit-rsh / rsh-server ist abgelöst durch
  **OpenSSH**. Dadurch werden die klassischen Trust-Dateien /etc/hosts.equiv und /etc/hosts.lpd **nicht mehr automatisch angelegt**.

Quellen:

Auswirkung auf Informix

sqlhosts mit Servicename

Enthält $INFORMIXDIR/etc/sqlhosts einen Servicenamen statt einer Portnummer, z. B.:

ol_azur   onsoctcp   azur.local   sqlexec

… dann löst Informix über getservbyname() gegen /etc/services auf. Unter Leap 16.0 ist diese Datei leer, der Start schlägt mit Meldungen wie

listener-thread: err = -25595: oserr = 0: errstr = ...: Service not found

fehl bzw. der Server bindet nicht auf dem erwarteten Port.

Trusted-Host-Authentifizierung

Informix prüft eingehende Verbindungen standardmäßig gegen eine Trusted-Hosts-Datei:

Fehlt /etc/hosts.equiv komplett, meldet der Client:

-908  Attempt to connect to database server (...) failed.
-956  Client host or user (...) is not trusted by the server.

Siehe: IBM Docs – Trusted-host information

Lösungen

A: Portnummer direkt in sqlhosts

Am robustesten: den Servicenamen durch die numerische Portnummer ersetzen. Damit entfällt die Abhängigkeit von /etc/services vollständig.

ol_azur   onsoctcp   azur.local   9088

Variante B: /etc/services wiederherstellen

Eintrag für Informix manuell ergänzen (auf Server und Client):

sqlexec       9088/tcp
sqlexec-ssl   9089/tcp

Wahlweise als Override in /etc/services (wird gegenüber /usr/etc/services vorgezogen) oder als Drop-in.

hosts.equiv wiederherstellen

Datei /etc/hosts.equiv mit den vertrauenswürdigen Hosts neu anlegen:

# hostname        user
client1.local     informix
client1           informix
10.0.0.15         informix

Zwingende Voraussetzungen (laut IBM Docs):

touch /etc/hosts.equiv
chown informix:informix /etc/hosts.equiv
chmod 0644 /etc/hosts.equiv

Variante empfohlen: REMOTE_SERVER_CFG nutzen

Seit Informix 11.70 kann die Trusted-Hosts-Datei über die onconfig umgelenkt werden – damit ist kein Root-Zugriff auf /etc/hosts.equiv nötig und das Problem ist zukunftssicher gelöst:

In $INFORMIXDIR/etc/onconfig:

REMOTE_SERVER_CFG  trusted_hosts.cfg

Dann Datei $INFORMIXDIR/etc/trusted_hosts.cfg mit den erlaubten Hosts füllen. Änderungen lassen sich im laufenden Betrieb übernehmen:

onmode -wf REMOTE_SERVER_CFG=trusted_hosts.cfg

Quelle: XTIVIA – Informix Trusted Client Connections

Prüfbefehle

# Existiert /etc/services und hat es Inhalt?
ls -l /etc/services /usr/etc/services
getent services sqlexec
 
# Kann Informix den Servicenamen auflösen?
su - informix -c "getent services sqlexec"
 
# Trusted-Host-Datei prüfen
ls -l /etc/hosts.equiv $INFORMIXDIR/etc/hosts.equiv 2>/dev/null
onstat -g cfg | grep REMOTE_SERVER_CFG

Zusammenfassung

Inhalt liegt in /usr/etc/services.

bei Trusted-Connections (Fehler -956) nach dem Update.

Weiterführende Quellen

Stichworte

Informix, openSUSE Leap 16, sqlhosts, /etc/services, hosts.equiv, REMOTE_SERVER_CFG, Fehler -956, Trusted Host