Linux User Group Xanten

Samba Einführung

Was ist Samba?

Samba ist die Implementierung eines Server-Message-Bocks-(SMB)-Protokollserver für Linuxsysteme. Dieses Protokoll dient den M$-Servern/Clients zum Dateiaustausch und Druckerzugriff. Samba simuliert einen kompletten Windowsserver. Hinter Samba steckt lediglich eine Programmfamilie, die es einem ermöglicht auf einen Unix/Linux-System Dateien- und Druckerfreigaben zu machen bzw. auf entfernte Windows-Ressourcen zuzugreifen. Die wichtigsten Programme sind "smbd" und "nmbd".

Die gute Nachricht ist: Zur Verwaltung benutzt Samba eine einzige Konfigurationsdatei. Jetzt die Schlechte: Das Monster hat über 200 verschiedene Parameter. Wobei die meisten in der Praxis nicht angepackt werden müssen.
Die aktuelle Sambaversion ist 2.2.7a

Die Konfiguration

Die wichtigste Datei ist die "smb.conf" (/etc/samba/smb.conf oder /etc/smb.conf).
Standardmäßig in 4 Sektionen aufgeteilt


[global]
workgroup = arbeitsgruppe
netbios name = rechnername
# Hier finden sich die Einstellungen für den ganzen Server wieder

[Freigabe]
path = /home/server
browseable = yes
writable = yes
# eine einfache Verzeichnisfreigabe

[homes]
comment = Die Heimat
browseable = no
writeable = no
# exportiert das jeweilige User-Home-verzeichnis

[printers]
comment = All Printers
browseable = no
path = /tmp
printable = yes
public = no
writable = no
# gibt die Drucker für Windwos-Systeme frei

Die "smb.conf"

Genauere Betrachtung der Konfigurationsdatei.

Unter dem Abschnitt [global] verbergen sich alle Parameter, die für die allgemeinen Funktionalitäten des Servers von Bedeutung sind, z.B.: netbios name oder workgroup. Weitere Parameter:

max log file = 1000; bedeutet, dass die Log-Datei nie größer als ~1MB wird
syslog=[0-4]; je höher die Zahl, desto mehr Infos gibt es. "4" gibt von jeder Info bis zum Crash alles aus.
syslog only; regelt, ob die Fehlermeldungen nur an den Syslogd gehen oder auch in die spezifischen Samba-Log-Dateien geschrieben werden.
deadtime = x; automatische Verbindungstrennung nach x Minuten

Mit der [homes]-Sektion wird jedem Benutzer sein eigenes Verzeichnis zur Verfügung gestellt.
In [printers] können die eingerichteten Drucker freigegeben werden.


[freigabe]
# absoluter Pfad zur Freigabe
path = /home/freigabepfad
# Freigabe schreibar?
writeable = yes
# Datei-Rechte für neu angelegte Dateien
create mask = 0755
# Verzeichnisrechte für neue Verzeichnisse
directory mask = 0755
# in der Netzwerkumgebung sichtbar?
browseable = yes
# zulässige User
valid users = user, @group

Szenario:

Es gibt 3 Mitarbeiter mit jeweils einem Rechner und einen zentralen Linux-Server. Die Rechner sind über ein Netzwerk verbunden; Rechner Platz1, Platz2, Platz3 und Server. Folgende Bedingungen sollen erfüllt werden:
a) Rechner Platz1, Platz2 und Platz3 sollen Zugriff auf einen Drucker am Server haben
b) Platz1 und Platz2 sollen ihre gemeinsamen Daten auf dem Server ablegen können
c) Platz3 soll ein Verzeichnis bekommen, auf das nur er zugreifen kann

Anhand dieser Bedingungen wird nun die entsprechende Konfiguration in der "smb.conf" erstellt.



Abschnitt [global]:
# Die Arbeitsgruppe, in der der Sambarechner seinen Dienst macht
workgroup = arbeitsgruppe
# Unter diesem Namen ist der Rechner ansprechbar -> Netbios-Name
netbios name = Server
# Zusatzinfo zum Rechner
server string = Samba %v
# Authentifizierungsmodus
security = user
# Verschlüsselte Passwörter verwenden?
encrypt passwords = yes

Das Gruppenverzeichnis einrichten:
Als erstes richtet man eine Gruppe (z.b. smbgroup) ein (/etc/group) und fügt Mitarbeiter 1 und 2 dort hinzu. Das gemeinsame Verzeichnis anlegen und mit entsprechenden Rechten ausstatten:


groupadd smbgroup
chgrp smbgroup /var/freigabe
chmod 770 /var/freigabe
chmod g+s /var/freigabe
Anlegen der 3 Mitarbeiter (ralf, ute, mirko):
useradd -m -g smbgroup ralf
useradd -m -g smbgroup ute
useradd -m mirko
smbpasswd -a ralf
smbpasswd -a ute
smbpasswd -a mirko

Die Freigabe in der "smb.conf" definieren.



# Die Freigabe heißt "Daten"
[Daten]
# der absolute Pfad zur Freigabe
path = /var/freigabe
# soll die Freigabe beschreibbar sein? Alternativ kann auch "read only = no" genutzt werden
Writeable = yes
# nur berechtigte User sollen sich verbinden können
valid users = @smbgroup
# geöffnete Dateien nur lesbar anbieten?
Locking = yes
# Dateien/Verzeichnisse die angelegt werden bekommen folgende Rechte
create mode = 0770
directory mode = 0770
# Diese zwei geben die max. Rechte an
force create mode = 0770
forec directory mode = 0770
# Diese zwei stellen sicher, dass die Dateien/Verzeichnisse mit diesen Rechten erstellt werden
Hier eine übliche HOME-Verzeichnis-Definition
[homes]
# Pfad zum Home; %H repräsentiert den jeweiligen User-Home-Pfad
writeable = yes
create mode = 0600
directory mode = 0700
browseable = no
Den Drucker einrichten
[global]
printing = bsd
[printer4all]
comment = Drucker für Alle
printable = yes
writable = no

Samba guckt in der /etc/printcap nach einem entsprechenden Drucker namens "printer4all".
"Fertig".
Um die Syntax der smb.conf checken zu lassen, kann man das Tool "testparm" benutzen. Einfach starten und auf eventuelle Fehlermeldungen achten.

Sambadienst starten

Der Sambadienst besteht hauptsächlich aus dem Freigabedienst (smbd) und dem Namensdienst (nmbd). Diese Dienste müssen gestartet werden. Es gibt 2 Möglichkeiten dieses zu tun. Erste Möglichkeit ist über den Superdaemon "inetd". Dafür müssen folgende Dateien bearbeitet werden:


/etc/services
netbios-ssn	139/tcp
netbios-ns	137/udp

/etc/inetd
netbios-ssn stream tcp nowait root /usr/.../smbd smbd
netbios-ns dgram udp wait root /usr/.../nmbd nmbd

Nun den inetd restarten und der inetd lauscht auf port 137/139 um bei Anfragen den Sambadienst zu starten. Die zweite Möglichkeit ist den Samba-Server selber als Daemon zu starten. Ist bei häufigen Verbindungsanfragen zu empfehlen, da die Reaktionszeiten wesentlich kürzer sind.


smbd -D
nmbd -D
Die Installation testen

Um die Konfiguration zu testen wird ein Verbindungsaufbau versucht.
smbclient -L rechnername -N
Es sollten sämtliche Freigaben aufgelistet werden.

Auf eine Freigabe verbinden
Die Dateifreigabe:
smbclient //rechnername/freigabe -U username
Die Druckerfreigabe:
smbclient //rechnername/druckername -P -U username

Sicherheitsmodis

SHARE:
Jeder, der ein gültiges Accountpasswort hat, darf sich auf die Freigaben verbinden. Samba versucht anhand des Passwortes einen gültigen User zu finden. Sinnvoll bei DOS-/Win95-Maschinen bzw. alle Rechner die keine Profilverwaltung kennen. Samba versucht anhand eines Passwort-Vergleichs herauszufinden, ob das übertragene Passwort mit einem auf der Unix-Maschine registrierten User übereinstimmt. Um die Share auf bestimmte User zu beschränken gibt es den Parameter "user"
user = username1 username2 username3
Wird ein gültiger Name gefunden wird die Verbindung freigegeben. Diese Art der Freigabe macht wegen Sicherheitsrisiken höchstens im Familiennetzwerk Sinn.

USER:
Im USER-Mode akzeptiert Samba nur gültige User/Passwort Kombinationen. Der User muss einen gültigen Linux-Account haben und zusätzlich einen gültigen Samba-Account. Passwörter "müssen" jeweils gleich sein.

Usernamen und Passwörter

Die Usernamen und Passwörter werden in Großbuchstaben übertragen. Samba konvertiert diese Parameter automatisch wieder in Kleingeschriebenes und sucht diese dann am Authentifizierungsbackend (passwd, ldap, ect.). Usernamen wie "lars" und "Lars" werden gefunden, jedoch "LaRs" schon nicht mehr. Mit dem Parameter "username level" kann man auch sicherstellen das "LaRs" gefunden wird.
"username level" erwartet eine ganze Zahl, mit der bestimmt wird, wie viele Großbuchstaben im Username vorkommen können. Im Fall von "LaRs" reicht ein "username level = 2". Dies kann bei langen Usernamen mit vielen Groß-/kleinkombinationen viel Rechenleistung erfordern, weil Samba in BrutalForce Manier die Möglichkeiten durchtesten.

Das Gleiche gilt für Passwörter -> password level = x

Systeme, die nur 8 Buchstaben als Usernamen zulassen

Windows-Benutzernamen können "beliebig" lang sein, auf manchen Systemen dürfen jedoch 8 Zeichen nicht überschritten werden. Mit "username map = datei_mit_usernamen" kann man diesem Problem Herr werden. Die Datei mit den Usernamen muss wie folgt aufgebaut werden:
gültiger_username = Das_ist_ein_langer_Windows_Username Administrator SuperHosch
Wenn ein Benutzer versucht sich als "Administrator" mit einer Freigabe zu verbinden, muss er das Passwort für den Account des angegebenen "gültiger_username" übermitteln. Auch gelangt er in das Homeverzeichnis des Linuxuser. Die Datei darf auch Gruppenzuweisungen beinhalten -> gültiger_username = @users.

Umstellung von unverschlüsselten Passwörter zu Verschlüsselten

Das ist eine recht dumme Situation, weil Windwos-Kennwörter mit den Unix-Kennwörtern nicht kompatibel sind. Aus diesem Grund muss dem Samba-Server nun eine 2. Passwortdatei vorgehalten werden. Alle User "müssen" von Hand in die neue Passwortdatei (smbpasswd) hinzugefügt werden. -> smbpasswd -a [username] Man kann die smbpasswd auch "schleichend" automatisch füllen lassen. Dafür stellt man in der [global]-Sektion "encrypt passwords = no" und "update encrypted = yes". Jetzt wird bei jeder Verbindung die smbpasswd entsprechend gefüllt. In dieser Phase spielt die smbpasswd keine besondere Rolle, es ist lediglich eine Bitanhäufung ohne Zweck. Ist man der Meinung, man hat "alle" Username nun auch in der smbpasswd, stellt man die Parameter "encrypt passwords = yes" und "update encrypted = no" um. Ab jetzt gilt die smbpasswd als Authentifizierungsdatei.

Lizenz

Dieser Text unterliegt der GNU Free Documentation License (FDL). Freie Verbreitung in modifizierter oder unmodifizierter Form ist erlaubt; Modifikationen müssen unmißverständlich gekennzeichnet sein und ebenfalls unter der FDL vertrieben werden.

Copyright (C) Marc Giavarra
Erschienen auf LugX.de, letzte Änderung 2003-03-15

Diese Seite wurde zuletzt am Mo, den 9. Aug 2004 bearbeitet.

Druckfreundliche Version  Druckfreundliche Version