Wer noch Sonos-Lautsprecher der ersten Generation betreibt und seine Musiksammlung auf dem eigenen Server liegen hat, stößt bei Samba schnell auf ein Problemchen: Ohne SMB1 und die alte NTLMv1-Anmeldung spielen die Lautsprecher keinen einzigen Titel. Die üblichen Anleitungen im Netz drehen deshalb einfach alles auf, was Samba aus gutem Grund abgeschaltet hat. Das geht aber auch deutlich sauberer, ohne auf die Musik zu verzichten.
Warum Sonos S1 noch SMB1 braucht
Bei mir hängen noch zwei Play:3, ein Play:1 und ein Connect:Amp im Netz. Alle laufen mit der S1-Software, für die Sonos nur noch Fehlerkorrekturen liefert. Die Lautsprecher spielen nicht nur Streams, sondern auch meine Musiksammlung vom Server. Laut einer Diskussion im Sonos-Forum reichen die Ressourcen der S1-Geräte dafür aber nur für SMBv1, mehr ist auf der alten Hardware nicht drin.
Samba hat das alte Protokoll dagegen schon lange in Rente geschickt. Seit Version 4.11 steht server min protocol ab Werk auf SMB2_02, die NTLMv1-Anmeldung ist laut Samba-Projekt sogar schon seit Version 4.5 abgeschaltet. Die üblichen Anleitungen schalten beides mit zwei Zeilen global wieder ein. Die Lautsprecher spielen dann zwar, aber eben nicht nur sie bekommen die Tür geöffnet.
Wer ein System mit S2 betreibt, ist fein raus. Sonos hat dort mit Version 13.4.1 im Dezember 2021 SMBv2 und SMBv3 nachgereicht und spricht inzwischen gar kein SMBv1 mehr. S2-User lassen die Samba-Standards also in Ruhe. Der Rest dieses Artikels richtet sich an alle, die wie ich noch an ihren alten Lautsprechern hängen und sie nicht wegen eines Protokolls entsorgen wollen.
Was an der schnellen Lösung das Problem ist
SMB1 lässt sich in Samba nur für den ganzen Server erlauben, nicht für einzelne Freigaben oder Geräte. Spätestens seit WannaCry 2017 eine Lücke in Microsofts SMB1 ausnutzte, gilt das Protokoll als Altlast, und NTLMv1 macht es Angreifern leicht, mitgeschnittene Anmeldungen zu knacken. Meldet sich der Lautsprecher dann auch noch mit eurem normalen Benutzer an, wandert ausgerechnet euer Hauptpasswort im schwächsten Verfahren durchs Netz.
Dazu kommen Zeilen, die man beim Abschreiben gern gleich mitnimmt. Mit wide links und allow insecure wide links folgt Samba Symlinks auch dann, wenn sie aus der Freigabe herauszeigen. Gern hängt auch das ganze Datenverzeichnis schreibbar im Netz. Klar, von außen ist so ein Heimserverchen meist dicht. Doch im selben LAN hängen auch Fernseher, Steckdosen und Lautsprecher, deren Software ihr nicht in der Hand habt.
Ein eigener Benutzer nur für Sonos
Der wichtigste Schritt ist ein eigener Benutzer, der nur für die Lautsprecher da ist und sonst nichts darf. Er braucht weder ein Home-Verzeichnis noch eine Shell, Samba kennt ihn nur zum Anmelden. Das Passwort vergebt ihr einmalig und verwendet es nirgendwo sonst, denn per NTLMv1 sollte man es als halb öffentlich betrachten. Neu anlegen lässt er sich mit zwei Befehlen:
sudo useradd -r -M -s /usr/bin/nologin sonos
sudo smbpasswd -a sonosHabt ihr schon einen Benutzer, mit dem sich die Lautsprecher anmelden, stutzt ihr ihn mit usermod zurecht. Er verliert die Shell, bekommt / als Home-Verzeichnis und ein gesperrtes Unix-Passwort. Die Anmeldung an Samba läuft über das eigene Passwort aus smbpasswd und funktioniert davon unberührt weiter. Nutzen die Lautsprecher bisher euren normalen Benutzer, legt ihr dagegen lieber einen neuen an:
sudo usermod -s /usr/bin/nologin -d / sonos
sudo passwd -l sonosDie smb.conf
Die Konfiguration erlaubt SMB1 und NTLMv1, grenzt aber alles drumherum ein. Samba lauscht nur auf der LAN-Schnittstelle und nicht auf Docker-Bridges oder VPN-Tunneln. Gäste fliegen raus, Drucker gibt es keine, und jede Freigabe bekommt eine Liste der Benutzer, die rein dürfen. Den Namen der Netzwerkschnittstelle (bei mir enp0s25) und die Pfade müsst ihr natürlich an euer System anpassen:
[global]
workgroup = WORKGROUP
server string = bender
server role = standalone server
# Sonos S1: nur SMB1 + NTLMv1
server min protocol = NT1
server max protocol = SMB3
ntlm auth = ntlmv1-permitted
# nur LAN und lokal, nicht auf den Docker-Bridges
interfaces = lo enp0s25
bind interfaces only = yes
map to guest = never
# keine Drucker
load printers = no
printing = bsd
printcap name = /dev/null
disable spoolss = yes
[homes]
browseable = no
writable = yes
valid users = %S
invalid users = sonos
[musik]
path = /data/musik
browseable = yes
read only = yes
valid users = sonos anna ben lena
[data]
path = /data
writable = yes
valid users = anna benntlmv1-permitted ist übrigens nur der sprechende Name für das alte yes. Die Freigabe [musik] ist schreibgeschützt; lesen dürfen sonos und die Familie, hier anna, ben und lena. Selbst wenn jemand die Anmeldung des Lautsprechers knackt, kommt er so nur an die Musik. Auf [data] kommen nur anna und ben, wide links taucht nirgendwo auf, und Symlinks bleiben damit in ihrer Freigabe.
Wichtig ist noch die Zeile invalid users = sonos unter [homes]. Diese Freigabe bietet jedem Benutzer sein Home-Verzeichnis an, und das ist beim Lautsprecher-Benutzer nach dem usermod von oben das Wurzelverzeichnis. Ohne die Zeile gäbe es also eine beschreibbare Freigabe \\bender\sonos auf das ganze System. Was dort tatsächlich geht, regeln zwar die Dateirechte, Verzeichnisse wie /tmp stehen aber für alle offen.
Lässt sich die Sonos-Bibliothek gerade nicht neu einrichten, gibt es auch einen Zwischenschritt ohne eigene Musikfreigabe. Dann nehmt ihr sonos in die valid users der bestehenden Freigabe auf und setzt zusätzlich read list = sonos. Der Lautsprecher darf dann weiter alles lesen, was die Dateirechte hergeben, aber nichts schreiben. Auf Dauer ist die eigene Freigabe aber klar die bessere Wahl.
Bevor ihr die neue Datei aktiviert, lasst ihr sie von testparm prüfen. Das Programm meckert über Tippfehler und unbekannte Optionen, bevor Samba über sie stolpert. Danach startet ihr den Dienst neu, unter Arch heißt er smb, unter Debian und Ubuntu smbd. Offene Verbindungen brechen dabei kurz ab, eingehängte Freigaben auf euren Rechnern verbinden sich aber normalerweise von selbst wieder:
sudo testparm -s
sudo systemctl restart smbDie Musikbibliothek in der Sonos-App
Zum Schluss tragt ihr die Freigabe in der S1-App als Musikbibliothek ein. Öffnet dazu die Einstellungen und geht dort auf Musikbibliothek und Musikbibliothek einrichten. Als Pfad tragt ihr die Freigabe im Windows-Format ein, also \\bender\musik, darunter den Benutzer sonos und sein Passwort. Danach liest Sonos die Sammlung ein, was bei großen Bibliotheken etwas dauern kann.



Kontrolle
Ob alles so läuft wie gedacht, zeigt euch smbstatus. In der Spalte Protocol Version seht ihr, wer mit welchem Protokoll angemeldet ist. Normale Rechner sollten sich weiter mit SMB3 verbinden, mein Notebook etwa mit SMB3_11, nur die Lautsprecher tauchen mit NT1 auf. Ein Gastzugriff ohne Passwort sollte dagegen mit NT_STATUS_ACCESS_DENIED abprallen, wenn ihr ihn mit smbclient von einem anderen Rechner aus probiert:
sudo smbstatus -b
smbclient -N //bender/data -c lsVom Ergebnis des zweiten Befehls solltet ihr euch nicht in die Irre führen lassen. Die Zeile „Anonymous login successful“ klingt zwar nach offener Tür, sie betrifft aber nur die Verbindung zum Server selbst, über die ein Client etwa die Liste der Freigaben abfragt. Entscheidend ist die zweite Zeile, denn in die Freigabe selbst kommt ohne Benutzer und Passwort niemand hinein:
smbclient -N //bender/data -c ls
Anonymous login successful
tree connect failed: NT_STATUS_ACCESS_DENIEDBei mir sieht das so aus: Der Lautsprecher im Schlafzimmer liest als sonos per NT1, das Notebook hängt mit SMB3_11 und signierter Verbindung dran. Genau so soll es sein, denn das alte Protokoll bleibt damit auf die Geräte beschränkt, die nichts anderes können. Die übrigen Lautsprecher tauchen erst auf, wenn sie gerade auf die Bibliothek zugreifen:
sudo smbstatus -b
Samba version 4.25.0
PID Username Group Machine Protocol Version Encryption Signing
----------------------------------------------------------------------------------------------------------------------------------------
732192 sonos sonos 192.168.0.60 (ipv4:192.168.0.60:38427) NT1 - -
711090 anna anna 192.168.0.191 (ipv4:192.168.0.191:52826) SMB3_11 - partial(AES-128-CMAC)Und auf Dauer?
Ganz glücklich bin ich mit SMB1 natürlich trotzdem nicht. Auf meinem Server läuft ohnehin schon bonob, das Navidrome als Musikdienst in die Sonos-App bringt. Kommt die Musik darüber, braucht kein Lautsprecher mehr eine Samba-Freigabe, und SMB1 könnte endgültig weg. Wer jedoch ohne die interne Sonos-Bibliothek nicht auskommt, für den ist die eingegrenzte Variante in meinen Augen ein guter Kompromiss.
Alles in allem kostet die saubere Variante nur einen Benutzer und ein paar Zeilen mehr in der smb.conf. Die Lautsprecher spielen genauso wie mit der schnellen Lösung, nur führt über sie kein Weg zum Rest des Servers. Wie habt ihr eure alten Sonos-Lautsprecher angebunden? Hängt bei euch auch noch SMB1 im Netz, oder seid ihr längst auf S2 umgestiegen?




Schreibe einen Kommentar