open_basedir und suphp

Dieses Thema im Forum "Allgemein" wurde erstellt von xwsnet, 14. Nov. 2007.

  1. xwsnet

    xwsnet New Member

    Hallo,
    ich habe vor einiger Zeit suPHP auf meinem ISPConfig Server installiert. Jetzt ist einem aus meinem Team aufgefallen, dass man mit einem php Script die Config Files und andere Dateien aus anderen Webordnern auslesen kann.
    Das wird ja sonst mit dem Safe Mode verhindert.

    Ist es möglich "automatisiert" für alle User open_basedir einzustellen auf den entsprechenden WebXX Ordner?

    Oder muss ich dafür für jeden User eine eigene php.ini erstellen?

    mfg
     
  2. Till

    Till Administrator

    Das geht leider nur über eine individuelle PHP-Ini, da man bei der Verwendung von SuPHP keine Werte für open_basedir per php_admin value setzen kann.
     
  3. planet_fox

    planet_fox Super-Moderator

    Ja aber man könnte doch ISPConfig so konfigurieren das er nen Ordner anlegt
    mit sagen wir mal PHP darin einmal PHP5.ini und PHP4.ini erstellt. Dann kann man für die alle Standard einstellen.Für speziele sachen wie regiosters global etc muss man selbst hand anlegen
     
  4. Till

    Till Administrator

    Ja, das ist sicherlich eine gute Sache. Ich habe auf einem meiner Server auch ein SuPHP Setup mit angepasster php.ini und hab mich schon über das manualle anlegen geärgert. Ich werde das mal in den Bugtracker als Feature request mit aufnehmen.
     
  5. planet_fox

    planet_fox Super-Moderator

    Schön das wir den selben gedanken gang haben, das Feature kann man dann auch übern nen optionsbutton ein und auschalten, aber das wern dann eh eine sache für ISP3. Wenn ISP3 raus ist wird dann an der 2er Genaration nichts ausser Sicherheitslücken behoben oder ?
     
  6. xwsnet

    xwsnet New Member

    Ich hatte mir das schon so überlegt, einen Ordner zu erstellen in sagen wir /root/ispconfig/phpini/, der dann die php.ini´s beherbergt. Jede individuelle php.ini heißt dann webID_php.ini.
    Dann hat man die alle zusammen, da ich auch nicht möchte, dass meine Kunden auf die php.ini direkt zugreifen können.

    Jetzt muss ich das nur wahrscheinlich manuell für die 300-400 Kunden anlegen. Schade... Ich hatte gehofft es gäbe schon jemanden, der dafür eine automatisierung erstellt hat.

    mfg

    p.s. wir es denn ein Update von ISPC2 auf ISPC3 geben? Oder sind die untereinander incompatibel?
     
  7. Till

    Till Administrator

    Ein direktes Update wird es nicht geben, da beide unterschiedliche Systemvoraussetzungen haben. Es soll aber eine Importfunktion geben, die ISPConfig 2 Installationen in ein ISPConfig 3 System importiert.
     
  8. sqrt

    sqrt New Member

    Hallo!

    Ich häng' mich einfach mal an diesen Thread hier dran.

    Seit ein paar Tagen teste ich ISPconfig auf einem Debian Etch-System und bin soweit schon sehr zufrieden damit. Ein Lob an dieser Stelle an die Entwickler!

    Nach diesem HowTo habe ich suPHP mit ISPConfig zum Laufen gebracht und bin dabei auch über die 'open_basedir'-Problematik gestolpert. Mein Lösungsansatz dafür sieht so aus:

    Ich habe ein Script als Wrapper erstellt:

    /usr/local/bin/php5-wrapper:
    Und in der Datei /etc/suphp.conf dann folgenden Eintrag geändert:
    Ein Aufruf von phpinfo() in verschiedenen Webs zeigt, das die Einstellung von 'open_basedir ' übernommen wurde. Auch ein paar Testscripts, um auf Dateien außerhalb zuzugreifen bleiben an der Einstellung hängen. Soweit scheint auf dem Testsystem alles zu klappen. Von den Experten hier irgendwelche Einwände oder Anmerkungen? Ich erspare mir so die php.ini für jeden User. Das Wrapper-Script kann man natürlich noch etwas weiter anpassen, wenn man noch mehr machen möchte.

    Aber wie gesagt, ich kenne ISPConfig erst seit ein paar Tagen und experimentiere noch damit rum...


    Gruß,
    Andreas
     
  9. xwsnet

    xwsnet New Member

    Geile Idee...
    Ich warte jetzt nochmal ne runde, bis einer der Entwickler was dazu gesagt hat und werde dann das mal ausprobieren. Denn für alle Webs die php.ini zu erstellen ist doch sehr mühsam...
     
  10. sqrt

    sqrt New Member

    Wie gesagt... auf meinem Testsystem läuft es soweit ohne Probleme. Obiges Beispiel-Wrapper-Script ist extra mal ganz simpel gehalten. Bei Übergabe der kompletten DOCUMENT_ROOT-Variablen wird dann open_basedir auf z.B. den Wert '/var/www/webX/web' gesetzt. Das ist wahrscheinlich vielen zu restriktiv. Folgendes Wrapper-Script erlaubt auch Zugriffe nach '/var/www/webX':

    /usr/local/bin/php5-wrapper:
    Ist vielleicht etwas angenehmer, da man so z.B. Konfigurationsdateien etc. außerhalb des DocumentRoot ablegen kann, auf die man aber mit PHP noch zugreifen kann. Ist aber Geschmackssache bzw. eine Frage der eingesetzten Software.

    Würde mich freuen, wenn mein Lösungsvorschlag irgendwie bei der Problematik hilft. Dann muss ich nicht weiter suchen... :D

    Schön ist natürlich, dass man dem php5-cgi-Binary über den Parameter '-d' noch viele andere Konfigurationsoptionen übergeben kann.

    --
    Gruß,
    Andreas
     
  11. Till

    Till Administrator

    Interessanter Ansatz! Ich denke, es sollte gut funktionieren.
     
  12. sqrt

    sqrt New Member

    Ich sehe auch noch kein wirkliches Problem bei der Vorgehensweise. Auf meinem Testsystem gibt es keinerlei Auffälligkeiten. Anfang nächsten Jahres werd' ich dann aber wohl auch den Produktiv-Test machen können auf einem System mit etwa 400-500 VirtualHosts. Aber ich habe keine Bedenken, das sich der Ansatz von der Performance her merklich zum normalen PHP-CGI-Verfahren unterscheiden wird.

    Man sollte aber wohl drauf achten, dass das neue Wrapper-Script vernünftige Rechte besitzt um sich darüber kein Sicherheitsproblem zu schaffen. Auch weiß ich nicht, in wie weit man allen Umgebungsvariablen trauen kann, die der Apache beim Start des Scripts setzt. Ich denke, DOCUMENT_ROOT z.B. ist eher unkritisch, da es direkt aus der VirtualHost-Konfiguration genommen wird. Aber Inhalte aus Variablen zu verarbeiten, die der Client selber beeinflussen kann sollte man vielleicht wenn möglich vermeiden. Oder bin ich wieder zu paranoid? ;)
     
  13. Till

    Till Administrator

    Da sollte man lieber zu vorsichtig sein, sonst darf man später seinen Server entwanzen ;)
     
  14. HarWee

    HarWee New Member

    Ich habe den Wrapper getestet, und es Funktioniert ganz gut. Außer das dadurch Datei- Uploads nicht mehr funktionieren.
    Hab folgendes im php5-wrapper geändert:

    #!/bin/sh
    BASEDIR=`/usr/bin/dirname ${DOCUMENT_ROOT}`
    /usr/bin/php5-cgi -d open_basedir=$BASEDIR -d upload_tmp_dir=$BASEDIR/phptmp
     
    Zuletzt bearbeitet: 10. Dez. 2007
  15. sqrt

    sqrt New Member

    Ja, das wäre jetzt auch mein Vorschlag gewesen. Wie weiter oben im Thread schon erwähnt kann man über den Wrapper-Ansatz beliebige Variablen aus der php.ini setzen. So z.B. auch den Session-Save-Path. Das hat dann auch den Vorteil, das die temporären Session-Dateien nicht alle in einem großen Ordner rumfliegen sondern nach Usern getrennt...

    Netterweise wird ja von ispConfig schon ein phptmp-Verzeichnis angelegt. Dann sollte man das auch nutzen.

    Wer lieber das alte Verhalten beibehalten möchte und für alles /tmp nutzen will, der kann auch den Pfad /tmp zusätzlich an die Variable open_basedir anhängen:

    Das kann man sehr flexibel handhaben... :cool:
     
  16. xwsnet

    xwsnet New Member

    Ich habe zu dem Script nochmal eine Frage. Und zwar wenn ich BASEDIR=`/usr/bin/dirname ${DOCUMENT_ROOT}` schreibe, muss ich dann statt /usr/bin/dirname das Verzeichniss angeben, in dem die Webs gespeichert sind? Oder soll das so bleiben?

    Denn ich würde das gerne einsetzen, wenn das Script auch bei anderen läuft...

    Danke schon mal für die Hilfe :)
     
  17. Till

    Till Administrator

    Das soll so bleiben. Es ist ein Befehl, der das Verzeichnis bestimmt. Wenn Du es für jedes Web ändern müsstest, würde das Wrapper Script nicht so viel Sinn machen bzw. eine so elegante Lösung sein.
     
  18. sqrt

    sqrt New Member

    sollte etwas mehr Klarheit darüber, was der Befehl macht, schaffen. ;-)

    Kurz: Dieser Befehl interpretiert den übergebenen Parameter (im obigen Beispiel den Inhalt der Variablen DOCUMENT_ROOT) als Pfadangabe und schneidet den hinteren Teil weg, so daß nur noch das Verzeichnis übrigbleibt, in dem sich die Datei, auf die sich der übergebene Pfad bezieht, befindet. :cool:
     
  19. xwsnet

    xwsnet New Member

    Klasse!
    So lernt man doch immer wieder dazu...

    Nochmals Danke
     
  20. xwsnet

    xwsnet New Member

    So, ich hab das jetzt einmal ausprobiert, und wenn ich für das Wrapper-Script das folgende einsetze:


    dann kommt folgender Fehler:

    Was mache ich falsch???
     

Diese Seite empfehlen