Dateiattribute sind unter Linux erstmal abhängig vom Dateisystem. Da fast überall das "Second Extended File System (ext2fs)" benutzt wird, wird sich dieser Artikel hauptsächlich auf dieses Dateisystem beschränken. Die *DateiRechte* sind allerdings Unix-weit identisch, einige Hersteller kommerzieller Unix-Systeme packen dann noch ACLs (?AccessControlLists) oben drauf, um die Rechtevergabe noch feiner einteilen zu können.

In der Praxis gibt es aber kaum Szenarien, wo das nötig ist, wenn man das Prinzip der Unix-Standardrechte erst einmal begriffen hat.

Noch etwas: Dateierweiterungen sind Unix völlig egal: Man kann problemlos ein Programm `Textdatei.txt' nennen und es ausführbar machen, und es ausführen. Dateierweiterungen sind auch nicht so festgelegt wie unter DOS - der Punkt ist ein ganz normaler Bestandteil des Dateinamens und nimmt keine Sonderrolle ein.

Unter UNIX allgemein gibt "ls -l" für jede Datei etwa so etwas aus:

 -rwxr-xr-x   2 root     root        13876 Nov 17 15:13   myfile

Der Attributstring (10 Zeichen) gibt Auskunft darüber, WER mit dieser Datei WAS machen darf und WAS für ein Typ es ist. Der Rechte-String teilt sich in 1+3+3+3 Zeichen auf. Kurzgefaßt:

 -   Typ ("d" für directory, "b"lock device, "c"har device, etc)
 rwx Was darf der Besitzer der Datei mit ihr machen (bzw. was hat er sich selbst erlaubt).
 r-x Was dürfen Mitglieder der Gruppe mit der Datei machen.
 r-x Was darf der "Rest der Welt" mit der Datei machen.

Die Zeichenfolge "rwx" steht respektive für "read", "write", und "execute":

 r Leserecht. Bei Verzeichnissen Verzeichnisinhalt erfahren (s.u.)
 w Schreibrecht. Bei Verzeichnissen Dateien hinzufügen, löschen und umbenennen.
 x Ausführungsrecht. Bei Verzeichnissen in dieses Verzeichnis hineinwechseln.

Zusätzlich gibts noch folgende Attribute, die i.d.R. statt dem "x" eingesetzt werden, wo sie auftauchen:

 t (das 'sticky bit', für Verzeichnisse)

Jeder darf hier, aber nur seine Dateien. Sinnvoll für `/tmp' Verzeichnisse. Natürlich müssen auch die sonstigen Rechte stimmen, damit man überhaupt schreiben/lesen darf.

 s ('set user id', für Programme/Verzeichnisse)

Bei Ausführung wird dieses Programm mit den Rechten des Users ausgeführt, dem sie gehört, und nicht mit denen des Users, der sie ausführt. (sog. suid/sgid oder set user id/ set group id" Programme, können eine große Sicherheitslücke sein, wenn man sie nicht korrekt einsetzt!)

Beispiel:

Ein Verzeichnis (d) namens "Dateien" mit folgenden Attributen

 drwx--x--   2 oliver   winusers       1024 Nov 17 18:00 Dateien

dürfte also von Oliver gelesen, beschrieben und geändert (rwx) werden, alle User in der Gruppe `winusers' dürfen zwar ins Verzeichnis reinwechseln, aber haben keine Möglichkeit, den Inhalt des Verzeichnisses zu erfahren (s.u.), und wer nicht zur Gruppe `winusers' gehört, darf gar nix. Diese Rechte ändern darf nur der Besitzer der Datei, hier halt Oliver.

Obiges Gruppenrecht ist u.U. sehr nützlich: Man kann (als Oliver) jemandem der Gruppe erzählen, im Verzeichnis befindet sich eine Datei namens `Steuererklärung.sdc', die er -- entsprechende Rechte der Datei vorausgesetzt -- problemlos öffnen und auch verändern kann. Aber er hat keine Möglichkeit rauszufinden, daß in dem gleichen Verzeichnis noch eine Datei namens `Steuererklärung - Version fürs Finanzamt.sdc' liegt, die ganz andere Daten enthält, da er ja den Verzeichnisinhalt nicht erfahren kann. :-)

Einfach mal mit den Rechten rumspielen, das kann im Netzwerk sehr nützlich werden, wenn man diese flexibel einsetzt. Oliver muß im obigen Beispiel übrigens nicht zur Gruppe `winusers' gehören, er hat seine Rechte trotzdem ...

OK, wie ändere ich diese Attribute? das Programm chmod (Change file Mode) ist dafür verantwortlich. Es gibt zwei Methoden, die Modi zu benennen: mit Ziffern oder mit Buchstaben. Was einem besser gefällt, muß man selbst entscheiden. Mehr kann man auch mit man chmod erfahren. Ich erkläre hier erst mal nur die Buchstabenvariante.

 chmod [-R{fv}c] [ugoa][+=-][rwxst]

wobei:

 -R     recursive, für alle Unterverzeichnisse mit
 c      changes, alle Änderungen ausgeben
 f      quiet, gibt nur Fehler aus
 v      verbose, gibt alles aus
 ugoa   Rechte für (u)ser, (g)roup, (o)thers, oder (a)ll ändern
 +=-    Recht (+)hinzufügen, (=)gleichsetzen, oder (-)löschen
 rwxst  read, write, execute, suid/sgid, and "t" right

z.B:

 chmod -Rc ug+rw files/

setzt für Besitzer und Gruppe die Lese- und Schreibrechte rekursiv für alles unterhalb von `files/' (inkl des Verz. selbst).

 chmod -f o=w write-only-directory/

setzt für others (den Rest der Welt) die Rechte einer Datei auf "write" und löscht alle anderen - so können alle zwar Dateien in diesem Verzeichnis erstellen, aber weder kann jemand ein Listing anzeigen lassen noch können User andere Dateien ändern oder löschen, da sie deren Namen ja nicht erfahren können.

Solche Rechte hat Mc-Afee z.B. auf ihrem Viren-FTP-upload-Verzeichnis benutzt - jeder kann da Viren reinschieben, aber keiner kann gucken, was drin ist, geschweige denn Dateien runterladen. Mittlerweile akzeptieren sie Viren-Submissions wohl nur noch per EMail.

Weitere Attribute für Dateien, die weniger mit Rechten zu tun haben, findet man im Artikel DateiAttribute.

JensBenecke - revitol eye cream