Cantello schrieb:
Wie könnte ich denn loggen, wer/was zugegriffen hat, gibt es da unter BSD Möglichkeiten?
Aktuell geöffnete Dateien kann man mit
lsof (ist aber möglicherweise nicht installiert) oder
fstat rauskriegen.
Damit kriegt man aber halt nur die Dateien die gerade offen sind. Viele Dateioperationen sind ja mehr so ein: Öffnen, Lesen_od_schreiben, Schließen.
Dafür könnte man
dtrace zu Hilfe nehmen und zum Beispiel nachgucken, wer den Systemaufruf
open benutzt. Ist ein bisschen tricky weils auch noch den Aufruf
openat gibt und da auch die Parameter für den Dateinamen an unterschiedlichen Stellen stehen.
Deshalb ist es ein etwas längerer Aufruf:
dtrace -n 'syscall::open:entry { printf("%s %s", execname, copyinstr(arg0)); }' -n 'syscall::openat:entry { printf("%s %s", execname, copyinstr(arg1)); }'
Da hakt man sich in den Syscall
open bzw
openat ein und
execname ist halt der Name des Programms von dem der Aufruf kommt und
arg0 bzw.
arg1 ist halt der Parameter gemäß des open-Aufrufes (also der Dateiname der geöffneten Datei).
Es wird dann immer eine Zeile ausgegeben, wenn ein Aufruf stattfindet. Dann muss man halt gucken, ob der betreffende Pfad dabei ist. Man kann die Ausgabe auch in eine Datei schreiben lassen:
dtrace -o /path/to/dtrace.log -n 'syscall::open:entry { printf("%s %s", execname, copyinstr(arg0)); }' -n 'syscall::openat:entry { printf("%s %s", execname, copyinstr(arg1)); }'