Ok, ich hab's. Hat mich jetzt auch gereizt.
Außerdem konnte ich mein Wissen über hosts.deny/allow etwas auffrischen 😉
Erst dachte ich, das der esd halt nicht über diesen Mechanismus regelbar ist.
Früher[tm] waren diese beiden Files Dinesten vorbehalten, die über sog. TCP-Wrapper
(das waren dann z.B. in.ftpd, in.telnetd) gestartet wurden oder/und über die
inetd.conf bzw. xinetd.conf.
Irgendwann gab es dann auch eine bestimmte Bibliothek mit Funktionen, die ein
Programm nutzen kann so daß sich Zugriffe auch über diese dateien steuern lassen.
Das ist die libwrap.so. Gegen diese Lib müssen die Programme gelinkt sein.
Der sshd z.B. ist das.
Mein Gedanke war nun: ist das beim esd auch der Fall?
Ja. ldd $(which esd)
zeigt das.
Wie funktioniert es nun? So:
esound: 192.168.1.0/255.255.255.0
Allerdings muß der esd-Daemon an eine bestimme IP/Device gebunden werden.
Und ja, für die hosts.allow muß da esound stehen!
Wie habe ich das rausgefunden?
Ich habe jetzt folgendes in meiner hosts.deny stehen:
ALL: ALL : (logger "wrapper: Zugriff von %c auf %s ")
Das loggt in die /var/log/messages.log die abgewiesenen Zugriffsversuche. Und dort habe
ich dann gesehen das der Servive(%s) esound heißt. Und nicht esd.
Woher diese Namensgebung stammt, kann ich nicht mit Bestimmtheit sagen.
Ich könnte mir vorstellen, das beim Benutzen dieser o.a. libwrap-Bibliothek beim
Registrieren im SOurce ein name übergeben wird. Und da wurde halt esound genommen,
so wie der Daemon eigentlich halt auch heißt.
Es wird also nicht nach dem Dateinamen geschaut.
Und ein paar Unstimmigkeiten gibt es doch noch:
der esd muß wie gesagt an ein Device gebunden werden.
Ich teste es hier per Hand mit:
esd -tcp -public -port 5001
Damit klappt es nicht, da der esd auf allen verfügbaren Devices lauscht (und evtl auch
wegen ipv6, das ist bei dir dieses ::::5001 statt 0.0.0.0:5001).
Mein Log meldet da immer: wrapper: Zugriff von 0.0.0.0 auf esound@0.0.0.0
Was aber funktioniert:
esd -tcp -public -port 5001 -bind 192.168.1.10
Also an die lokale ethX-Adresse binden (bei dir anpassen)
Dann funktioniert obiger hosts.allow Eintrag.
Du kannst ja noch ein bißchen rumtesten, die Logfile-Ausgabe ist dabei ungemein
hilfreich.
Als TCP-test (lokal oder remote) habe ich immer genommen:
esdsample -s 192.168.1.10:5001 /usr/share/sounds/alsa/Noise.wav
oder
esdsample -s localhost:5001 /usr/share/sounds/alsa/Noise.wav