WORM Filesystem

1.  Man braucht den WORM Administrator (root bzw. delegiert an user)
    Man braucht den oder die Worm Benutzer,
    die müssen eine andere Userid und/oder Rolle sein, als der WORM Administrator
    Im Beispiel ist der Administrator 'root' und der Benutzer 'ulrich'

2.  Admin: Kreiere ein ZFS filesystem 
    mkfile 100m /var/tmp/d0
        zpool create -m none tank /var/tmp/d0
        zfs create -o mountpoint=/tmp/worm tank/worm

3.  Admin: In dem Filesystem werden die Rechte für group und others entfernt
    Rechte für group und others entfernt
        chmod og=rx /tmp/worm

4.  Admin: Dann noch ein Unter-Filesystem z.B. für den Monat
        cd /tmp/worm
        mkdir 2012-02
      
5.  Admin: Die Rechte werden jetzt aufgesetzt
        chmod og-rwx    2012-02        # Rechte für group und others weg
        chmod A-        2012-02        # erstmal alle ACLs weg

        chmod A+user:ulrich:list_directory/add_file/read_attributes/execute:allow 2012-02
        # das erlaubt die Rechte auf das Verzeichnis: listen, neue Dateien, Attribute lesen, cd
        # subdirectories erzeugen ist nicht erlaubt!

        chmod A+user:ulrich:delete_child:deny    2012-02
        # Löschen von Elementen in dem Verzeichnis wird für den User verboten
 
        chmod A+user:ulrich:read_data/append_data/read_attributes:file_inherit/inherit_only:allow 2012-02
        # das erlaubt lesen der Datei, ausschliesslich anfügen  und attribute lesen
        # es gilt nicht fürs directory, sondern ausschliesslich für neu erzeugte Dateien

        chmod A+user:ulrich:write_data:file_inherit/inherit_only:deny    2012-02
        # Dieses gilt nicht fürs Verzeichnis sondern für neu erstellte Dateien.
        # Schreiben von Daten an beliebiger Stelle oder von Anfang einer Datei an wird verboten.

Jetzt kann der User ulrich Dateien erzeugen, hineinschreiben (aber nur verlängern)
und die Dateien können nicht vom User ulrich gelöscht werden:

ulrich@dhcp-efra05-44-104 [79] $ cd 2012-02
ulrich@dhcp-efra05-44-104 [80] $ ls
ulrich@dhcp-efra05-44-104 [81] $ echo hallo > log
ulrich@dhcp-efra05-44-104 [82] $ echo kaputt >log
bash: log: Permission denied
ulrich@dhcp-efra05-44-104 [83] $ echo kaputt >>log
ulrich@dhcp-efra05-44-104 [84] $ rm log
rm: log: override protection 644 (yes/no)? y
rm: log not removed: Permission denied
ulrich@dhcp-efra05-44-104 [85] $ cat log
hallo
kaputt
ulrich@dhcp-efra05-44-104 [86] $ 

Der Admin User kann die Dateien löschen (notfalls würde er die Macht haben, das Filesystem
platt zu machen, es ist eben "SoftWORM").

Jeden Monat macht er ein neues Verzeichnis, in das die logs geschrieben werden sollen.
Er kann dann da das Schreiben dicht machen und nach einiger Zeit die Logs löschen,
nachdem sie gesichert/archiviert sind.
Oder er kann sie lange Zeit so stehen lassen, wenn die Probleme mit Sicherung und
Platz bedacht sind. Keiner kann sie modifizieren.

ABER: es gibt ein Security Problem: der owner hat immer das Recht write_acl
	Also: man muss dem log-System immer Dateien zum Schreiben zur Verfügung stellen,
	dann ist er limitiert auf das Anhängen.

Noch ein Problem: Anscheinend macht der NFS-Server nicht alle Dateien auf die er schreibt.
	Das ist noch in Klärung.
	CIFS soll funktionieren (macht immer open() systemcall.)

Funktionieren soll die Einstellung append_only, muss ich noch prüfen.

Also: die Geschichte hat noch (mindestens) ein Kapitel