Ich möchte Benutzern die Möglichkeit geben, Schreib- und Lesedateien in einem anderen Benutzerverzeichnis zu erstellen, aber keine Option zum Löschen der Datei nach dem Erstellen haben (klebriges Bit wird hier nicht funktionieren ...), zum Beispiel:
Ich habe einen Benutzer manager
mit einem Verzeichnis, in das repository
ich worker1
Dateien schreiben muss, /manager/repository
aber die Dateien, in die
ich Dateien worker2
schreiben muss, /manager/repository
aber die Dateien, in die
ich einen Benutzer habe worker3
, in den ich Dateien schreiben muss, aber nicht löschen kann , aber nicht löschen /manager/repository
kann Löschen Sie die Dateien
aber worker 1-2-3
nicht löschen Sie die Dateien nach nur erstellt manager
und root
können die Dateien löschen worker 1-2-3
erstellt.
Ich habe versucht , einig chown
und chmod
Tricks mit dem Sticky - Bit ohne Erfolg anwenden.
quelle
worker*
Schreiben die Benutzer auf bestimmte Weise in das Verzeichnis? Sie haben in einem Kommentar erwähnt, dass Protokolldateien hier abgelegt werden. Bedeutet dies, dass eine bestimmte ausführbare Datei gestartet wird, um hier Dateien zu erstellen? In diesem Fall können Sie derworker
Gruppe diesudo
Berechtigung erteilen , die ausführbare Datei als auszuführenmanager
. Dann würde die ausführbare Datei alsmanager
Benutzer Protokolle erstellen , die von den Arbeitern gelesen werden könnten.Antworten:
Im Gegensatz zu Windows gibt es unter Unix / Linux keine eindeutige Löschberechtigung. Das Recht zum Löschen (oder Erstellen oder Umbenennen) einer Datei ist an das enthaltene Verzeichnis gebunden. Entfernen Sie die Schreibberechtigung für die Worker
/manager/repository/
, um den Workern das Erstellen, Löschen und Umbenennen von Dateien zu verweigern.Beachten Sie, dass es nicht möglich ist, die Erstellung von Dateien zuzulassen, sondern deren Löschung zu verweigern.
quelle
Stellen Sie zunächst sicher, dass ACL in Ihrem System aktiviert ist, und führen Sie dann diesen Befehl aus
Wie es funktioniert
Dieser Befehl gibt dem Eigentümer für das Verzeichnis Lese-, Schreib- und Ausführungsberechtigungen
/manager/repository
. Es werden alle Berechtigungen widerrufen fürworker1
,worker2
undworker3
.Dadurch erhalten andere Benutzer Lese- und Schreibzugriff, der Löschzugriff wird jedoch verweigert.
Von
man setfacl
:quelle
echo " " > $file
würde der Dateiinhalt mit "" überladen, was technisch gesehen ein Schreibvorgang ist, aber den Inhalt effektiv löscht. Es scheint, als wäre ein echtes Repo wie svn hier die beste Wahl.Um dies mit Berechtigungen zu tun, benötigen Sie ein System mit Unterstützung für ACLs, die NFSv4-ACLs ähneln. Unter FreeBSD
nfsv4acls
können Sie beispielsweise Folgendes tun , wenn das Dateisystem mit dem Flag bereitgestellt wird :Um Mitgliedern der Gruppe ausdrücklich die Erlaubnis zu verweigern .
delete_child
worker-group
Beachten Sie jedoch, dass die Mitarbeiter, da sie Eigentümer der von ihnen erstellten Dateien sind, weiterhin in der Lage sind, die ACLs für sie zu ändern. Wenn Sie sich die
delete
Berechtigung erteilen, hat dies Vorrang vor derdelete_child
Berechtigung des übergeordneten Verzeichnisses, und ich bin es nicht Sicher gibt es einen Weg, dies zu umgehen (zumindest bei UFS-Dateisystemen unter FreeBSD). Zum Beispiel könnten sie tun:quelle
Schreibberechtigungen aus dem
/manager/repository
Ordner entnehmen . Alle Benutzer, die nicht root sind, können also aus den darin enthaltenen Dateien schreiben oder löschen/manager/repository
, jedoch keine Dateien aus diesem Verzeichnis löschen.quelle
Wir können die Dateien und Ordner ändern, aber nicht löschen.
Führen Sie die folgenden Befehle aus, um die Attribute zu entfernen:
Für Dateien:
Für Verzeichnisse:
quelle
a
bedeutet das Attribut nur Anhängen. Können Benutzer diese Dateien bearbeiten ? (2) Wie wirkt sich das Festlegen desa
Attributs auf ein Verzeichnis aus?