WannabeTux
Cadet 4th Year
- Registriert
- Sep. 2014
- Beiträge
- 114
Hallo zusammen,
mein Ziel ist, dass ich via E-Mail benachrichtigt werde, falls mein Server defaced wird und da fremde Finger ins Spiel kommen.
Man müsste die Pfade auswählen können und am besten eigentlich die Hashes vergleichen, leider ist bei folgendem Script das so eingebaut, dass er nur die Dateigröße abgleicht und Bescheid gibt, sobald sich da was tut.
Bekomme das Script aber gar nicht erst zum laufen, da der SQLite3 nicht erkennt und PuTTY beim Ausführen dann eine Fehlermeldung raus gibt..
Das komplette Script:
Weiß ja nichtmal ob das Script an sich funktionieren würde..
Hat da vielleicht jemand mehr Erfahrung in PHP und kann mir helfen?
Die Fehlermeldung von PuTTY ist folgende:
In dem Fall wird sich SQLite3 wohl nicht auf dem Server befinden.
Gibt's auch Möglichkeiten, dass er in einer lokalen Datei die tables speichert und gar keinen Zugriff erst auf die Datenbank benötigt? Möchte ja nur mit nem cron job das Script arbeiten lassen und die Ordner damit prüfen, nichts in der SQL.
mein Ziel ist, dass ich via E-Mail benachrichtigt werde, falls mein Server defaced wird und da fremde Finger ins Spiel kommen.
Man müsste die Pfade auswählen können und am besten eigentlich die Hashes vergleichen, leider ist bei folgendem Script das so eingebaut, dass er nur die Dateigröße abgleicht und Bescheid gibt, sobald sich da was tut.
Bekomme das Script aber gar nicht erst zum laufen, da der SQLite3 nicht erkennt und PuTTY beim Ausführen dann eine Fehlermeldung raus gibt..
Das komplette Script:
PHP:
<?php
define('EMAIL', 'mail@mail.de');
define('DBPATH', '/path/to/db');
define('DBNAME', 'dbname_db.idx');
define('CHECK_PATH', '/home/user/private', '/home/user/myfiles', '/opt/projects');
// true - check subfolders too
define('CHECK_RECURSIVE', true);
define('DBFILE', DBPATH . '/' .DBNAME);
define('CHG_UNCHANGED', 'UNCHANGED');
define('CHG_ADDED', 'ADDED');
define('CHG_CHANGED', 'CHANGED');
function createDb() {
$db = new SQLite3(DBFILE);
$db->queryExec("CREATE TABLE tbl_files (f_name TEXT, f_size INTEGER, PRIMARY KEY (f_name))");
}
function sendEmail($changesBody, $time) {
if (empty($changesBody)) return;
// set email headers
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/plain; charset=\"us-ascii\"\r\n";
$headers .= "From: " . EMAIL . "\r\n";
$headers .= "Reply-To: " . EMAIL . "\r\n";
$headers .= 'X-Mailer: webcheck';
$message = $changesBody . "
Job took from start to finish: " . $time;
if (EMAIL != '') {
// send email
@mail(EMAIL, // TO email
'Server Check Alert', // subject
$message, // email text
$headers); // headers
}
}
function isChanged($filename) {
if (strpos($filename, DBNAME) != FALSE) return '';
$isChanged = CHG_UNCHANGED;
$db = new SQLite3(DBFILE);
$q = $db->query("SELECT f_size FROM tbl_files WHERE f_name = '$filename' ");
$filesize_old = $q->fetchSingle();
$filesize_new = filesize($filename);
// not in db?
if ($filesize_old === FALSE) {
$isChanged = CHG_ADDED;
}
else if (filesize($filename) != $filesize_old) {
$isChanged = CHG_CHANGED;
}
// update database
if ($isChanged != CHG_UNCHANGED) {
if ($isChanged == CHG_ADDED) {
$db->queryExec("INSERT INTO tbl_files VALUES ('$filename', " . filesize($filename) . " )");
}
else if ($isChanged == CHG_CHANGED) {
$db->queryExec("UPDATE tbl_files SET f_size = " . filesize($filename) . " WHERE f_name = '$filename'");
}
}
if ($isChanged != CHG_UNCHANGED) {
if (!empty($_GET['web'])) echo "$filename -- $isChanged (was:" . $filesize_old . '/is:' . $filesize_new . ")<br>";
return "$filename -- $isChanged (was:" . $filesize_old . '/is:' . $filesize_new . ")\n";
}
else
return "";
}
$changesBody = "";
function loopDir($dirname) {
global $changesBody;
$dir = opendir($dirname);
while ($file = readdir($dir)) {
if ($file != '.' && $file != '..') {
if (is_dir($dirname.'/'.$file)) {
if (CHECK_RECURSIVE) {
loopDir($dirname.'/'.$file);
}
} else {
$changesBody = $changesBody . isChanged($dirname.'/'.$file);
}
}
}
}
if (!file_exists(DBFILE)) {
createDb();
sendEmail("Database file not found! Creating.", 0);
}
$stime = microtime(true);
loopDir(CHECK_PATH);
sendEmail($changesBody, microtime(true) - $stime);
echo "\nDONE";
?>
Weiß ja nichtmal ob das Script an sich funktionieren würde..
Hat da vielleicht jemand mehr Erfahrung in PHP und kann mir helfen?
Die Fehlermeldung von PuTTY ist folgende:
Code:
PHP Fatal error: Class 'SQLite3' not found in /opt/projects/webcheck/webcheck.php on line 17
In dem Fall wird sich SQLite3 wohl nicht auf dem Server befinden.
Gibt's auch Möglichkeiten, dass er in einer lokalen Datei die tables speichert und gar keinen Zugriff erst auf die Datenbank benötigt? Möchte ja nur mit nem cron job das Script arbeiten lassen und die Ordner damit prüfen, nichts in der SQL.