Das ext2/3-DateiSystem besitzt die Möglichkeit, Dateien und Verzeichnissen bestimmte Attribute anzuhängen, die das Verhalten bei verschiedenen Operationen steuern. Einige Attribute lassen sich auch global für das gesamte DateiSystem vorgeben.

||Attribut||Beschreibung||[[mount]]-Option||
||a||'''a'''(ccess)time - letzte Zugriffszeit wird nicht gespeichert||-o noatime||
||c||'''c'''ompressed - Datei wird komprimiert gespeichert||-||
||d||'''d'''ump - Datei wird beim Backup mit [[dump]] '''nicht''' berücksichtigt||-||
||i||'''i'''mmutable - Datei ist unveränderlich||-o ro||
||j||'''j'''ournal - Daten werden zuerst im Journal gespeichert||-o data=journal||
||s||'''s'''weep - Beim Löschen einer Datei wird der Speicherbereich mit Nullen überschrieben||-||
||S||'''S'''ync - Nach jeder Schreiboperation wird ein fsync ausgeführt||-o sync||
||t||'''t'''ail - Dateienden, die keinen vollen Block bilden, werden nicht mit anderen Dateien zusammengefasst||-o notail||
||u||'''u'''ndelete - Dateien werden beim Löschen für ein Undelete gesichert||-||

Mit `lsattr` kann man sich die Attribute anzeigen lassen, mit `chattr` kann man sie ändern.

Anmerkungen:

1) Diese Attribute vererben sich auf neu erzeugte dateien, wenn sie für das übergeordnete Verzeichnis gesetzt werden.

2) Die c-option scheint nicht zu funktionieren.

ToDo: Die Informationen unten sind hier im großen und ganze falsch platziert, bitte aufräumen.

Falls schon mal jemand "aus Versehen" ''/bin'' gelöscht hat, weiß er was ich meine. :) Einige Dateien sollten einfach nicht mal "kurz" löschbar sein. Auch nicht von root. Ich hab mir das in zwei Schritten gelöst:

= Hard links =

Es werden von allen wichtigen Dateien HardLink``s in ein spezielles Verzeichnis gelegt. Wenn man dann einen Eintrag löscht, macht man halt vom Hardlink wieder einen Hardlink zurück -- fertig. Also:

{{{
 $ mkdir /.hardlinks
 $ chmod 000 /.hardlinks                    # keiner darf da rein
 $ cp -Rvl /bin /sbin /etc /.hardlinks
}}}

Sollte funktionieren. Fehlermeldungen von wegen "cannot hard link directories" kann man ignorieren. Falls man mal sendmail neu konfigurieren will und/oder die aliases-Datenbank, muss man für `/etc/aliases*` die Hardlinks (vorübergehend) wieder entfernen -- denn manche Programme sehen Hardlinks als Sicherheitslücke an. Das [[ext2]]-DateiSystem bietet noch eine Reihe von zusätzlichen Attributen an, die hier benutzt werden könnten. Ich denke da an das i-Attribut. (für weitere Infos "man chattr" oder "man lsattr"). Also:

{{{
 # for X in bin sbin ; do
 > chattr +i /$X/*
 > done
}}}

Tipp von Andreas.Huennebeck@bruker.de:

Man kann in den Verzeichnissen, die man vor Radikalschlägen (wie z.B. `rm *` schützen möchte, eine leere Datei namens `-i` erzeugen; das geht mit `touch ./-i`. Die Shell expandiert dann den `*` aus `rm *` in eine Liste von Namen, an deren erster Stelle `-i` steht. `rm` interpretiert das dann als Option, d.h. es fragt bei jeder Datei nach, ob sie wirklich gelöscht werden soll.

Dieser Tipp ist allerdings hochgefährlich, da die Option -i so auch jedem anderen 'befehl *' angehängt wird, und je nach Befehl völlig anders interpretiert werden kann. Zudem kann man bei den meisten Kommandos mit -- die Liste der Optionen beenden, sprich die Datei -i lässt sich mit rm -- -i löschen, da nach dem -- keine Optionen mehr beachtet werden.