Using Samba

Using Samba

Robert Eckstein, David Collier-Brown, Peter Kelly
1st Edition November 1999
1-56592-449-5, Order Number: 4495
416 pages, $34.95

Buy the hardcopy

Inhaltsverzeichnis


Previous: 5.2 Unterschiede der Dateisysteme Kapitel 5
Browsing und fortgeschrittene Disk Shares
Next: 5.4 Name Mangling und Case
 

5.3 Dateirechte und Attribute auf MS-DOS und Unix

DOS war niemals als ein Multiuser- und Netzwerk-Betriebssystem geplant. Unix andererseits wurde von Anfang an in diese Richtung hin entworfen. Folglich gibt es Widersprüche und Lücken in der Berichterstattung zwischen den zwei Dateisystemen, die Samba nicht nur wissen, sondern auch Lösungen liefern muss. Eine der größten Abweichungen voneinander stellt die Behandlung der Dateirechte in Unix und DOS dar.

Werfen wir einen Blick darauf, wie Unix Rechte zuweist. Alle Unix-Dateien besitzen Lese-, Schreib- und Ausführungs-Bits für drei Klassen von Usern: Eigentümer, Gruppe und alle. Diese Rechte kann man am äußersten linken Rand sehen, sobald der Befehl ls -al in einem Unix-Verzeichnis ausgegeben wird. Ein Beispiel:

-rwxr--r--   1 tom     users   2014 Apr 13 14:11 access.conf     

Windows dagegen hat vier Hauptbits, die es mit jeder Datei verwendet: Read-only, System, Hidden und Archiv. Du kannst diese Bits einsehen, indem du auf die Datei rechts klickst und den Menüpunkt Eigenschaften wählst. Du solltest einen Dialog wie in Figur 5.6 sehen.[1]

[1] Die System Checkbox wird vielleicht bei deiner Datei grau unterlegt sein. Sorge dich deswegen nicht - du sollst es noch sehen können, wann die Box gewählt wird und wann nicht.

Figur 5.6: DOS und Windows, Datei-Eigenschaften

Figur 5.6

Es folgt die Erklärung jedes dieser Bits:

Read-only

Der Dateiinhalt kann von einem User gelesen werden, aber man kann nicht darauf schreiben.

System

Die Datei hat eine bestimmte Aufgabe im Betriebssystem.

Hidden

Diese Datei wurde für den User als unsichtbar markiert, außer das Betriebssystem ist explizit eingestellt, sie zu zeigen.

Archiv

Diese Datei wurde verändert, seit das letzte DOS-Backup auf ihm durchgeführt wurde.

Beachte, dass es kein Bit zur Kennzeichnung gibt, wenn eine Datei ausführbar ist. DOS- und Windows NT-Dateisysteme identifizieren ausführbare Dateien über ihre Erweiterungen .EXE, .COM, .CMD oder .BAT.

Folglich ergibt sich keine Verwendung für eines der drei verarbeitbaren Unix-Bits, die auf einer Datei in einer Samba Disk-Share vorhanden sind. Nun, DOS-Dateien haben ihre eigenen Attribute, die aufbewahrt werden müssen, wenn sie in einer Unix-Umgebung gespeichert werden: Archiv-, System- und Hidden-Bit. Samba kann diese Bits bewahren durch Wiederverwendung der ausführbaren Rechte-Bits der Datei auf Seiten von Unix - wenn es angewiesen wird, das zu tun. Nun, das Mappen dieser Bits hat einen unvorteilhaften Nebeneffekt: wenn ein Windows-User eine Datei in einer Samba-Share speichert und du schaust sie in Unix mit dem ls -al -Befehl an, würden einige der ausführbaren Bits nicht verstehen, wozu du sie erwartet hattest.

Drei Samba-Optionen entscheiden, ob die Bits gemappt werden: map archive, map system, und map hidden. Diese Optionen mappen die Archiv-, System- und Hidden-Attribute auf Eigentümer-, Gruppen- beziehungsweise Allgemein-Bits der Datei. Du kannst diese Optionen der [data] -Share hinzufügen, indem du jede ihrer Werte einstellst, wie folgt:

[data]
	path = /home/samba/data
	browseable = yes
	guest ok = yes
	writeable = yes
	map archive = yes
	map system = yes
	map hidden = yes

Danach versuch, unter Unix eine Datei in der Share zu erzeugen - etwa wie hello.java - und ändere die Rechte der Datei auf 755. Mit diesen eingestellten Samba-Optionen solltest du die Rechte auf der Windows-Seite überprüfen und sehen können, dass jede der drei Werte in der Eigenschaften-Dialogbox angehakt wurde. Was ist mit dem Read-only-Attribut? Als Vorgabe setzt Samba 2.0 das immer, wenn eine Datei das Eigentümer Schreibrecht-Bit nicht gesetzt hat. Mit anderen Worten, du kannst dieses Bit durch Ändern der Dateirechte auf 555 setzen.

Wir machen dich darauf aufmerksam, das der Vorgabewert der Option map archive auf yes steht, während die anderen zwei Optionen den Vorgabewert no besitzen. Das geschieht deswegen, weil viele Programme nicht ordentlich arbeiten, wenn das Archiv-Bit für DOS- und Windowsdateien nicht korrekt gespeichert wird. System- und Hidden-Attribut dagegen sind nicht kritisch für die Arbeit eines Programms und sind dem Ermessen des Administrators anheimgestellt.

Figur 5.7 fasst die Bits für Unixrechte zusammen und illustriert, wie Samba diese Bits auf DOS-Attribute mappt. Beachte, dass das Gruppen-Schreib/Lese-Bit und das Allgemein-Schreib/Lese-Bit nicht direkt in ein DOS-Attribut übertragen werden können, aber sie behalten noch ihre alten Unix-Definitionen auf dem Sambaserver.

Figur 5.7: Wie Samba und Unix die Dateirechte betrachten

Figur 5.7

5.3.1 Masken für die Erzeugung von Dateien

Samba hat einige Optionen als Hilfe für Masken zur Dateierzeugung. Masken zur Dateierzeugung (oder umasks) helfen, die Rechte festzulegen, die eine Datei oder ein Verzeichnis im Moment seiner Erzeugung bekommt. In Unix bedeutet das, dass du kontrollieren kannst, welche Rechte eine Datei oder ein Verzeichnis nicht besitzt, wenn es erzeugt wird. Für Dateien, auf die von Windows aus zugegriffen wird, bedeutet das: du kannst das Read-only-, Archiv-, System- und Hidden-Attribut einer Datei auch ausschalten.

Die Option create mask z.B. zwingt dazu, die Rechte einer von einem Windows-Client erzeugten Datei auf höchstens 744 zu setzen:

[data]
	path = /home/samba/data
	browseable = yes
	guest ok = yes
	writeable = yes
	create mask = 744

während die hier gezeigte Option directory mask die Einstellung der Rechte für ein neu erzeugtes Verzeichnis auf höchstens 755 zulässt:

[data]
	path = /home/samba/data
	browseable = yes
	guest ok = yes
	writeable = yes
	directory mask = 755

Alternativ dazu kannst du auch verschiedene Bits mit den Optionen force create mode und force directory mode erzwingen. Diese Optionen bilden ein logisches ODER gegenüber den Datei- und Verzeichnis-Erzeugungsmasken. Damit wird sichergestellt, dass solcherart festgelegte Bits immer gesetzt werden. Du würdest typischerweise diese Optionen global setzen, um sicherzustellen, dass Gruppen- und Allgemein-Schreib/Lese-Rechte passend für neue Dateien oder Verzeichnisse in jeder Share gesetzt wurden.

In derselben Weise, wenn du explizit die Unix-Besitzer und -Gruppen-Attribute einer auf der Windows-Seite erzeugten Datei setzen willst, kannst du die Optionen force user und force group verwenden. Ein Beispiel:

[data]
	path = /home/samba/data
	browseable = yes
	guest ok = yes
	writeable = yes

	create mask = 744
	directory mask = 755
	force user = joe
	force group = accounting

Diese Optionen ordnen eigentlich einen statischen Unix-User und eine Gruppe jeder Verbindung zu, die zu einer Share hergestellt wird. Nun, das geschieht after der Authentifizierung des Clients; es erlaubt keinen freien Zugriff auf eine Share. Diese Optionen werden häufig benutzt für ihre Nebeneffekte bei der Zuweisung eines bestimmten Users und einer Gruppe zu jeder neuen Datei oder jedem neuen Verzeichnis, das in einer Share erzeugt wird. Benütze diese Optionen mit Besonnenheit.

Eine der Fähigkeiten von Unix schließlich, die DOS fehlt, ist das Vermögen, eine read-only Datei aus einem beschreibbaren Verzeichnis zu löschen. Wenn in Unix ein Verzeichnis beschreibbar ist, kann eine read-only Datei in diesem Verzeichnis dennoch entfernt werden. Das könnte dir erlauben, Dateien in jedem deiner Verzeichnisse zu löschen, selbst wenn die Datei von jemand anderem hinterlassen wurde.

DOS-Dateisysteme sind nicht für mehrere User eingerichtet, und daher entschieden ihre Entwickler, dass read-only "geschützt gegen zufällige Änderung, inbegriffen Löschen" bedeutet, eher als "geschützt gegen irgendwelche andere User auf einer Single-User-Maschine." Daher verboten die Entwickler von DOS das Entfernen einer read-only Datei. Sogar heute noch zeigen Windows-Dateisysteme dasselbe Verhalten.

Normalerweise ist das harmlos. Windowsprogramme versuchen gar nicht, read-only Dateien zu löschen, weil sie wissen, dass es eine schlechte Idee ist. Nun, eine Anzahl von Quellcode-Kontrollprogrammen - die zuerst für Unix geschrieben wurden - laufen unter Windows und fordern die Fähigkeit, read-only Dateien zu löschen. Samba erlaubt dieses Verhalten mit der Option delete readonly. Um diese Funktion zu ermöglichen, setzt du die Option auf yes:

[data]
	path = /home/samba/data
	browseable = yes
	guest ok = yes
	writeable = yes

	create mask = 744
	directory mask = 755
	force user = joe
	force group = accounting
	delete readonly = yes

5.3.2 Optionen der Datei- und Verzeichnisrechte

Die Optionen für Datei- und Verzeichnisrechte werden in Tabelle 5.5 zusammengefasst; jede Option wird dann im Detail beschrieben.


Tabelle 5.5: Optionen der Datei- und Verzeichnisrechte

Option

Parameter

Funktion

Vorgabe

Bereich

map archive

boolean

Schützt das DOS Archiv-Attribut im User-Arbeits-Bit (0100).

yes

Share

map system

boolean

Schützt das DOS System-Attribut im Gruppen-Arbeits-Bit (0010).

no

Share

map hidden

boolean

Schützt das DOS Hidden-Attribut im Allgemein-Arbeits-Bit (0001).

no

Share

create mask (create mode)

numerisch

Setzt die maximalen Rechte für von Samba erzeugte Dateien.

0744

Share

directory mask (directory mode)

numerisch

Setzt die maximalen Rechte für von Samba erzeugte Verzeichnisse.

0755

Share

force create mode

numerisch

Erzwingt die festgelegten Rechte (bitweises ODER) für von Samba erzeugte Dateien.

0000

Share

force directory mode

numerisch

Erzwingt die festgelegten Rechte (bitweises ODER) für von Samba erzeugte Verzeichnisse.

0000

Share

force group (group)

string (Gruppenname)

Setzt die effektive Gruppe für einen auf diese Share zugreifenden User.

Nichts

Share

force user

string (Username)

Setzt den effektiven Usernamen für einen auf diese Share zugreifenden User.

Nichts

Share

delete readonly

boolean

Erlaubt einem User das Löschen einer read-only Datei aus einem beschreibbaren Verzeichnis.

no

Share

5.3.2.1 create mask

Das Argument für diese Option ist eine Oktalzahl, die erkennen lässt, welche Berechtigungs-Flags von einem User beim Erzeugen einer Datei in einer Share gesetzt werden könnten. Die Vorgabe ist 0755, was bedeutet: der Unix-Eigentümer kann höchstens lesen, schreiben und auf Wunsch seine oder ihre eigenen Dateien ausführen, während Mitglieder der Gruppe des Users und andere sie nur lesen und ausführen können. Wenn du sie auf nicht ausführbare Dateien ändern musst, empfehlen wir 0644 oder rw-r--r--. Merk dir, dass die Execute-Bits vom Server verwendet werden könnten, sichere DOS Dateiattribute zu mappen, wie vorher beschrieben. Wenn du die create mask veränderst, müssen diese Bits auch Teil der erzeugten Maske sein.

5.3.2.2 directory mask

Das Argument für diese Option ist eine Oktalzahl, die erkennen lässt, welche Berechtigungs-Flags von einem User beim Erzeugen eines Verzeichnisses in einer Share gesetzt werden könnten. Die Vorgabe ist 0755, was jedem erlaubt, auf der Unix-Seite die Verzeichnisse höchstens zu lesen und zu durchstreifen, aber nur dir erlaubt, sie zu ändern. Wir empfehlen die Maske 0750, die den Zugriff von allgemeinen Usern wegnimmt.

5.3.2.3 force create mode

Diese Option setzt die Berechtigungsbits, die Samba zu setzen erzwingt, wenn eine Änderung der Dateirechte gemacht wurde. Es wird oft verwendet, um Gruppenrechte zu erzwingen, wie vorher besprochen. Es kann auch benützt werden, um einige der DOS-Attribute voreinzustellen, die wir erwähnten: Archiv (0100), System (0010) oder Hidden (0001). Diese Option tritt immer nach den Optionen map archive, map system , map hidden und create mask in Kraft.

Viele Windows-Applikationen benennen ihre Daten-Dateien in datafile.bak um und erzeugen neue, auf diese Weise verändern sie ihren Besitz und die Berechtigung, sodass Mitglieder derselben Unix-Gruppe sie nicht editieren können. Die Einstellung force create mode = 0660 wird die neue Datei für die Gruppenmitglieder editierbar halten.

5.3.2.4 force directory mode

Diese Option setzt die Berechtigungsbits, die Samba zu setzen erzwingt, wenn eine Änderung der Verzeichnisrechte gemacht oder ein Verzeichnis erzeugt wurde. Es wird oft verwendet, um Gruppenrechte zu erzwingen, wie vorher besprochen. Diese Option hat die Voreinstellung 0000 und kann geradeso verwendet werden wie force create mode, um Gruppen- oder andere Rechte wenn nötig zu ergänzen. Diese Option tritt immer nach den Optionen map archive, map system, map hidden und directory mask in Kraft.

5.3.2.5 force group

Diese Option, manchmal group genannt, weist eine statische Gruppen-ID zu, die auf allen Verbindungen zu einem Dienst verwendet wird, nachdem der Client sich erfolgreich ausgewiesen hat. Das ordnet eine besondere Gruppe zu jeder neuen Datei oder jedem neuen Verzeichnis zu, die (das) von einem SMB-Client erzeugt wurde.

5.3.2.6 force user

Die Option force user weist eine statische User-ID zu, die auf allen Verbindungen zu einem Dienst verwendet wird, nachdem der Client sich erfolgreich ausgewiesen hat. Das ordnet einen besonderen User zu jeder neuen Datei oder jedem neuen Verzeichnis zu, die (das) von einem SMB-Client erzeugt wurde.

5.3.2.7 delete readonly

Diese Option erlaubt einem User, ein Verzeichnis zu löschen, das eine read-only Datei enthält. Als Vorgabe werden DOS und Windows eine solche Operation nicht gestatten. Du willst vielleicht diese Option ausgeschaltet lassen, außer wenn ein Programm diese Fähigkeit braucht, viele Windows-User würden entsetzt sein, wenn sie entdecken, dass sie zufällig eine Datei löschten, die sie read-only gesetzt hatten. Tatsächlich fragt sogar der Unix-Befehl rm die User, ob sie wirklich den Schutz aufheben und read-only Dateien löschen wollen. Es ist eine gute Idee, Samba zuletzt als vorsichtigen Aufpasser zu haben.

5.3.2.8 map archive

Das DOS Archiv-Bit wird gebraucht, um eine Datei zu kennzeichnen, die verändert wurde, seit sie zuletzt archiviert wurde (z.B. ein Backup mit dem DOS Archiv-Programm.) Die Einstellung der Samba-Option map archive = yes verursacht, dass das DOS Archiv-Flag auf das Unix-Bit "Ausführen durch den User" (0100) gemappt wird. Am besten lässt du diese Option eingeschaltet, wenn deine Windows-User ihre eigenen Backups machen oder Programme benützen, die das Archiv-Bit erfordern. Unix fehlt der Begriff eines Archiv-Bits völlig. Backup-Programme nehmen typischerweise eine Datei, die auflistet, bei welchen Dateien an welchem Datum ein Backup gemacht wurde, so erfüllt der Vergleich der Datei-Modifikationsdaten denselben Zweck.

Die Einstellung dieser Option auf yes verursacht hin und wieder eine Überraschung auf Unix, wenn ein User bemerkt, dass eine Datendatei als ausführbar markiert ist, aber kaum Schaden anrichtet. Versucht ein User sie auszuführen, bekommt er oder sie normalerweise eine Fehlermeldung, wenn die Shell die ersten wenigen Zeilen als Kommandos auszuführen versucht. Das Umgekehrte ist ebenfalls möglich; ein exekutierbares Unix-Programm schaut aus, wie wenn es kürzlich auf Windows kein Backup gehabt hätte. Aber das ist selten und gewöhnlich harmlos.

5.3.2.9 map system

Das DOS System-Attribut wird benützt, um Dateien als für das Betriebssystem nötig zu bezeichnen. Sie dürfen nicht gelöscht, umbenannt oder ohne besondere Mühe verschoben werden. Setz diese Option nur, wenn du Windows-Systemdateien auf dem Unix-Fileserver speichern musst. Ausführbare Unix-Programme werden als nicht-verschiebbare besondere Windows-Dateien erscheinen, wenn sie von Windows-Clients betrachtet werden. Das mag sich als ein wenig ungünstig erweisen, wenn du eine verschieben oder entfernen willst. In den meisten Fällen ist es aber ziemlich harmlos.

5.3.2.10 map hidden

DOS verwendet das Hidden-Attribut, um anzuzeigen, dass eine Datei gewöhnlich nicht in den Verzeichniseinträgen gesehen werden darf. Unix hat keine solche Anlage, es ist die Sache von individuellen Programmen (vor allem der Shell) zu entscheiden, was zu zeigen und was nicht zu zeigen ist. Normalerweise wirst du keine DOS-Dateien haben, die versteckt sein müssen, also ist es am besten, diese Option ausgeschaltet zu lassen.

Die Einstellung dieser Option auf yes bewirkt beim Server das Mappen des Hidden-Flag auf das Bit "Ausführbar für alle" (0001). Dieses Feature kann einen ziemlich überraschenden Effekt erzeugen. Jedes Unix-Programm, das von allen exekutierbar ist, scheint zu verschwinden, wenn du es von einem Windows-Client aus suchst. Wenn diese Option nicht gesetzt ist und ein Windows-User versucht, eine auf einer Samba-Share versteckte Datei zu markieren, wird es nicht funktionieren - Samba hat keinen Platz, um das Hidden-Attribut zu speichern!


Previous: 5.2 Unterschiede der Dateisysteme Next: 5.4 Name Mangling und Case
5.2 Unterschiede der Dateisysteme Buch-Index (engl.) 5.4 Name Mangling und Case

O'Reilly Home | O'Reilly Bookstores | How to Order | O'Reilly Contacts
International | About O'Reilly | Affiliated Companies

© 1999, O'Reilly & Associates, Inc.