SMB2: Samba Upgrade auf 3.6 beim NAS My Book World Edition II

1207 Wörter 6 Minuten Lesezeit

Out-of-the-box schafft das Western Digital My Book World Edition II aus dem Jahre 2010 nur das Protokoll Server Message Block (SMB) bzw. Common Internet File System (CIFS) in der Version SMB1. Nachdem aktuelle Windows 10 Versionen aus Sicherheitsgründen SMB1 abschalten gibt’s drei Lösungen…

  1. trotz allem SMB1 unter Win10 aktivieren
  2. einen Raspi als Samba-Proxy vorschalten
  3. die Samba Version am NAS soweit aktualisieren dass es das SMB-Protokoll in der Version SMB2 schafft.

Natürlich ist die Lösung hier ein Upgrade von Samba 3.0.34 auf Samba 3.6.23.

Voraussetzungen

Als Voraussetzung für das Upgrade muss am NAS sowohl ein SSH-Root-Zugang vorhanden als auch ipkg installiert sein. Eine entsprechende Anleitung findet sich hier.

Um das Upgrade durchführen zu können erstellen wir eine SSH Verbindung zum NAS. Nachdem das Gerät etwas älter ist müssen auch bereits deaktivierte Algorithmen wieder reaktiviert werden.

ssh -l root -oKexAlgorithms=+diffie-hellman-group1-sha1 1.2.3.4

Optionen

Die aktuell installierte Samba Version finden wir mit smbstatus heraus:

~ # smbstatus | head -n 2
Samba version 3.0.34

Via ipkg stehen vier verschiedenene Samba Versionen bereit: 3.2.15, 3.4.17, 3.5.22 und 3.6.23.

/opt/bin/ipkg update

/opt/bin/ipkg list | grep samba
samba - 3.2.15-5 - Samba suite provides file and print services to SMB/CIFS clients.
samba2 - 2.2.12-4 - Lightweight Samba suite provides file and print services to SMB/CIFS clients.
samba3-dev - 3.2.15-5 - development files for samba3
samba3-swat - 3.2.15-5 - the Samba Web Admin Tool for samba3
samba34 - 3.4.17-1 - Samba suite provides file and print services to SMB/CIFS clients. This is a newer version.
samba34-dev - 3.4.17-1 - development files for samba34
samba34-swat - 3.4.17-1 - the Samba Web Admin Tool for samba34
samba35 - 3.5.22-1 - Samba suite provides file and print services to SMB/CIFS clients. This is a newer version.
samba35-dev - 3.5.22-1 - development files for samba35
samba35-swat - 3.5.22-1 - the Samba Web Admin Tool for samba35
samba36 - 3.6.23-1 - Samba suite provides file and print services to SMB/CIFS clients. This is a newer version.
samba36-dev - 3.6.23-1 - development files for samba36
samba36-swat - 3.6.23-1 - the Samba Web Admin Tool for samba36

Samba 3.2.15-5

Der erste, konservate Schritt ist ein testweises Upgrade von 3.0 auf 3.2. Hier sollte sich möglichst wenig an zB Konfigurationsdateien ändern sodass dies ein guter Testlauf für das Upgrade ist.

Installation

~ # /opt/bin/ipkg install samba
Installing samba (3.2.15-5) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q1armel/cross/unstable/samba_3.2.15-5_arm.ipk
package samba suggests installing cups
Installing popt (1.16-1) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q1armel/cross/unstable/popt_1.16-1_arm.ipk
Installing openldap-libs (2.3.43-2) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q1armel/cross/unstable/openldap-libs_2.3.43-2_arm.ipk
Installing libdb (4.2.52-3) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q1armel/cross/unstable/libdb_4.2.52-3_arm.ipk
Installing gdbm (1.8.3-4) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q1armel/cross/unstable/gdbm_1.8.3-4_arm.ipk
Installing cyrus-sasl-libs (2.1.23-2) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q1armel/cross/unstable/cyrus-sasl-libs_2.1.23-2_arm.ipk
Installing psmisc (22.17-1) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q1armel/cross/unstable/psmisc_22.17-1_arm.ipk
Configuring cyrus-sasl-libs
Configuring gdbm
Configuring libdb
Configuring openldap-libs
Configuring popt
Configuring psmisc
update-alternatives: Linking //opt/bin/killall to /opt/bin/psmisc-killall
update-alternatives: Linking //opt/bin/pidof to /opt/bin/psmisc-killall
Configuring samba
The original samba version 2 config (/etc/samba/smb.conf) is no longer
working with this version of samba.
Please create a new samba version 3 config (/opt/etc/samba/smb.conf).
After verify your smb.conf file, modify and execute /opt/etc/init.d/S08samba
to activate the samba version 3.
Successfully terminated.

Konfiguration

Wir verwenden eine Kopie der Konfiguration von der Werksinstalltion mit einer kleinen Anpassung (die realm Einstellung gibt es nicht mehr) sowie die selbe Passwortdatei die auch vom Webinterface verwendet wird.

cp /etc/samba/smb.conf /opt/etc/samba/smb.conf
sed -i '/realm/d' /opt/etc/samba/smb.conf

ln -s /usr/private/smbpasswd /opt/etc/samba/smbpasswd

Initskript

Das werkseitige Skript zum Samba-Start wird in einer Kopie wird leicht adaptiert (Anpassung von Pfaden), das Originalskript stillgelegt. Will man auf Samba 3.0 zurückrudern müssen muss man nur das Startskript retour ändern.

mv /etc/init.d/S90smbd /etc/init.d/_S90smbd
cp /etc/init.d/_S90smbd /etc/init.d/S90smbd3

sed -i 's|CONFIG=/etc/samba/smb.conf|CONFIG=/opt/etc/samba/smb.conf|' /etc/init.d/S90smbd3
sed -i 's|nice -n -20 /usr/sbin/smbd -D|nice -n -20 /opt/sbin/smbd -D|' /etc/init.d/S90smbd3
sed -i 's|/usr/sbin/nmbd -D|/opt/sbin/nmbd -D|' /etc/init.d/S90smbd3

Samba 3.2 starten

Neustart vom Samba-Dienst; die Kontrolle im Log zeigt uns dass alles funktioniert.

~ # /etc/init.d/S90smbd3 restart
Restarting SMB services: 
Shutting down SMB services: OK
Shutting down NMB services: OK
Starting SMB services: OK
Starting NMB services: OK
done.

tail -f /DataVolume/jewab/log.smbd

Windows Client

Ein Test am (älteren) Windows-Client zeigt dass die Verbindung zwar funktioniert, aber erwartungsgemäß noch SMB1 ist.

Get-SmbConnection

PS C:\Windows\system32> Get-SmbConnection -server 192.168.100.200 | fl

ServerName : 192.168.100.200
ShareName  : Media
UserName   : Wohnzimmer-PC\user
Credential : WOHNZIMMER-PC\nas
Dialect    : 1.50
NumOpens   : 1
Dialect SMB-Version
1.50 SMBv1 / CIFS / NT LM 0.12
2.02 SMBv2
2.1 SMBv2.1
3.0 SMBv3.0
3.02 SMBv3.0.2
3.11 SMBv3.1.1

Samba 3.6.23-1

Laut der Samba-Dokumentation wird SMB2 ab Version 3.6 unterstützt: “Samba 3.6 added basic support for SMB2.0”. Zum Glück steht via ipkg die Version 3.6.23 bereit, die nun anstelle von 3.2 installiert wird.

Samba 3.2 stoppen und entfernen

~ # /etc/init.d/S90smbd3 stop
~ # /opt/bin/ipkg remove samba       
Removing package samba from root...
Successfully terminated.

Samba 3.6 installieren

~ # /opt/bin/ipkg install samba36
Installing samba36 (3.6.23-1) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q1armel/cross/unstable/samba36_3.6.23-1_arm.ipk
package samba36 suggests installing cups
Installing avahi (0.6.30-1) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q1armel/cross/unstable/avahi_0.6.30-1_arm.ipk
Installing expat (2.0.1-1) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q1armel/cross/unstable/expat_2.0.1-1_arm.ipk
Installing libdaemon (0.14-1) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q1armel/cross/unstable/libdaemon_0.14-1_arm.ipk
Installing dbus (1.2.16-1) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q1armel/cross/unstable/dbus_1.2.16-1_arm.ipk
Installing e2fsprogs (1.40.3-1) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs05q1armel/cross/unstable/e2fsprogs_1.40.3-1_arm.ipk
Configuring avahi
Configuring dbus
No messagebus user found, creating it... done
Configuring e2fsprogs
update-alternatives: Linking //opt/bin/chattr to /opt/bin/e2fsprogs-chattr
update-alternatives: Linking //opt/bin/lsattr to /opt/bin/e2fsprogs-lsattr
update-alternatives: Linking //opt/sbin/fsck to /opt/sbin/e2fsprogs-fsck
Configuring expat
Configuring libdaemon
Configuring samba36
The original samba version 2 config (/etc/samba/smb.conf) is no longer
working with this version of samba.
Please create a new samba version 3 config (/opt/etc/samba/smb.conf).
After verify your smb.conf file, modify and execute /opt/etc/init.d/S08samba
to activate the samba version 3.
Successfully terminated.

Konfiguration

Wir bauen auf bereits durchgeführten Änderungen für Samba 3.2 auf. In der smb.conf Datei zwingend wir Samba, SMB2 zu verwenden. Ebenfalls wollen wir weiterhin das alte Passwort-Backend verwenden.

sed -i 's|\[global\]|[global]\n  min protocol = SMB2|' /opt/etc/samba/smb.conf
sed -i 's|\[global\]|[global]\n  max protocol = SMB2|' /opt/etc/samba/smb.conf
sed -i 's|\[global\]|[global]\n  passdb backend = smbpasswd|' /opt/etc/samba/smb.conf
sed -i 's|\[global\]|[global]\n  log level = 1|' /opt/etc/samba/smb.conf
/etc/init.d/S90smbd3 restart

Versionskontrolle

Die Kontrolle der installierten Version erfolgt wieder mit smbstatus. Achtung: es muß auch das richtige smbstatus von Optware aufgerufen werden, sonst erhalten wir die Samba-Version der WD-Werksinstalltion!

~ # smbstatus | head -n 2

Samba version 3.0.34
~ # /opt/bin/smbstatus | head -n 2
Ignoring unknown parameter "preallocate"
Ignoring unknown parameter "preallocate"
Ignoring unknown parameter "preallocate"
Ignoring unknown parameter "preallocate"

Samba version 3.6.23

preallocate Paramter

Samba 3.6 unterstützt den preallocate-Parameter nicht mehr. Da Samba ungültige Paramter ignoriert (siehe oben) ist das kein Beinbruch. Wir könnten den Parameter zwar leicht aus der Konfig entwernen, jedoch würde ihn das Webinterface wieder hinschreiben. Man könnte zwar auch den PHP Sourcecode vom Webinterface editieren, aber etwas viel Aufwand dafür das es ohnehin ignoriert wird.

~ # cat /usr/private/user_smb_conf/.overall_share
[Public]
  path = /DataVolume/Public
  comment = Public Share
  preallocate = yes
  public = yes
  browseable = yes
  writable = yes
  guest ok = yes
  map read only = no

Password-Backend

Die User/Passwort-Datenbank scheint auch noch zu funktieren…

~ # pdbedit -L 
WARNING: The "idmap uid" option is deprecated
WARNING: The "idmap gid" option is deprecated
WARNING: The "null passwords" option is deprecated
admin:98:administrator
nas:503:Linux User

Windows Client

Alles funtioniert: Windows Client verbindet sich zum Share und verwendet SMB2!

Get-SmbConnection

PS C:\Windows\system32> Get-SmbConnection -server 192.168.100.200 | fl

ServerName : 192.168.100.200
ShareName  : Public
UserName   : Wohnzimmer-PC\user
Credential : Wohnzimmer-PC\user
Dialect    : 2.02
NumOpens   : 1

Linux Client

…funktioniert auch.

$ sudo mount -t cifs -o username=nas,uid=myuser,gid=users,nosuid,nodev,vers=2.0,noforcegid,noforceuid //192.168.100.200/Public /mnt/
[sudo] password for myuser: 
Password for nas@//192.168.100.200/Public: