Inhalt

neue seite


1. Allgemeines

Samba ist ein Datei-, Druck- und neuerdings auch Domänen-Anmelde-Server unter Linux für die Anbindung von Windows-Clients.

Samba kann damit die wichtigsten Funktionen eines Windows-NT-Servers nachbilden - und das lizenzkostenfrei mit unlimitierter Benutzerzahl!

Der Name "Samba" ist übrigens eine Andeutung auf das in Windows-Netzwerken verwendete SMB-Protokoll.

Homepage: http://de.samba.org/samba/

Lizenz: GPL

1.1. Aktuell

Aktuelle Versionen haben auch fortgeschrittene PDC-Funktionen (Primary Domain Controller), als BDC (Backup Domain Controller) kann man Samba allerdings (noch?) nicht verwenden, weil das dazu verwendete Microsoft-Protokoll nicht bekannt ist.

Ein Update auf diese Version lohnt sich auf alle Fälle. Auch weil damit viele Bugs behoben wurden. Aber auch insbesondere mit dem Active_Directory-Support und LDAP ist Samba sehr viel stärker geworden gegenüber den neuesten Windows 2003-Servern. Die britische IT-Wekk berichtet sogar das Samba 3 dreimal so schnell sei, wie ein Windows 2003-Server.

1.2. Grundlagen

Wer das Glück hatte, bisher noch nicht viel mit Windows-Netzwerken zu arbeiten sollte sich vielleicht zunächst mit den /ProtokollGrundlagen vertraut machen.

2. Links

Die SMB-Clients sind auf smbmount und smbclient beschrieben.

Falls jemand mal schnell und dynamisch von Linux auf SMB Shares zugreifen will sollte er sich auch Komba2 LinNeighborhood und KDEs konqueror anschauen (lisa muss laufen).

3. Tips und Tricks

3.1. z.B. Virtuelle Server

Eine unscheinbare Option mit durchschlagender Wirkung ist.

[global]
netbios aliases = server prod test
include = /etc/samba/smb.conf.%L

Dadurch entstehen mehrere Server in der Netzwerkumgebung die man auch getrennt in den smb.conf.server, sowie smb.conf.prod .... einstellen kann. Auch die Option: config file sollte zu diesem Zweck verwendbar sein.

3.2. Dateinamen

Die Groß-/Kleinschreibung wird von UNIX/Linux beachtet, von Windows nicht. Manche Windows-Software ist auch noch quasi schizophren: Es werden Dateien in Kleinbuchstaben angelegt, und später wird mit Großbuchstaben darauf zugegriffen (und oh Wunder, wenn dann nix kommt @) )

Zeichensatz-Einstellung für korrekte Umlaute sowohl unter Linux als auch von Windows-Clients aus (diese Einstellung ist nicht standardmäßig voreingestellt!):

# korrekte Werte bei Samba 2.x:
 character set = ISO8859-1
 client code page = 850
# bei Samba 3.x:
 unix charset = ISO8859-1
 dos charset = 850

/!\ Dadurch ändert sich das Mapping, d.h. wenn man vorher falsche Settings drin hatte, so dass die Umlaute in Filenamen nur unter Windows korrekt aussahen, stimmen sie danach nicht mehr, weil Samba die Zeichen nun korrekt, aber eben anders interpretiert. Abhilfe kann hier u. U. auch convmv schaffen. Diese und andere Änderungen in der Konfiguration sollten nicht während einer aktiven Netzwerkverbindung getätigt werden. Hinsichtlich der Möglichkeit des Dateientauschens im Internet sollte man auf Umlaute (ä, ö, ü und ß) in Dateinamen jedoch generell verzichten.

3.2.1. Hinbiegen von falschen Umlauten

Angenommen man hat einen Samba 2.x, mit Charset-Settings auf Default (falsch für Deutschland), dann speichert Linux die von Windows-Usern gerne benutzten Umlaute falsch im Dateisystem ab, man sieht sie dann auch in z.B. mc nicht richtig auf dem Linux-Server.

Um dann auf Samba 3 mit richtigen Settings umzustellen, ist folgende Vorgehensweise möglich:

  1. Einstellen der falschen Settings in Samba 3, damit bekommt man auf Windowsseite erstmal richtige Dateinamen angezeigt:

 unix charset = CP850
 # ohne dos charset!
  1. Dann alle Daten von Windows aus vom Server z.B. auf die lokale Client-Festplatte kopieren.
  2. Dann Samba richtig konfigurieren (siehe vorheriger Abschnitt) und alle Daten wieder auf den Server kopieren.
  3. Jetzt stimmen die Umlaute sowohl am Client, als auch im Filesystem.

Oder convmv verwenden. -- HelmutGrohne 2005-12-01 23:39:03

3.3. Rechte / Modi / Attribute

Generell: UNIX-Rechte sind die Grundlage, per Samba kann man diese nur weiter einschränken.

Übrigens: Samba (mindestens ab Version 3) kontrolliert jede Minute, ob sich die Konfiguration geändert hat und liest diese gegebenenfalls neu ein. Ein "Reload" oder "Restart" ist deshalb nicht notwendig.

3.4. Windows Domänenadminstrator einrichten

Wenn man wie von Microsoft gewohnt einen Benutzer Administrator für die Domäne einrichten möchte (RID = 500), dann empfiehlt sich folgendes Vorgehen unter Debian:

3.4.1. DOS/WIN-Spezialattribute

Die Attribute System,Hidden,Archive gibt es unter UNIX nicht, Samba kann sie aber auf --x--x--x mappen:

map hidden = True
map system = True
map archive = True

Außerdem muss man darauf achten, dass 0111 in den div. "* mask" enthalten ist, sonst werden diese Mappings dadurch zunichte gemacht.

Ferner gibt der daraus resultierende chmod-Aufruf Probleme, wenn die Datei einen anderen Owner hat als den aktuell über Samba zugreifenden Benutzer (chmod darf nur der Owner und root natürlich).

3.4.2. Rechtevergabe auf Freigaben

Es ist sinnvoll, Zugriffsberechtigungen auf Freigaben auf eine gleichnamige UNIX-Gruppe abzubilden. Die Benutzer, die berechtigt sind, die Freigabe voll zu nutzen, fügt man dann einfach zu dieser UNIX-Gruppe hinzu. Wenn ein anderer Personenkreis Nur-Lese-Zugriff erhalten soll, verfährt man dementsprechend mit einer zweiten Gruppe namens ...-ro (read-only):

/etc/group:

einkauf:x:500:mueller,maier,schmidt
einkauf-ro:x:501:hinz,kunz

/etc/samba/smb.conf:

[einkauf]
        comment = Daten der Abteilung Einkauf
        path = /daten/einkauf
        read only = No
        valid users = @einkauf, @einkauf-ro
        read list = @einkauf-ro
        # force group = +einkauf    # kann statt sgid verwendet werden, "+" ist wichtig!
        # bei Benutzung einer ...-ro-Gruppe muss dies leider so gesetzt werden:
        create mask = 0775
        directory mask = 0775
        # ohne ...-ro-Gruppe ist dies besser:
        #create mask = 0771
        #directory mask = 0771

Wie man sieht, kann man so den Share-Namen, den UNIX-Pfad und die beteiligten Benutzergruppen alle vom Identifier "einkauf" direkt ableiten, was die Administration ungemein vereinfacht.

Damit beim Speichern einer Datei die Gruppe korrekt auf "einkauf" gesetzt wird (was ja nicht die primäre Gruppe des Benutzer ist), kann man entweder alle Verzeichnisse sgid und group einkauf setzen oder force group = +einkauf verwenden (das +-Zeichen ist hier extrem wichtig!).

find /daten/einkauf -type d -exec chgrp einkauf {} \;
find /daten/einkauf -type d -exec chmod g+s {} \;

Bei Umstellungen von bestehenden Datenbeständen empfiehlt es sich auch, einmalig zumindest Gruppe und Modus aller Verzeichnisse und Dateien sinnvoll zu setzen.

3.5. Freigaben per fstab einbinden

Um Freigaben einzubinden verwendet man in modernen Linuxsystemen das CIFS-Dateisystem (früher "smbfs"). In vielen Systemen ist mit man mount.cifs ausreichend Hilfe vorhanden.

Ein fstab-Eintrag kann so ähnlich aussehen:

//sambaserver/freigabe /mnt/mountpunkt cifs user=username,password=passwort,uid=502,gid=500

(mit uid und gid wird das DateiSystem mit den entsprechenden Eigentümern eingebunden, damit Du nachher auch Schreib- und Lesezugriff hast)

3.6. Freigaben in einem Terminal per mount einbinden

Dies funktioniert folgendermaßen:

mount -t cifs //server/freigabe[Verzeichnis] Mountpunkt/ -o { username=Benutzername,password=Paswort | credentials=/Pfad/Zu/Datei }

Mögliche Fehler (Details können per dmesg | tail abgerufen werden):

* -22: Unter Debian/Ubuntu hilft es, per apt-get install smbfs das Paket smbfs zu installieren, dann klappt das mounten

3.7. Schreib/Lese Rechte

Sollten in besondere nach Updates über das vorhandene Paketmanagment überprüft werden. Nicht nur einfach machen lassen, nachschauen ist die Devise. Debian z.b (dort ist es mir sehr unangenehm aufgefallen) setzt defaultmässig die writeable Permissons auf "NO" zurück, was das beschreiben von Netzwerkshare's faktisch unmöglich macht. Der Anwender steht da und wundert sich.

Hat mich ca. 6 Stunden beschäftigt, zwar @home, aber trotzdem finde ich ist so ein Verhalten, gelinde gesagt, etwas absonderlich.

3.8. File-Locking

Wenn dies falsch eingestellt ist, kann es zu merkwürdigem Verhalten und Abstürzen von Datenbankanwendungen kommen. Dann  blocking locks = no  ausprobieren, wenn das nicht reicht, zusätzlich noch strict locking = yes .

3.9. Quota-Hacks

Siehe quota/BenutzerUndGruppen.

3.10. Drucken

3.10.1. Samba & CUPS auf Debian

Siehe CUPS.

3.10.2. Drucken auf Drucker an Windows-Arbeitsplatz

[drucker]
    comment = Drucker an Arbeitsplatz xy
    path = /tmp
    print ok = yes
    browseable = yes
    print command = echo "print %s" | smbclient //clientname/druckername -Uusername%userpasswort ; rm %s

/!\ Am Besten einen Windows-User ohne Rechte nehmen, ansonsten wär das Passwort im Klartext wohl möglicherweise ein Problem.

3.10.3. PDF-Drucker

Mit dieser Druckfreigabe können Anwender einfach PDFs erzeugen - auf dem Client installiert man dazu einen Postscript-Druckertreiber, z.B. Apple Color Laserwriter. Das PDF wird immer als ~/pdf/output.pdf erzeugt (und überschreibt dabei gnadenlos das vorher erzeugte PDF, wenn man es nicht sinnvoll umbenannt hat).

[ps2pdf]
   comment = PS to PDF converter (-> $HOME/pdf/output.pdf), delete temp.ps!
   path = /tmp
   guest ok = yes
   create mask = 0700
   printable = yes
   browseable = yes
   read only = yes
   print command = ( mkdir %H/pdf ; rm %H/pdf/output.pdf ; ps2pdf %s %H/pdf/output.pdf ; rm %s ; rm %H/pdf/temp.ps )

/!\ Diese Methode funktioniert bei printing = cups nicht mehr, weil dort wohl nur in CUPS konfigurierte Drucker angesprochen werden.

3.10.4. Druckprobleme - druckt nicht mehr

Problem: Nach einem Hardwareproblem (mit Systemcrashes) ging plötzlich von allen Windows-Clients aus kein Ausdruck mehr, obwohl alle Dienste korrekt gestartet waren und an der Konfiguration nicht geändert worden war. Windows meldete nur lapidar Die Testseite konnte nicht gedruckt werden. Soll die Druckproblembehandlung angezeigt werden? Es konnte kein Druckauftrag erstellt werden., was nicht sehr hilfreich war. Die Testseite von CUPS funktionierte.

Lösung: Es fand sich dann Folgendes nach einem fehlgeschlagenen Druckversuch im Logfile eines Test-Arbeitsplatzes:

[2003/09/27 10:17:19, 0] tdb/tdbutil.c:tdb_log(475)
  tdb(/var/cache/samba/printing.tdb): rec_read bad magic 0x0 at offset=35728

Es ist also bei dem Crash die printing.tdb beschädigt worden. Dies ist eine Datei, die Samba automatisch erstellt, sie kann also einfach gelöscht werden:

/etc/init.d/samba stop
rm /var/cache/samba/printing.tdb
/etc/init.d/samba start

Und schon druckt es wieder! ;-)

Tritt übrigens bei Samba v3.0.11 immer noch auf, die Dateien heissen dort jetzt aber /var/cache/samba/printing/*.tdb - löschen hilft, werden automatisch neu generiert.

3.10.5. Druckprobleme - langsamer Ausdruck

Von http://www.edoceo.com/liber/network-cups.php - ohne Gewaehr, noch nicht ausprobiert:

Windows XP SP2 Slow Printing Bug

This information was difficult to find on the web so here it is. If printing to the Samba printer is slow from Windows XP with Service Pack 2 the issue is caused by some extra junky registry entries. It's unclear why this causes the problem, who's fault is it anyways?

The fix is to remove HKEY_CURRENT_USER\Printers\*.

# Values
HKEY_CURRENT_USER\Printers\DeviceOld = REG_SZ
# Subkeys
HKEY_CURRENT_USER\Printers\Connections
HKEY_CURRENT_USER\Printers\DevModePerUser
HKEY_CURRENT_USER\Printers\DevModes2
HKEY_CURRENT_USER\Printers\Settings

3.11. Performance-Tuning

Kann jemand die möglichen Optionen verständlich erläutern und eventuell einige Tips geben wie man diese Werte sinnvoll einstellt ?

SO_KEEPALIVE
SO_REUSEADDR erzwingt die sofortige Freigabe des Ports bei einem Crash. Normalerweise muss man dann ca. 2 Minuten auf den Timeout warten.
SO_BROADCAST
TCP_NODELAY
IPTOS_LOWDELAY
IPTOS_THROUGHPUT
SO_SNDBUF *
SO_RCVBUF *
SO_SNDLOWAT *
SO_RCVLOWAT *

Die manpage zu smb.conf erklärt leider nicht alles. Ich hatte einige performance Probleme vergangene Woche mit Samba 2.2.6 unter SuSE 8.1 mit win98, 2000 und XP Clients. Derzeit habe ich wie in der manpage angegeben die beiden Optionen aktiviert

socket options = TCP_NODELAY IPTOS_LOWDELAY

und seitdem läufts besser aber sonst - keine Ahnung; das Beispiel oben (mit mss usw.) verstehe ich nicht so ganz; die manpage zeigt als Beispiel noch

SO_SNDBUF = 8192

also genau 8kB - was ist denn nun sinnvoll und richtig ? -- IngoSchnieders 2003-02-14 20:26:55

3.12. (Un-)verschlüsselte Passwörter

Wenn die Unix und Windows-Logins auf gemeinsame Passwörter zugreifen sollen, gibt es drei Möglichkeiten:

  1. Die Passwörter werdem UNIX-mäßig gesichert, dann müssen alle Windows-Clients auf unverschlüsselte Passwörter umgestellt werden.
  2. Die Passwörter werden von Windows (oder Samba) verwaltet, dann muss man die Linux/Unix-Rechner entsprechend umstellen (z.b. über PAM).

  3. Die Passwörter werden in einem LDAP-Verzeichnis abgelegt.

Die erste Möglichkeit ist hier beschrieben:

Um einem Win-98 Client das verschlüsselte Passwort abzugewöhnen, muss der folgende Registry-Key erzeugt werden:

  1. Registry mit regedit.exe öffnen und wechseln nach: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP

  2. Erzeugen eines Eintrags (DWORD): EnablePlainTextPassword

  3. Ändern des Wertes auf: 1

Um einem Win-NT Client das verschlüsselte Passwort abzugewöhnen, muss der folgende Registry-Key erzeugt werden:

  1. Registry mit regedt32.exe öffnen und wechseln nach: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rdr\Parameters

  2. Erzeugen eines Eintrags (REG_DWORD): EnablePlainTextPassword

  3. Ändern des Wertes auf: 1

3.13. Samba als Zeitserver

[global]
time server = boolean
Default: no
Alternative: yes

Wenn die Variable auf "yes" gesetzt wird bietet der Samba Server die Zeit auch über das smb Protokoll an.

Die Windows Clients können jetzt mit  net time \\<timeserv> /set /yes  ihre eigenen Uhren stellen. (timeserv kann natürlich auch ein netbios alias Name sein.)

3.14. Suchen in einer Arbeitsgruppe

3.15. Samba konfigurieren mit SWAT

/!\ SWAT ist standardmäßig nicht verschlüsselt, da beim anmelden das Rootpasswort übertragen wird ist dies sehr gefährlich. Mit stunnel (www.stunnel.org) und openssl kann die Verschlüsselung jedoch leicht nachgerüstet werden.

Pakete installieren:

oder swat.sh

In den meisten Distributionen ist neben Samba ein Dienst namens SWAT enthalten. Diesen Dienst kann man leicht in der inetd-Konfiguration aktivieren. Damit wird auf dem Port 901 ein Webinterface zur Konfiguration von Samba bereitgestellt. Einfach in einem Browser localhost:901 aufrufen. Mit SWAT lassen sich Benutzer Anlegen der Samba Dienst neu starten und Freigaben für Verzeichnisse und Drucker erstellen.

/!\ SWAT hat (zumindest früher, aktueller Stand ist mir nicht bekannt) alle Kommentare und Default-Werte aus der smb.conf entfernt!

4. Spezielle Erfahrungen

5. Login Prozeduren

Windows erwartet beim anmelden, wenn nicht in der smb.conf ein festes loginscript eingetragen wurde in \\SERVER PDC\netlogon die datei %Username%.bat.

Ein Beispiel einer %Username%.bat

rem login script for group edvmitglieder
rem call public script first
rem u: is public directory
set aproedv=no
set kfmedv=yes
set admin=no
set po=no
set aida=no
set dcpa=no
set sfirm32=yes
call \\serverpdc\netlogon\global.bat

Mit den set anweisungen werden die enviromentvariablen gesetzt. Der Wert der Variablen wird in der aufgerufenen global.bat abgefragt.

Hier ein Beispiel einer Abfage auf den Wert einer Variablen.

rem persistent:no verhindert das w2k beim anmelden automatisch
rem die alten buchstaben wieder herstellen moechte
set persistent=/persistent:no
if not %kfmedv%==yes goto ekfmedv
   net use j: \\server\entwicklung   %persistent%
   net use t: \\andererserver\buchhaltung  %persistent%
:ekfmedv

Das bedeutet wenn die Variable kfmedv mit dem wert yes gefüllt ist werden die Laufwerksverbindungen hergestellt.

Umgehen der Rechte

Oft ist es notwendig während dem abarbeiten des Anmeldescipts dateien aus den Netz auf den Lokalen Rechner zu kopieren (z.B die Antivir Konfiguration oder Lizenzschlüssel). Um die Datei auf dem Klient überschreiben zu können gibt es folgende Lösung.

CPAU.exe einen runas klone

\\server\netlogon\CPAU.exe -u %COMPUTERNAME%\Administrator -p passwd -profile -ex  "xcopy /y \\server\path\zu\conf\datei c:\programme\ziel"

cpau -u administrator -p password -ex c:\tmp\test.bat -enc -file c:\tmp\job.cmd

das enstandene file job.cmd zu verschlüsseln und dann mit

\\path\to\cpau.exe -dec -file \\path\to\job.cmd

abarbeiten zu lassen. Hilfe gibts mit cpau /? Cpau findet man hier http://www.joeware.net/win/free/index.htm

6. Fragen und Antworten

Frage: kann Samba so konfiguriert werden, daß es die Passwörter von einem Windows 2000 Server benutzt ?




Problem: open_oplock_ipc: Failed to get local UDP socket for address 100007f. Error was Cannot assign requested.


Antwort: In der Datei /etc/samba/smb.conf folgende Zeile auskommentieren oder löschen:

passdb backend = smbpasswd guest

Ähnliches Problem:

  Probing module 'smbpasswd guest': Trying to load from /usr/lib/samba/pdb/smbpasswd guest.so
[2007/04/26 10:26:36, 3] lib/module.c:do_smb_load_module(49)
  Error loading module '/usr/lib/samba/pdb/smbpasswd guest.so': /usr/lib/samba/pdb/smbpasswd guest.so: cannot open shared object file: No such file or directory
[2007/04/26 10:26:36, 0] passdb/pdb_interface.c:make_pdb_method_name(174)
  No builtin nor plugin backend for smbpasswd guest found
[2007/04/26 10:26:36, 0] lib/util.c:smb_panic(1599)
  PANIC (pid 31029): pdb_get_methods_reload: failed to get pdb methods for backend smbpasswd guest

Lösung: passdb backend = smbpasswd guest ändern in passdb backend = smbpasswd




Samba (zuletzt geändert am 2022-03-31 17:08:40 durch JonesHamatoma)