
Ich habe ein Skript, das das Vorhandensein einer Datei prüft und, falls vorhanden, eine Liste von E-Mail-Adressen daraus liest, um Benachrichtigungen zu senden. Wenn ich keine Benachrichtigung brauche, z. B. wenn ich bei der Arbeit bereits die Ausgabe überwache, benenne ich es um. Ich möchte nur nicht, dass andere Administratoren es möglicherweise löschen.
Ich weiß, chattr +i
dass die Datei dadurch unveränderlich wird, aber ich möchte nur verhindern, dass die Datei gelöscht wird. Ich nehme an, das Chattr-Programm würde die Inode-Nummer und nicht den Dateinamen verwenden, um Attribute zu verfolgen.
Gibt es ein Dienstprogramm, mit dem dies möglich ist?
Antwort1
Der Kommentar zu "anderen Admins" deutet darauf hin, dass Sieroot
Berechtigung auf dem System, auf dem Sie die Datei speichern möchten. Alles, was Sie hinsichtlich der Berechtigungen einrichten, kann von jemandem mit denselben Berechtigungen rückgängig gemacht werden.
Wenn das kein Problem ist und niemand über erweiterte Berechtigungen verfügt, können Sie die Datei einfach in /tmp
oder ablegen /var/tmp
, bei denen normalerweise das t-Bit gesetzt ist (um zu verhindern, dass anderenichtprivilegierte Benutzer vonLöschenes. Sie können die Datei mit chmod versehen, um sie für die Gruppe beschreibbar (und für andere in der gleichen Gruppe änderbar) zu machen.
Antwort2
Sind die „anderen Administratoren“ bösartig? Wollen sie Sie fertigmachen? Wenn ja, können Sie wahrscheinlich nichts tun.
Wenn nicht, ist die einfachste Lösung vielleicht, das Skript so zu ändern, dass die Datei in Ihrem Home-Verzeichnis abgelegt wird. Eine Variante davon besteht darin, Hardlinks zu der Datei in verschiedenen Verzeichnissen zu erstellen, solange diese nicht gelöscht werden (Link aufheben).alledie Links, die Datei bleibt intakt. (Sie sollten ein weiteres Skript schreiben, um alle Link-Standorte durchzugehen, einen noch vorhandenen zu finden und dann alle entfernten Links erneut zu verknüpfen.) Beachten Sie, dass einige Editoren Links zerstören (d. h. wenn Sie die Datei bearbeiten).
Dies könnte das Problem lösen, selbst wenn die „anderen Administratoren“ böswillige Absichten verfolgen und/oder es auf Sie abgesehen haben, da sie unerfahren und nicht gründlich sind.
Oder machen Sie die Datei unveränderlich und ändern Sie das Skript, um mithilfe eines anderen Tests zu bestimmen, ob die E-Mails gesendet werden sollen.
Antwort3
Um auf den Punkt zurückzukommen, der in einigen anderen Antworten angesprochen wurde: Sie könnten das mv
Dienstprogramm verwenden, um eine soziale Barriere vorzuschlagen:
mv yourfile THIS_IS_user38537_FILE_PLEASE_DO_NOT_REMOVE
Antwort4
[Ersatz für alte Antwort]
Sie können einfach einen Hardlink zur Datei erstellen:
ln email_file hard_link
Wenn es dann gelöscht wird, existiert es immer noch und kann problemlos wiederhergestellt werden.
[Alte Antwort, basierend auf einem Missverständnis des Problems]
Eine Lösung wäre, das Skript selbst mit unveränderlich zu machen chattr
, es aber nicht durch Umbenennen ein- und auszuschalten, sondern durch das Vorhandensein oder Fehlen einer leeren Datei, deren Verlust Sie sich leisten können. Nennen Sie sie beispielsweise .
snoozebutton
Wenn sie existiert, benachrichtigt das Skript nicht. Wenn sie nicht vorhanden ist, benachrichtigt das Skript. Auf diese Weise ist die Sicherheit gewährleistet, wenn jemand sie versehentlich löscht: Sie erhalten Ihre Benachrichtigungen und werden auch benachrichtigt, wenn etwas mit passiert ist snoozebutton
.
Dies setzt natürlich voraus, dass Sie das Skript nicht oft ändern müssen. Wenn Sie dies tun, benötigen Sie ein kleines Hilfsskript, das ausgeführt werden muss chattr
, dann den Editor ausführt und dann chattr
erneut ausgeführt wird, um es zu sperren.