Ich schreibe ein Skript, das ich ohne Berechtigungen ausführen möchte. Ich möchte, dass die Fehler, auf die das Skript stößt, in einer Protokolldatei protokolliert werden. Ich habe keine Rechte, an die ich schreiben kann /var/log
. Und ich möchte keinen in meinem Home-Verzeichnis haben.
Gibt es einen Ort, an dem Userspace-Skripte Laufzeitinformationen protokollieren können? Was ist die beste Vorgehensweise, um meine Skriptprotokollinformationen zu speichern, /var/log
ohne potenzielle Sicherheitsprobleme zu verursachen? Ich zögere, uid / gid für das Skript festzulegen.
quelle
syslog
handelt es sich um eine C-Bibliotheksroutine, und C ++ kann jedes C aufrufen, das verwendetextern "C"
. Andere Sprachen bieten häufig entweder generische Bindungen an C oder Bindungen an bestimmte Dinge, dies hängt jedoch von der Sprache ab.Wenn Sie als normaler Benutzer ein Programm ausführen möchten, befindet sich der natürliche Speicherort für die Protokolle in Ihrem Ausgangsverzeichnis. In Ihrem Ausgangsverzeichnis können Sie alle Ihre Dateien speichern, unabhängig davon, ob es sich um Protokolle eines von Ihnen ausgeführten Programms oder um andere Elemente handelt.
Wenn das Programm als Teil des Systems ausgeführt wird und als ein normalerweise dedizierter Systembenutzer ausgeführt wird, befindet sich der natürliche Ort für seine Protokolle in
/var/log
. Erstellen Sie ein Unterverzeichnis,/var/log/myapp
und geben Sie ihm die entsprechenden Berechtigungen, damit Ihre Anwendung dort schreiben kann.Wenn relevant und Ihr Betriebssystem dies zulässt, markieren Sie die Protokolldatei als "Nur anhängen". Das kann nur root. Dies hat den Vorteil, dass Ihre Anwendung bei einer Kompromittierung nicht in der Lage ist, frühere Protokolle zu löschen, was für die forensische Analyse der Kompromittierung sehr nützlich sein kann. Sie benötigen den Eingriff von root, um das Protokoll zu drehen:
chown
Damit die Protokolldatei nicht mehr von der Anwendung geöffnet werdenrename
kann, erstellen Sie eine neue Nur-Anhängen-Datei mit entsprechendem Besitz und benachrichtigen Sie die Anwendung, um die neue leere Datei zu öffnen .Sie können ein beliebiges Anwendungsprotokoll in die Systemprotokolle aufnehmen, indem Sie
logger(1)
oder aufrufensyslog(3)
.quelle
In der Regel wird für einen Dämon die Protokolldatei erstellt, bis
root
die Berechtigungen geändert werden, sodass der nicht privilegierte Benutzer darauf schreiben kann.logrotate
wird dann so eingerichtet, dass die Berechtigungen während der Drehung erhalten bleiben.Wenn es sich um einen Befehl und nicht um einen Daemon handelt, melden Sie sich bei
/tmp
(vorzugsweise mitmktemp
) an und informieren Sie den Benutzer überSTDOUT
den Speicherort des Protokolls.quelle
&
, um zu vermeiden, dass die Eingabeaufforderung angehalten wird, aber Dropbox-Schreibvorgänge in die Konsole zu starten. Ich leite gerade die Ausgabe an um/dev/null
, möchte aber eine Möglichkeit zum Debuggen haben, wenn Dropbox nicht gestartet werden kann.daemonize
.chmod
. Normalerweise wird0644
oder0664
und der Benutzer- / Gruppenbesitz auch in den des Dämons geändert, von dem erwartet wird, dass er darauf schreibt.Ich habe den Eindruck, dass User-Space-Programme standardmäßig Protokolle verwerfen sollen. Ich habe verschiedene Programme gesehen, die Protokolle ausgeben, wo immer sie sich anfühlen, und es ist auf meinen Systemen niemals besonders willkommen. neigen dazu, sich an einem Ort anzusammeln, der nie bemerkt wird, es sei denn / bis er riesig wird.
Ich würde es vorziehen, wenn es einen bestimmten Platz für sie gibt, ich spiele auf meinem System herum und versuche, einen stabilen Platz für sie zu finden.
Meine erste Idee war es, zu verwenden
/var/run/user/$UID/log
, aber ich stellte fest, dass es sich bei meinem System um ein TMPFS-Mount handelt, das nicht groß genug ist oder für die Verwendung mit Protokollen wirklich gut geeignet ist.Schaffe einen Platz für sie
Da ich / var / run / user nicht gut genug verstehe, um es zu integrieren, habe ich mich entschieden, es von Hand für Benutzer 1000 zu emulieren.
Ich würde empfehlen, die FHS / var / log spc für die Struktur in diesem Ordner beizubehalten , aber die Spezifikation in freier Form, sodass nicht viel einzuhalten ist.
Logrotate Config
In diesem von Ihrem System bereitgestellten Verzeichnis ist keine Protokollrotation vorhanden. Ich empfehle, eine für Ihr System zu erstellen:
Unten ist mein vorheriger / var / run / user / 1000 / Log Post. Ich kann ihn nur empfehlen, wenn du wirklich weißt, was du tust.
vielleicht wie folgt, aber ich habe es mir nur ausgedacht, weil es für mich Sinn machte.Integriere mit / var / log / user / 1000:
quelle