Ich möchte einem Benutzer die Berechtigung erteilen, Dateien in einem bestimmten Verzeichnis zu erstellen und zu lesen, aber keine Dateien zu ändern oder zu löschen. Wenn der Benutzer an Dateien anhängen kann, ist das in Ordnung, aber ich möchte lieber nicht. Dies ist auf Ubuntu Linux.
Ich denke, dass dies mit Standard-Unix-Dateiberechtigungen unmöglich ist, aber vielleicht ist dies mit ACLs möglich? Der Benutzer stellt immer eine Verbindung über SFTP her. Wenn es also eine Möglichkeit gibt, dies in SFTP zu steuern (im Gegensatz zu den Betriebssystemberechtigungen), ist dies in Ordnung.
Um ganz klar zu sein, möchte ich Folgendes:
- echo hallo> test # ist erfolgreich, da test nicht existiert und das erstellen erlaubt ist
- echo hallo >> test # kann erfolgreich sein oder fehlschlagen, je nachdem, ob das Anhängen erlaubt ist
- echo hello2> test # schlägt fehl, da der Test bereits vorhanden ist und Änderungen nicht zulässig sind
- Katzentest # erfolgreich, da Lesevorgänge zulässig sind
- rm test # schlägt fehl, da das Löschen nicht erlaubt ist
Wenn Sie sich fragen, warum ich das tun möchte, ist es, ein Duplicati-Backup-System resistent gegen Ransomware zu machen.
quelle
echo > test
, erstellt die Shell eineopen("test", O_WRONLY|O_CREAT|O_TRUNC)
Datei und ruftecho
diese auf , um den Inhalt so zu schreiben, dass er geändert wird. Jetzt konnte nur das erste Öffnen (WR) erfolgreich sein.Antworten:
Sie könnten
bindfs
wie folgt verwenden :Dieses Verzeichnis gehört stephane, die Gruppe stephane (stephane ist ihr einziges Mitglied). Beachten Sie auch
t
, dass Benutzer keine Einträge umbenennen oder entfernen können, die ihnen nicht gehören.Wir
bindfs
dir
überschreiben uns mit festen Eigentümern und Berechtigungen für Dateien und Verzeichnisse. Alle Dateien scheinen im Besitz von zu seinroot
(obwohl sie im realen Verzeichnis weiterhin im Besitz von stephane sind).Verzeichnisse erhalten
drwxrwxr-x root stephane
Berechtigungen, während andere Dateitypen-rw-r--r-- root stephane
solche erhalten.Das Erstellen einer Datei funktioniert jetzt, da das Verzeichnis schreibbar ist:
Es ist jedoch nicht möglich, ein zweites Mal in diese Datei zu schreiben
open()
, da wir keine Berechtigung dafür haben:(Beachten Sie, dass das Anhängen dort nicht zulässig ist (als Teil Ihrer anfänglichen Anforderungen).)
Eine Einschränkung: Während Sie
dir
aufgrund dest
Bits keine Einträge entfernen oder umbenennen können , haben neue Verzeichnisse, die Sie dort erstellen, diesest
Bit nicht, sodass Sie dort Einträge umbenennen oder löschen können.quelle
Die
chattr +a
Option erlaubt nur das Anhängen. Dateien können auf diese Weise geändert werden, jedoch nur durch Hinzufügen (dh Anhängen von Zeilen). Sie können vorhandene Dateien nicht löschen, sondern neue erstellen. Dies könnte Ihren Bedürfnissen entsprechen:von
man chattr
(Beachten Sie, dass dies auch für Verzeichnisse gilt.)
So würde Ihre Liste aussehen:
quelle
chattr +a
dann kann ich eine Datei erstellen, darf sie nicht entfernen, kann anhängen. Wenn ich dir1 / dir2 erstelle, kann ich machen, was ich will IN dir2