Punktprüfungen

Punktprüfungen

Ich möchte alle über einen Webserver hochgeladenen Dateien überwachen/verfolgen (hauptsächlich über PHP/Apache und NICHT über einen FTP-Server).

Ich habe gegoogelt und herausgefunden, dass die einzige Möglichkeit darin besteht, einen Hook für move_uploaded_file in PHP zu schreiben.

Wenn wir eine Hook-Funktion für move_uploaded_file in PHP schreiben können, können wir den Zieldateipfad an einem Ort speichern. Aber ich konnte keine Lösung finden, um dasselbe zu erreichen.

kann mir jemand eine Möglichkeit vorschlagen, wie das geht?

Bearbeiten: Der Webserver verfügt über Hunderte von Hosting-Konten und Tausende von Websites, daher ist eine Steuerung über eine Webanwendung nicht möglich, da wir keine Kontrolle über die Webanwendung haben.

Antwort1

Sie können den Befehl verwendeninotifywatch (im inotify-toolsPaket unter Debian)mit dem -r(rekursiven) Parameter

z.B:

inotifywatch -q -e moved_to,create -r /var/www/

Antwort2

Ich möchte alle Dateien überwachen/verfolgen, die über einen Webserver hochgeladen werden (hauptsächlich mit PHP/Apache

Es gibt keinen einfachen Weg. Mit dieser Funktion können Sie alle Dateien finden move_uploaded_file, allerdings werden dadurch nur POST-Datei-Uploads abgefangen. AJAX-Uploads wie HTML5/PLupload werden nicht erkannt.

Die Frage ist,WarumMöchten Sie „alle hochgeladenen Dateien“ verfolgen? Da Sie nicht einmal wissen, um welche Dateien es sich handelt und wo sie sich befinden, scheint es wenig Sinn zu machen, die Dateinamen, -größen und -eigentümer zu kennen – und das ist alles, was Sie herausfinden können.

Wenn Sie versuchen, Änderungen am System abzufangen, z. B. Webangriffe, sind Sie mit tripwireund/oder einem Protokollscan-Dienstprogramm oder möglicherweise Snort oder speziellen Sicherheitspaketen (z. B. für Wordpress) besser bedient. Oder Sie interessieren sich für famdoder entscheiden sich, proaktiv zu sein und (und konfigurieren und warten) AppArmor.

Wenn Sie Rechenschaftspflicht haben möchten, müssen Sie die Upload-Skripte auf jeden Fall ändern. Und Sie müssen dies Skript für Skript tun, wenn Sie mehrere verschiedene Upload-Frameworks verwenden.

Wenn Sie den Verkehr oder die Quoten verfolgen möchten, gibt esviel bessere Wege.

Aber im GrundeSie sollten sich keine Sorgen machenüber Dateien, die auf Ihre gehosteten Websites hochgeladen wurden,es sei denn, Sie haben vorgelagerte Probleme. Wenn ich mir Sorgen um Datei-Uploads mache, vermute ich, dass Ihr, wie gesagt, einXY-Problem.

Wenn Sie immer noch an der Idee der Überwachung von Dateien interessiert sinderstellt(Wie bereits erwähnt,hochgeladenist zu restriktiv), ist der vielleicht einfachste Weg, einen Prozess einzurichten strace,Aberes hängt nun davon ab, wie PHP aufgerufen wird - ist es ein Apache-Modul, CGI oder FPM? Für das Apache-Modul, vorausgesetzt, die Binärdatei wird aufgerufen httpd:

strace -f -p "$( pidof httpd )" -e open 2>&1 | grep -F -v ', O_RDONLY'

erhalten Sie etwas wie,

[pid 28882] open("/var/lib/php5/sess_8v107eun48rj0u42uf9ncplrbobj4cqackscb2thx1138k78uk01", O_RDWR|O_CREAT, 0600) = 12
[pid 29739] open("/var/lib/php5/sess_8v107eun48rj0u42uf9ncplrbobj4cqackscb2thx1138k78uk01", O_RDWR|O_CREAT, 0600) = 12
[pid 28882] open("/srv/www/wiki.matrix.boa/data/boawiki.sqlite", O_RDWR|O_CREAT|O_CLOEXEC, 0644) = 13
[pid 29739] open("/srv/www/wiki.matrix.boa/data/boawiki.sqlite", O_RDWR|O_CREAT|O_CLOEXEC, 0644) = 13

Antwort3

Punktprüfungen

Sowohl Snapshots als auch rsync --dry-run sind unglaublich schnell, da sie nur Inodes erstellen/überprüfen, keine tatsächlichen Daten. Snapshots erfordern ein Cow-FS wie ZFS oder BTRFS.

btrfs subvolume snapshot -r / /snapshots/$(date +%Y%m%d)
rsync -ad --dry-run /var/www /snapshots/20161103/var/www

Sofortige Ereignisse

strace

straceund grep kann verwendet werden, um jede PHP-Dateiänderung zu protokollieren;

strace -e open php_pid 2>&1 | grep open >> log.txt

inoffiziell

inoffiziellist nett, kann aber schwer sein, weil es für jeden Ordner eine Überwachung hinzufügt.

inotifywatch -v -e modify,moved_to,create -r /var/www/

PHP

Die Kombination aus php.ini,laufkit,außer Kraft setzenUndautomatisches Voranstellen von Dateienkann verwendet werden, um Dateiereignisse zu protokollieren, kann aber nicht verhindern, dass Benutzer das Protokoll absichtlich vermeiden. Sie sollten exec deaktivieren und hoffen, dass niemand die umbenannte Funktion findet;

php.ini:

disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
runkit.internal_override = On
auto_prepend_file = /var/www/html/prepend.php

prepend.php

rename_function('move_uploaded_file', 'real_move_uploaded_file');
override_function('move_uploaded_file', '$filename,$destination', 'log ( $filename, $destination ) ; return real_move_uploaded_file ( $filename, $destination );');
rename_function("__overridden__", 'dummy_move_uploaded_file');

C

Da PHP FLOSS ist, könnten Sie Ihr eigenes, angepasstes PHP kompilieren. Das ist jedoch nicht ratsam, bevor Sie nicht absolut sicher sind, dass alle anderen aufgeführten Optionen ungeeignet sind.

Antwort4

Logstash / Elch / Kibabna …

Ich bin ziemlich sicher, dass Sie aus den Protokolldateien einige reguläre Ausdrücke hervorzaubern könnten ...

Sie könnten nach PHP-Uploads und WebDAV-Uploads suchen und diese Informationen dann mit Karten, Zeiten usw. kombinieren.

Eleganz in der Einfachheit … (in der geposteten Frage wurde die Notwendigkeit einer Live-Verarbeitung nicht erwähnt, daher nehme ich an, dass Sie bei jedem Hochladen einer Datei keine Skripts ausführen müssen? Sie möchten nur überwachen und ein Protokoll führen?)

wenn ich falsch vermute, dann +1 für inotify

verwandte Informationen