GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Erlauben Sie dem Besitzer, Dateien zu erstellen und zu lesen, aber nicht zu ändern oder zu löschen

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

Linux
  1. Alle Dateien in einem Verzeichnis löschen, dessen Name nicht mit einer Zeile in einer Dateiliste übereinstimmt?

  2. Dateien finden, die ein Benutzer nicht lesen kann?

  3. Kann ein Skript ausführbar, aber nicht lesbar sein?

  4. So erstellen Sie einen fast root-äquivalenten Benutzer, aber keinen root-identischen Benutzer in Linux

  5. Bash-Skript zum Löschen aller bis auf N Dateien bei alphabetischer Sortierung

Qt erstellt keine Ausgabedateien in Debug-/Release-Ordnern unter Linux

Wie lösche ich alle Dateien in einem Ordner, aber lösche den Ordner nicht mit NIX-Standardbibliotheken?

Finden Sie die Dateien, die in einem Verzeichnis vorhanden sind, aber nicht im anderen

Automatische Versionierung bei Dateiänderung (ändern/erstellen/löschen)

Löschen Sie alle bis auf 1000 zufällige Dateien in einem Verzeichnis

Allen Benutzern erlauben, Dateien in einem Verzeichnis zu erstellen, aber nur der Eigentümer kann Dateien löschen