Ist es möglich, eine Datei zu erstellen, die über alle Berechtigungen verfügt, aber nicht gelöscht werden kann?

15

Ohne sudo, am liebsten?

Evan
quelle
2
Gott, Wurzel, was ist der Unterschied? ars.userfriendly.org/cartoons/?id=19981111 In der Praxis wäre eine Datei, die nicht einmal root später löschen konnte, ein Traum eines Malware- Autors .
Dan Neely
Ich bin damit einverstanden, dass @DanNeely Plus auch eine Form des Löschens einer Datei ist;)
Rinzwind

Antworten:

3

Versuchen:

chattr +i filename

Wenn Sie dies dennoch tun, kann die Datei auch vom rootBenutzer nicht gelöscht werden. Gehen Sie dabei mit Vorsicht vor.

Aditya
quelle
5
wenn es das tut touch test && chattr +i test, wirft es einen Fehler aus; chattr: Operation not permitted while setting flags on test. Sie brauchen sudodafür. Daneben ist es noch möglich, die Datei zu löschen: sudo chattr -i test && rm testfunktioniert.
Rinzwind
23

Nein das ist nicht möglich. Normalen Benutzern ist es nicht möglich, eine Datei zu löschen.

  1. Sie müssen sudoverhindern, dass Benutzer Dateien löschen. Ihr Administrator kann immer eine Datei löschen.

  2. sudo chattr +i testkann das Löschen verhindern, erfordert aber sudo. Ein einfaches sudo chattr -i testmacht es möglich, die Datei zu entfernen. Kein anderer Benutzer als admin kann verwenden chattr.

Und ... durch einfaches Neustarten und Aufrufen des Rettungsmodus kann diese Person diese Datei löschen. Es wäre ein Sicherheitsrisiko, wenn es eine Methode gäbe, um eine Datei niemals löschen zu können.

Rinzwind
quelle
8

Es ist ein wenig grob, aber das ist nah - wenn Sie den Schreibzugriff auf das Verzeichnis entfernen, können die darin enthaltenen Dateien nicht gelöscht werden. Und es ist nicht erforderlich, sudowenn Sie es besitzen:

=^_^= izkata@izein:~$ mkdir test
=^_^= izkata@izein:~$ touch test/delme
=^_^= izkata@izein:~$ chmod a-w test
=^_^= izkata@izein:~$ echo 'Hello' > test/delme 
=^_^= izkata@izein:~$ cat test/delme 
Hello
=^_^= izkata@izein:~$ rm test/delme 
rm: cannot remove `test/delme': Permission denied

So können Sie Berechtigungen für die Datei selbst festlegen, wie Sie möchten.

Wie von @Rinzwind angegeben, gibt es sicherlich viele Möglichkeiten, dies zu umgehen.

Izkata
quelle
Das sieht genau so aus, wie es das OP wollte. ( Ich bin mir nicht sicher, warum sie es wollten.) Benutzer können die Dateien lesen, ändern und ausführen, aber nicht die Verknüpfung aufheben (entfernen).
Eliah Kagan
8

Um eine Datei zu löschen, benötigen Sie Schreibrechte für alle Verzeichnisse, mit denen die Datei verknüpft ist. Um die Verknüpfung zu einem Verzeichnis aufzuheben, benötigen Sie eine Schreibberechtigung für dieses Verzeichnis.

Solange Sie der Datei eine Schreibberechtigung (oder sogar ein Eigentumsrecht) erteilen, jedoch nicht dem Verzeichnis oder den Verzeichnissen , mit denen diese Datei verknüpft ist, kann diese Datei nicht gelöscht werden.

Der beste Weg, dies zu erreichen, besteht darin, diese Datei mit einem Verzeichnis zu verknüpfen, dessen Eigentümer root ist und das von niemandem beschrieben werden kann. Sie könnten es stattdessen zu Ihrem Eigentum machen, was bedeuten würde, dass Sie und root es löschen könnten.

Auf diese Weise könnten andere Benutzer diese Datei weiterhin mit anderen Verzeichnissen verknüpfen und von dort aus die Verknüpfung aufheben. Sie könnten die Datei jedoch weiterhin nicht löschen, da sie die Verknüpfung zu Ihrem eigenen Verzeichnis aufheben könnten.

Damit dies vollständig funktioniert, muss die Schreibberechtigung für jede Pfadkomponente zur Datei gesteuert werden. Da zum Beispiel , wenn die Datei , /a/b/the-fileund Sie haben /a/bnicht beschreibbar von jedermann , aber jeder hat den Schreibzugriff auf /a, dann könnten sie umbenennen , /a/bum etwas anderes und ihre eigenen erstellen /a/bund ihre eigenen schaffen /a/b/the-filees.

Stéphane Chazelas
quelle