Ich habe mich jetzt mal ein wenig mit den Cronjobs in Froxlor besch?ftigt, weil es mich u.a. "st?rt", dass ich bei der Standardeinstellung von 5 Minuten f?r den Master Cronjob st?ndig Mails vom Cron Daemon erhalte, wenn bspw. der Backup Cronjob l?uft (da dieser bei mir weit l?nger als 5 Minuten zur Ausf?hrung braucht).
Und obwohl ich "erst an der Oberfl?che gekratzt" habe, sind mir schon einige Dinge aufgefallen, die imho zumindest "suboptimal" gel?st sind ...!
Meiner Meinung nach sollte man den Backup Job, genauso wie ?brigens mit dem Traffic Job schon verfahren wird, per 'pcntl_fork()' verzweigen und somit von dem Master losl?sen.
Auch sehe ich Raum f?r "Optimierungen", was den Backup Job anbelangt. So wird bspw. aktuell f?r jede DB per mysqldump erst ein unkomprimierter Dump erzeugt, dieser anschlie?end komprimiert und zum Schluss die unkomprimierte Datei gel?scht.
Eine Einschr?nkung gibt es jedoch dabei: Der Parameter '-r' oder auch '--result-file' kann nicht mehr verwendet werden!
Das ist aber imho kein Problem, zumindest solange nicht, wie wir uns rein auf Linux Systemen bewegen.
Damit obige ?nderung "funktioniert", muss man auch noch die Datei '/var/www/froxlor/lib/functions/filedir/function.safe_exec.php' anpassen.
Original:
$allowed_commands = array(
'touch',
'chown',
'mkdir',
'webalizer',
'cp',
'du',
'chmod',
'chattr',
'chflags', /* freebsd equivalent to linux' chattr */
$settings['system']['apachereload_command'],
$settings['system']['bindreload_command'],
$settings['dkim']['dkimrestart_command'],
'openssl',
'unzip',
'php',
'rm',
'awstats_buildstaticpages.pl',
'ln'
);
//
// check for ; in execute command
//
if((stristr($exec_string, ';'))
or (stristr($exec_string, '|'))
or (stristr($exec_string, '&'))
or (stristr($exec_string, '>'))
or (stristr($exec_string, '<'))
or (stristr($exec_string, '`'))
or (stristr($exec_string, '$'))
or (stristr($exec_string, '~'))
or (stristr($exec_string, '?')))
{
die('SECURITY CHECK FAILED!' . "\n" . 'The execute string "' . htmlspecialchars($exec_string) . '" is a possible security risk!' . "\n" . 'Please check your whole server for security problems by hand!' . "\n");
}
Neu:
$allowed_commands = array(
'| gzip -6 >'
);
//
// check for ; in execute command
//
if((stripos($exec_string, ';'))
or (stripos($exec_string, '|'))
or (stripos($exec_string, '&'))
or (stripos($exec_string, '>'))
or (stripos($exec_string, '<'))
or (stripos($exec_string, '`'))
or (stripos($exec_string, '$'))
or (stripos($exec_string, '~'))
or (stripos($exec_string, '?')))
{
$ok = false;
foreach($allowed_commands as $allowed_command) {
if(stripos($exec_string, $allowed_command)) {
$ok = true;
break;
}
}
if(! $ok) die('SECURITY CHECK FAILED!' . "\n" . 'The execute string "' . htmlspecialchars($exec_string) . '" is a possible security risk!' . "\n" . 'Please check your whole server for security problems by hand!' . "\n");
}
Die urspr?ngliche Verwendung von 'stristr' ist an dieser Stelle auch nicht erforderlich, steht doch im PHP Manual extra:
Wenn Sie nur herausfinden m?chten, ob ein bestimmter needle innerhalb von haystack vorkommt, verwenden Sie stattdessen die schnellere und weniger speicherintensive Funktion strpos().
Anmerkung: Wer die Kompressionsrate von gzip anpassen/ ?ndern will, der muss dieses dann auch entsprechend in der Datei '/var/www/froxlor/lib/functions/filedir/function.safe_exec.php' anpassen.
Der Wert von '-6' ist nach meiner bisherigen Erfahrung der ideale Kompromiss zwischen Gr??e und ben?tigter Zeit. Damit sind meine Dumps auch noch nie gr??er geworden, als mit der originalen Variante - teilweise sogar kleiner.
Hinweis: Die Verwendung von 'tar' macht an dieser Stelle auch keinen Sinn, da es sich nur jeweils um eine einzelne Datei handelt.
Den Rest habe ich mir noch nicht weiter angeguckt ...!
Ich bin halt der Meinung, dass man insbesondere bei den Cronjobs schon auf m?glichst "effizienten" Code achten sollte, und somit jedes "Optimierungspotential" aussch?pfen sollte.
Question
Netsurfer
Hallo!
Ich habe mich jetzt mal ein wenig mit den Cronjobs in Froxlor besch?ftigt, weil es mich u.a. "st?rt", dass ich bei der Standardeinstellung von 5 Minuten f?r den Master Cronjob st?ndig Mails vom Cron Daemon erhalte, wenn bspw. der Backup Cronjob l?uft (da dieser bei mir weit l?nger als 5 Minuten zur Ausf?hrung braucht).
Und obwohl ich "erst an der Oberfl?che gekratzt" habe, sind mir schon einige Dinge aufgefallen, die imho zumindest "suboptimal" gel?st sind ...!
Meiner Meinung nach sollte man den Backup Job, genauso wie ?brigens mit dem Traffic Job schon verfahren wird, per 'pcntl_fork()' verzweigen und somit von dem Master losl?sen.
Auch sehe ich Raum f?r "Optimierungen", was den Backup Job anbelangt. So wird bspw. aktuell f?r jede DB per mysqldump erst ein unkomprimierter Dump erzeugt, dieser anschlie?end komprimiert und zum Schluss die unkomprimierte Datei gel?scht.
Siehe /var/www/froxlor/scripts/jobs/cron_backup.php:
Das ist imho "suboptimal". Denn aus diesen 3 Schritten kann man auch nur einen machen und den jeweiligen Dump direkt gzip'ed ausgeben:
Eine Einschr?nkung gibt es jedoch dabei: Der Parameter '-r' oder auch '--result-file' kann nicht mehr verwendet werden!
Das ist aber imho kein Problem, zumindest solange nicht, wie wir uns rein auf Linux Systemen bewegen.
Damit obige ?nderung "funktioniert", muss man auch noch die Datei '/var/www/froxlor/lib/functions/filedir/function.safe_exec.php' anpassen.
Original:
Neu:
Die urspr?ngliche Verwendung von 'stristr' ist an dieser Stelle auch nicht erforderlich, steht doch im PHP Manual extra:
Anmerkung: Wer die Kompressionsrate von gzip anpassen/ ?ndern will, der muss dieses dann auch entsprechend in der Datei '/var/www/froxlor/lib/functions/filedir/function.safe_exec.php' anpassen.
Der Wert von '-6' ist nach meiner bisherigen Erfahrung der ideale Kompromiss zwischen Gr??e und ben?tigter Zeit. Damit sind meine Dumps auch noch nie gr??er geworden, als mit der originalen Variante - teilweise sogar kleiner.
Hinweis: Die Verwendung von 'tar' macht an dieser Stelle auch keinen Sinn, da es sich nur jeweils um eine einzelne Datei handelt.
Den Rest habe ich mir noch nicht weiter angeguckt ...!
Ich bin halt der Meinung, dass man insbesondere bei den Cronjobs schon auf m?glichst "effizienten" Code achten sollte, und somit jedes "Optimierungspotential" aussch?pfen sollte.
To be continued ...!
Gru?
Gunther
Link to comment
Share on other sites
3 answers to this question
Recommended Posts
Archived
This topic is now archived and is closed to further replies.