mosquitto kann Passwort-File nicht lesen: "Error: Unable to open pwfile"

Hinweis: In dem Thema mosquitto kann Passwort-File nicht lesen: "Error: Unable to open pwfile" gibt es 4 Antworten. Der letzte Beitrag () befindet sich ganz unten auf dieser Seite.
  • Hallo an alle,

    ich verzweifle seit mehreren Tagen daran, mosquitto (als MQTT-Broker für openhab) mit Passwort-Authentifizierung in Betrieb zu nehmen.

    System: opensuse 15.3, gleiches Verhalten auf zwei verschiedenen Rechnern (Intel X86-64)

    Konfiguration: in /etc/mosquitto/conf.d/openhab.conf:

    Code
    # without this mosquitto will not talk to other hosts on the network
    listener 1883
    # user/password authentication is required
    password_file /etc/mosquitto/pwfile

    Egal ob ich mosquitto über systemd oder manuell sudo mosquitto -c /etc/mosquitto/mosquitto.conf -v starte, mosquitto kann die Datei /etc/mosquitto/pwfile

    nicht lesen:

    Code
    1645550497: Loading config file /etc/mosquitto/conf.d/openhab.conf
    1645550497: mosquitto version 2.0.10 starting
    1645550497: Config loaded from /etc/mosquitto/mosquitto.conf.
    1645550497: Error: Unable to open pwfile "/etc/mosquitto/pwfile".
    1645550497: Error opening password file "/etc/mosquitto/pwfile".

    Zugriffsrechte sind meiner Ansicht nach OK:


    Die Datei pwfile ist eine Kopie der pwfile.example. Das Anlegen eines neuen Users mit

    sudo mosquitto_passwd /etc/mosquitto/pwfile xxxx

    ging ohne Probleme


    Ich habe auch den "Härtetest" gemacht:

    • die pwfile nach /tmp/ kopiert
    • in der Konfiguration password_file /tmp/pwfile angegeben
    • und die Datei /tmp/pwfile komplett freigegeben sudo chmod 777 /tmp/pwfile
    Code
    ls -l /tmp/pwfile
    -rwxrwxrwx 1 mosquitto mosquitto 474 22. Feb 18:32 /tmp/pwfile

    Der Fehler bleibt derselbe

    Code
    sudo mosquitto -c /etc/mosquitto/mosquitto.conf -v
    1645551339: Loading config file /etc/mosquitto/conf.d/openhab.conf
    1645551339: mosquitto version 2.0.10 starting
    1645551339: Config loaded from /etc/mosquitto/mosquitto.conf.
    1645551339: Error: Unable to open pwfile "/tmp/pwfile".
    1645551339: Error opening password file "/tmp/pwfile".

    Letzter Versuch war, das pwfile neu zu erzeugen (mosquitto_passwd -c /tmp/pwfile xxxx), für alle lesbar zu machen chmod 666 /tmp/pwfile und mosquitto als root laufen zu lassen (option user root in der config-Datei. Auch das hilft nichts:

    Code
    sudo mosquitto -c /etc/mosquitto/mosquitto.conf -v
    1645553666: Loading config file /etc/mosquitto/conf.d/openhab.conf
    1645553666: Warning: Mosquitto should not be run as root/administrator.
    1645553666: mosquitto version 2.0.10 starting
    1645553666: Config loaded from /etc/mosquitto/mosquitto.conf.
    1645553666: Error: Unable to open pwfile "/tmp/pwfile".
    1645553666: Error opening password file "/tmp/pwfile".



    Jetzt bin ich ratlos. :/ In allen Suchen im Web habe ich nichts Hilfreiches gefunden.

    Was kann den Zugriff auf die Datei noch stören? Irgendeine AppArmor-Policy?? Davon hab ich keine Ahnung...


    Hat jemand eine Idee?

    Für den Inhalt des Beitrages 297740 haftet ausdrücklich der jeweilige Autor: susefest

  • HEUREKA - ich hab es gelöst :smilie_hops_011:

    Für alle, die das Problem in Zukunft auch bekommen:

    Die in openSUSE standardmäßig aktive Sicherheitssoftware AppArmor hat für mosquitto ein vordefiniertes Profil, welches das Lesen verhindert.

    Konkret ist im Verzeichnis /etc/mosquitto für das Programm /usr/sbin/mosquitto ausschließlich das Lesen der Datei mosquitto.conf erlaubt. Daher schlägt das Lesen von /etc/mosquitto/pwfile fehl.

    Lösung

    Die Datei pwfile muss in /etc/mosquitto/conf.d liegen und der Eintrag in der Konfigurationsdatei dorthin verweisen.


    Ich verstehe das Konzept jetzt. Mosquitto startet mit root-Rechten und liest die Datei /etc/mosquitto/mosquitto.conf. Danach schaltet es auf den weniger priveligierten user "mosquitto" herunter und liest damit erst die weiteren Konfigurationsdateien in /etc/mosquitto/conf.d. So gesehen erscheint es mir schon sinnvoll, den Zugriff zu beschränken.

    Aber ein Hinweis in einer README o.ä. wäre sehr hilfreich....

    Vielleicht kann das jemand, der weiß wie das geht, bei den openSUSE-Paketierern vorschlagen?

    Für den Inhalt des Beitrages 297807 haftet ausdrücklich der jeweilige Autor: susefest