Sie könnten bindfs
verwenden wie:
$ ls -ld dir
drwxr-xr-t 2 stephane stephane 4096 Aug 12 12:28 dir/
Dieses Verzeichnis gehört stephane, mit der Gruppe stephane (stephane ist ihr einziges Mitglied). Beachten Sie auch die t
das verhindert, dass Benutzer Einträge umbenennen oder entfernen, deren Eigentümer sie nicht sind.
$ sudo bindfs -u root -p u=rwD,g=r,dg=rwx,o=rD dir dir
Wir bindfs
dir
über sich selbst mit festen Eigentumsrechten und Berechtigungen für Dateien und Verzeichnisse. Alle Dateien scheinen im Besitz von root
zu sein (obwohl sie unten im realen Verzeichnis immer noch im Besitz von stephane sind).
Verzeichnisse erhalten drwxrwxr-x root stephane
Berechtigungen, während andere Dateitypen -rw-r--r-- root stephane
erhalten diejenigen.
$ ls -ld dir
drwxrwxr-t 2 root stephane 4096 Aug 12 12:28 dir
Jetzt funktioniert das Erstellen einer Datei, weil das Verzeichnis beschreibbar ist:
$ echo test > dir/file
$ ls -ld dir/file
-rw-r--r-- 1 root stephane 5 Aug 12 12:29 dir/file
Ein zweiter Schreibvorgang ist jedoch nicht möglich open()
auf diese Datei, da wir keine Berechtigung dafür haben:
$ echo test > dir/file
zsh: permission denied: dir/file
(Beachten Sie, dass Anhängen dort nicht erlaubt ist (da es nicht Teil Ihrer anfänglichen Anforderungen ist)).
Eine Einschränkung:Sie können zwar keine Einträge in dir
entfernen oder umbenennen wegen der t
Bit, neue Verzeichnisse, die Sie darin erstellen, haben nicht diesen t
Bit, sodass Sie dort Einträge umbenennen oder löschen können.
Die chattr +a
Option erlaubt nur das Anhängen. Dateien können auf diese Weise geändert werden, aber nur durch Hinzufügen (d. h. Anhängen von Zeilen) an sie. Sie können vorhandene Dateien nicht löschen, aber neue erstellen. Dies könnte Ihren Anforderungen entsprechen:
sudo chattr -R +a /dir/to/apply/to
ab man chattr
Eine Datei mit gesetztem Attribut `a' kann nur im Append-Modus zum Schreiben geöffnet werden. Nur der Superuser oder ein Prozess mit der Fähigkeit CAP_LINUX_IMMUTABLE kann dieses Attribut setzen oder löschen.
(Beachten Sie, dass dies auch für Verzeichnisse gilt)
Ihre Liste würde also folgendermaßen aussehen:
echo hello > test # succeeds, because test doesn't exist, and creation is allowed
echo hello2 > test # fails, because test already exists, and overwriting is not allowed
echo hello3 >> test # succeeds, because appending is allowed
cat test # succeeds, because reads are allowed
rm test # fails, because delete is not allowed