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 |
compressed - Datei wird komprimiert gespeichert |
- |
d |
dump - Datei wird beim Backup mit dump nicht berücksichtigt |
- |
i |
immutable - Datei ist unveränderlich |
-o ro |
j |
journal - Daten werden zuerst im Journal gespeichert |
-o data=journal |
s |
sweep - Beim Löschen einer Datei wird der Speicherbereich mit Nullen überschrieben |
- |
S |
Sync - Nach jeder Schreiboperation wird ein fsync ausgeführt |
-o sync |
t |
tail - Dateienden, die keinen vollen Block bilden, werden nicht mit anderen Dateien zusammengefasst |
-o notail |
u |
undelete - 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 HardLinks 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.