Linux Server - Samba


Beispiel Samba Konfiguration im User Modus

Die folgende Konfiguration ist ein Beispiel für einen Samba-Server im User Modus. Wir werden ein paar Features einbauen, die die Mechanismen klären, die hier eine Rolle spielen. Die Konfiguration wird mit verschlüsselten Passwörtern arbeiten, also für Windows-Rechner ab Win98 geeignet sein.


Die smb.conf Datei


[global]
  security = user
  workgroup = ARBEITSGRUPPE
  printing = bsd
  guest account = nobody
  encrypted passwords = Yes

[homes]
  comment = Home Directories
  browseable = no
  read only = no
  create mode = 0750

[printers]
  comment = All Printers
  browseable = no
  printable = yes
  public = no
  writable = no
  create mode = 0700

[hansprn]
  comment = Der Drucker nur fuer Hans
  valid users = hans
  path = /home/hans
  printer = lp
  public = no
  writable = no
  printable = yes

[hansdir]
  comment = Hans Verzeichnis
  path = /usr/Daten/hans
  valid users = hans
  public = no
  writable = yes
  printable = no

[hansotto]
  comment = Verzeichnis von Otto und Hans
  path = /usr/Daten/OH
  valid users = otto hans
  public = no
  writable = yes
  printable = no
  create mask = 0765

[public1]
  comment = Public Stuff
  path = /usr/Daten/p
  public = yes
  writable = no
  printable = no
  write list = @sambauser

[public2]
  path = /usr/Daten/p2
  public = yes
  only guest = yes
  guest account = hans
  writable = yes
  printable = no

[pchome]
 comment = PC Directories
 path = /usr/Daten/pc/%m
 public = no
 writeable = yes


Die [gobal]-Sektion

Diese Sektion enthält hier eigentlich nur eine Neuerung, die Angabe
  security = user
Damit schalten wir die Sicherheit auf User-Level und zwingen somit jeden Windows-Benutzer, sich zuerst mit Usernamen und Passwort "anzumelden". Wir hätten diese Angabe auch ganz weglassen dürfen, denn ab Samba 2.0 ist der User-Level die voreingestellte Sicherheitsstufe.

[printers] und [homes]

Diese beiden Sektionen haben keinerlei neue Einstellungen erfahren, sie arbeiten unter der userbasierten Sicherheitsstufe genauso wie in der freigabebasierten.

Der private Drucker: [hansprn]

Der Abschnitt [hansprn] enthält die Angaben für einen Drucker, den nur hans benutzen darf. Diese Einstellung wird dadurch möglich, dass die Anweisungen
  valid users = hans
  public = No
eingefügt werden. Die Anweisung public = No heißt einfach, dass dieser share nicht öffentlich ist, wir hätten genauso schreiben können guest account = no. "public" und "guest account" sind Synonyme.

Die wichtige Einstellung wird mit valid users = hans vorgenommen. Durch diese Einstellung bekommt nur der User hans das Recht, den share zu benutzen, auch wenn alle anderen User ihn angezeigt bekommen.

Ein Verzeichnis nur für einen User: [hansdir]

Wie schon beim Drucker hansprn, so können wir mit valid users auch einem Verzeichnis klarmachen, dass nur der User darauf zugriff hat, der unter valid users genannt ist. Jeder andere User bekommt das Verzeichnis zwar zu sehen, sobald er es aber öffnen will, wird er nach einem Passwort gefragt:

Selbst wenn er das Passwort von hans wissen würde, hat er keinerlei Zugriff, denn sein Username ist ja nun einmal nicht hans...

Zu beachten ist hier wieder die Tatsache, dass der User hans auch unter Linux die gewünschten Rechte auf das entsprechende Verzeichnis haben muß.

Ein Verzeichnis für mehrere User: [hansotto]

Die Anweisung valid users kann auch dazu benutzt werden, einer bestimmten Menge von Usern Zugriff auf ein Verzeichnis zu geben. In diesem Abschnitt hatten wir geschrieben:
  valid users = otto hans
Das heißt, sowohl otto, als auch hans dürfen auf dieses Verzeichnis zugreifen. Es ist auch hier natürlich notwendig, dass unter Linux entsprechende Rechte für die beiden User existieren.

Ein öffentliches Verzeichnis, beschreibbar nur von einer Unix-Gruppe: [public1]

Im nächsten Abschnitt definieren wir eine ganz spezielle Technik. Der share [public1] ist für alle zugänglich, aber nur ReadOnly. Alle Mitglieder der Gruppe sambauser haben jedoch Schreibrechte auf diesen share. Das wird durch die folgende Anweisung erreicht:
  write list = @sambauser
Durch den vorgestellten Klammeraffen erkennt Samba den Begriff sambauser als Unix-Gruppennamen. Mitglieder dieser Gruppe sind also schreibberechtigt, obwohl der share als ReadOnly freigegeben wurde. Das muß natürlich wiederum auf der Linux-Seite genauso freigegeben werden, etwa:
drwxrwxr-x   2 root     sambause     1024 May 30 13:09 /usr/Daten/p
Eine ganz raffinierte Möglichkeit steht uns so zur Verfügung, wenn wir auf der Unix-Seite dem Verzeichnis das Recht 770 verpassen, also dem Rest der Welt keine Rechte geben:
drwxrwx---   2 root     sambause     1024 May 30 13:09 /usr/Daten/p
Wenn ein Mitglied der Gruppe sambauser jetzt auf das Verzeichnis zugreift, bekommt er vollen Zugriff, inklusive Schreibrecht:

Versucht jedoch ein User, der nicht Mitglied der Gruppe sambauser ist, auf den share zuzugreifen, so bekommt er eine Fehlermeldung:

Samba konnte ja nicht zugreifen, denn unter der UserID von (in unserem Beispiel) efka, der nicht Mitglied der Gruppe sambauser ist, ist kein Zugriff möglich (---).

Ein beschreibbares Verzeichnis für alle: [public2]

Das nächste Beispiel zeigt ein Verzeichnis, das von allen beschreibbar ist. Allerdings sind hier zwei neue Eigenschaften, die sich genau darum drehen:
  only guest = yes
  guest account = hans
  writable = yes
Wir legen mit der ersten Anweisung fest, dass dieses Verzeichnis nur für Gäste zugreifbar ist, legen aber dann in der zweiten Zeile fest, dass der Gastaccount der User hans ist. Das heißt, dass hier jeder User schreiben kann, er aber immer nur unter der UserID von hans schreibt. Das Verzeichnis muß also Linux-seitig nur das Schreibrecht für hans besitzen.

Für jeden Windows-Rechner ein eigenes Verzeichnis: [pchome]

Im Abschnitt [pchome] nutzen wir die Variablensubstitution von Samba, um jedem Windows-Rechner ein eigenes Verzeichnis zuzuweisen, unabhängig vom jeweiligen Benutzer. Die Anweisung
  path = /usr/Daten/pc/%m
legt den Pfad für das freizugebende Verzeichnis fest. Die Konstruktion %m wird durch den NetBIOS-Namen des Windows-Rechners ersetzt, der die Anfrage stellt. Heisst also ein Windows-Rechner WS1, so wird das Verzeichnis /usr/Daten/pc/WS1 freigegeben, heißt ein anderer Windows-Rechner beispielsweise aber GOLEM, so sucht Samba hier nach /usr/Daten/pc/GOLEM.

Hätten wir statt %m z.B. ein %u benutzt, so hätten wir auch ein Verzeichnis für jeden User anbieten können...