Gibt es eine Möglichkeit, das Löschen bestimmter Dateien aus dem benutzereigenen Verzeichnis zu verhindern?

42

Lassen Sie uns sagen Benutzer hat Directory1 und es enthält File1 File2 CantBeDeletedFile Wie machen , so würde der Benutzer nie löschen dürfen CantBeDeletedFile ?

Wenn ich den Besitzer von Directory1 ändere und Schreibrechte entferne, können Benutzer keine Datei löschen. Sie könnten auch keine neuen Dateien usw. hinzufügen.

Ich möchte nur in der Lage sein, einige Dateien einzustellen, die niemals gelöscht werden würden.

Genauere Beschreibung.

Ich erstelle Benutzerprofile. Ich erstelle Anwendungsstarter-Dateien auf ihrem Desktop . Daher möchte ich einige Launcher-Dateien (.desktop) so einrichten, dass der Benutzer sie nur starten kann und sie weder umbenennen noch löschen kann. Starten Sie sie einfach.

Derzeit, wenn der Benutzer das Verzeichnis besitzt, das eine Datei enthält. Er kann löschen.

Wenn es keinen generischen Weg für all * nix gibt, ist es Linux und ext4 FS.

bakytn
quelle

Antworten:

40

(Ich mag es nicht, das Heim von Nutzern zu stören. Ich denke, sie sollten das tun dürfen, was sie wollen. Aber trotzdem.)

Dies sollte (zumindest) unter Linux funktionieren. Ich gehe davon aus, dass userbereits ein Mitglied der Gruppe ist user. Eine Lösung besteht darin, den Eigentümer des Directory1Verzeichnisses zu ändern und das Sticky-Bit für das Verzeichnis festzulegen:

chown root:user Directory1
chmod 1775 Directory1

Dann benutze:

chown root Directory1/CantBeDeletedFile

userDiese Datei kann jetzt aufgrund des Sticky-Bits¹ nicht entfernt werden. Sie können userweiterhin ihre eigenen Dateien hinzufügen / entfernen Directory1. Beachten Sie jedoch, dass sie nicht gelöscht werden können, Directory1da sie niemals geleert werden.

-
1. Wenn das Sticky-Bit für ein Verzeichnis aktiviert ist, können Benutzer (außer dem Eigentümer) nur ihre eigenen Dateien in einem Verzeichnis entfernen. Dies wird für Verzeichnisse mit den /tmpBerechtigungen 1777= verwendet rwxrwxrwt.

Stéphane Gimenez
quelle
Ich mag es auch nicht, aber Benutzer sind Neulinge in der Linux-Welt. WENN sie zufällig einen Launcher löschen,
fangen
Danke, es funktioniert! Ich bin mir nicht sicher, wie ich vorgehen soll. Mit chattr oder so. Wenn du unterwegs bist. Ich kann das Verzeichnis immer noch als root löschen. Mit der oberen Lösung (chattr) kann sogar root den Ordner nicht löschen.
Bakytn
@bakytn: ist das nur eine vorsichtsmaßnahme oder hast du tatsächlich den supportanruf bekommen? Da die meisten Neulinge wahrscheinlich zu ängstlich sind, um mit Dateien zu spielen, die sie nicht kennen.
Lie Ryan
@Lie Ryan 100% sicher, dass sie um Unterstützung bitten würden. Aber ja, momentan ist es nur eine Vorsichtsmaßnahme.
Bakytn
Früher oder später müssen sich die Stützräder lösen ... und wenn sie nicht gelernt haben, Fahrrad zu fahren, ist der Unfall etwas zu sehen. Ich bin mit der Antwort einverstanden, wahrscheinlich ergänzt durch eine umfangreiche Online-Hilfe und Spam-Dosen. "Wenn Sie ThisDesktopFile 'versehentlich' gelöscht haben, gehen Sie zuerst zur nächsten Wand und schlagen Sie Ihren Kopf dreimal hart dagegen (zum Glück), und tun Sie dies dann cp /here/is/the/master/ThisDesktopFile $HOME. Signiert : BOfH "
vonbrand
63

Machen Sie die Datei mit dem iAttribut unveränderlich .

chattr +i file.desktop

siehe man chattrfür weitere Informationen.

Keith
quelle
8
Ich füge diesen Hinweis hinzu, da ich ihn nicht aus der genannten Manpage ableiten konnte: Funktioniert chattrnur auf ext2 / ext3 / ext4-Dateisystemen.
Manatwork
Das ist so cool! Es funktionierte! Danke mein Herr! Elegante Lösung, aber eine Einschränkung. Sogar root kann diese Dateien nicht löschen, ohne sie vorher veränderbar zu machen. Aber das ist wirklich so cool. Ich war mir nicht sicher, welche Antwort ich annehmen sollte. Akzeptiert generischer Weg, aber weniger schnell
bakytn
@manatwork funktioniert zumindest auch auf XFS, ich vermute, dass einige andere Dateisysteme diese Attribute ebenfalls unterstützen.
Ruslan
Um diesen Befehl rückgängig zu machen, machen Sie einfachchattr -i file.desktop
GreenRaccoon23
1
Ich habe das gerade auf zfs unter Linux getestet und es hat funktioniert. Ich wollte verhindern, dass eine Datei gelöscht wird, mit der das Sicherungsprogramm angewiesen wird bacula, den Ordner zu ignorieren.
Drescherjm
2

Ich glaube nicht, dass es eine Möglichkeit gibt, das Löschen einer einzelnen Datei mit Unix-Dateiberechtigungen zu verhindern, aber ich kann mir eine Problemumgehung vorstellen: Schreiben Sie einen Daemon, der ihn ersetzt, wenn er entfernt wird. inotify-toolsist perfekt für diese Art von Dingen, wenn Sie unter Linux arbeiten.

Es gibt verschiedene Möglichkeiten, das gelöschte Element zu ersetzen: Kopieren Sie ein neues Element oder bewahren Sie die reale Datei an einem sicheren Ort auf und kopieren Sie einfach einen Link in das Benutzerverzeichnis. Für den Link können Sie entweder einen Symlink oder einen Hardlink verwenden. Ich würde mit einem Symlink beginnen, aber einige (sehr wenige) Programme behandeln Symlinks nicht richtig. Wenn Sie feststellen, dass der Benutzer auf ein solches Programm stößt, verwenden Sie stattdessen einen festen Link.

Shawn J. Goff
quelle
0

Eine einfache

chmod -i filename

Schützt diese Datei vor dem Löschen.

rm filename
rm: remove write-protected regular file 'filename'?

Sie können es immer noch löschen, aber zumindest müssen Sie sicher genug sein, was Sie tun.

Fiatjaf
quelle