[Tipp] Apache open_basedir und Syscp

  • Wie sicher die meisten Syscp Benutzer von euch wissen, hängt Syscp immer ein abschließendes Slash an die für open_basedir angegebenen Verzeichnisse an. Da dieses Verhalten nicht immer gewünscht ist habe ich mir jetzt einmal die Codestellen in Syscp gesucht und abgeändert.


    [infobox]Bitte unbedingt ein Backup der betroffenen Dateien und der Syscp Datenbank machen![/infobox]


    Zu beachten ist auch, dass bei einem Update von Syscp alle Änderungen vllt. neu durchgeführt werden müssen, je nachdem welche Dateien bei einem Update betroffen sind. Ich übernehme keine Garantie für die Korrektheit der Änderungen, der Einbau erfolgt auf eigene Gefahr. Alle Änderungen wurden auf einem Standard-Netcup-Debian System getestet mit Syscp Version 1.4.2. So wie ich das sehe sollten die Änderungen aber auch bei älteren Syscp Versionen funktionieren, bei neuen eher nicht.


    In der /var/www/syscp/lib/functions.php gibt es folgende Funktion:


    Diese Funktion ist für die ungewollten Pfadangaben verantwortlich. Da diese Funktion in Syscp an mehreren Stellen verwendet wird, wo Slash's am Ende doch erfoderlich sind, statten wir die Funktion mit einem neuen Parameter aus, den wir bei Bedarf dann überall einsetzen können:


    Nun öffnen wir noch die /var/www/syscp/admin_settings.php und suchen folgenden Code:

    PHP
    $value = validate($_POST['system_phpappendopenbasedir'], 'phpappendopenbasedir');
    				$value = explode(':', $value);
    				foreach($value as $number => $path)
    				{
    					$value[$number] = makeCorrectDir($path);
    				}


    Den ersetzen wir mit folgendem Code:

    PHP
    $value = validate($_POST['system_phpappendopenbasedir'], 'phpappendopenbasedir');
    				$value = explode(':', $value);
    				foreach($value as $number => $path)
    				{
    					$value[$number] = makeCorrectDir($path, false);
    				}


    Das selbe kann man natürlich auch für andere Einstellungen machen, bei denen man die Pfade wirklich selbst angeben möchte, wirklich sinnvoll ist es aber nur beim open_basedir. Davon unberührt bleibt übrigens das Webverzeichnis des Benutzers (z.B: /var/kunden/webs/kunde1/), diese Pfade werden trotzdem noch mit Slash angegeben. Falls man das auch ändern möchte, muss man noch folgende zwei Änderungen durchführen:


    Suche in /var/www/syscp/scripts/cron_tasks.inc.http.10.apache.php:

    PHP
    if($domain['openbasedir_path'] == '1')
    				{
    					$php_options_text.= '  php_admin_value open_basedir "' . $domain['customerroot'] . $_phpappendopenbasedir . "\"\n";
    				}
    				else
    				{
    					$php_options_text.= '  php_admin_value open_basedir "' . $domain['documentroot'] . $_phpappendopenbasedir . "\"\n";
    				}


    Ersetze es mit:

    PHP
    if($domain['openbasedir_path'] == '1')
    				{
    					$php_options_text.= '  php_admin_value open_basedir "' . makeCorrectDir($domain['customerroot'], false) . $_phpappendopenbasedir . "\"\n";
    				}
    				else
    				{
    					$php_options_text.= '  php_admin_value open_basedir "' . makeCorrectDir($domain['documentroot'], false) . $_phpappendopenbasedir . "\"\n";
    				}


    Suche in /var/www/syscp/scripts/cron_tasks.inc.http.15.apache_fcgid.php:

    PHP
    if($domain['openbasedir_path'] == '0')
    				{
    					$openbasedir = $domain['documentroot'] . ':' . $tmpdir . ':' . $this->settings['system']['mod_fcgid_peardir'] . ':' . $this->settings['system']['phpappendopenbasedir'];
    				}
    				else
    				{
    					$openbasedir = $domain['customerroot'] . ':' . $tmpdir . ':' . $this->settings['system']['mod_fcgid_peardir'] . ':' . $this->settings['system']['phpappendopenbasedir'];
    				}


    Ersetze es mit:

    PHP
    if($domain['openbasedir_path'] == '0')
    				{
    					$openbasedir = makeCorrectDir($domain['documentroot'], false) . ':' . makeCorrectDir($tmpdir, false) . ':' . makeCorrectDir($this->settings['system']['mod_fcgid_peardir'], false) . ':' . $this->settings['system']['phpappendopenbasedir'];
    				}
    				else
    				{
    					$openbasedir = makeCorrectDir($domain['customerroot'], false) . ':' . makeCorrectDir($tmpdir, false) . ':' . makeCorrectDir($this->settings['system']['mod_fcgid_peardir'], false) . ':' . $this->settings['system']['phpappendopenbasedir'];
    				}


    Falls jemand damit Probleme hat, bitte einfach auf dieses Thema antworten ;)
    Über Feedback und/oder Verbesserungsvorschläge würde ich mich freuen :)



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Zitat von [netcup] Alex;2584

    Es wäre gut zu erwähnen für welche Version von SysCP diese Anleitung gilt.


    Getestet habe ich es mit Syscp Version 1.4.2, so wie ich das sehe sollten die Änderungen aber auch bei älteren Syscp Versionen funktionieren, bei neuen eher nicht. Ich habe den Hinweis einmal reineditiert ;)



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Zitat von Littlerat;2592

    Geht doch mit den vServ Einstellungen ganz leicht, oder ändert er das da auch? Bei mir gehts jedenfalls...


    Bei den vServer Einstellungen (du meinst doch das: Syscp -> Einstellungen -> Webserver -> Apache2 - oder?) wird bei jedem Pfad aber ein abschließendes Slash angehängt. Und genau dieses Verhalten ist von einigen Usern nicht erwünscht ;)



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Zitat von Littlerat;2602

    Ich meine die unter Domains...


    Vielleicht übersehe ich jetzt etwas, aber bei den Domaineinstellungen gibt es nur eine Option OpenBasedir Ja/Nein, kein Eingabefeld für die OpenBasedir Pfade. :confused:



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Zitat von killerbees19;2603

    Vielleicht übersehe ich jetzt etwas, aber bei den Domaineinstellungen gibt es nur eine Option OpenBasedir Ja/Nein, kein Eingabefeld für die OpenBasedir Pfade. :confused:



    MfG Christian


    Ich meine wenn man sich als Admin einloggt, und dann Domains bearbeitet, hat man folgendes Feld. (Siehe Anhang)

  • Beim aktuellen SysCP Update (1.4.2.1 -> 1.4.2.2) muss man die Änderung erneut durchführen, da alle modifizierten Dateien mit einer neuen Version ersetzt wurde ;)



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)