Achim Schrepfer: (APACHE) PHP in bestimmten Verzeichnissen deaktivieren

Hallo Forum,

derzeit experimentiere ich mal wieder ein bisschen mit der Apache-Konfiguration (Version 1.3.26, Linux). Ich habe einen virtuellen Host eingerichtet, über den man mit angehängter Tilde (~) und einem Usernamen die Seiten des entsprechenden Benutzers angezeigt bekommt. Also praktisch http://hostname/~username/ liefert die Seiten von [username]. Soweit nichts besonderes.

Nun ist auf dem Server PHP als Modul installiert. Und ich möchte natürlich was verbieten ;-). Und zwar soll nicht jeder User dieses virtuellen Hosts PHP-Skripte ausführen dürfen. Eine vernünftige Doku zu mod_php hab ich leider nicht gefunden. Und z.B. mit der <Files>-Direktive kann ich wieder nur Regeln für den kompletten virtuellen Host einrichten.

Hat jemand einen Tipp für mich, wie ich das bewerkstelligen kann? Ein Link auf eine Dokumentation zu mod_php würde mir auch helfen (je nachdem, was man zur Laufzeit an mod_php einstellen kann). Vielen Dank schonmal im Voraus!

viele Grüße
  Achim Schrepfer

--
»Wenn die meisten sich schon armseliger Kleider und Möbel schämen, wieviel mehr sollten wir uns da erst armseliger Ideen und Weltanschauungen schämen.« - Albert Einstein
  1. Hallo Achim!

    Nun ist auf dem Server PHP als Modul installiert. Und ich möchte natürlich was verbieten ;-). Und zwar soll nicht jeder User dieses virtuellen Hosts PHP-Skripte ausführen dürfen. Eine vernünftige Doku zu mod_php hab ich leider nicht gefunden. Und z.B. mit der <Files>-Direktive kann ich wieder nur Regeln für den kompletten virtuellen Host einrichten.

    Kannst Du nicht was mit

    <Directory /usr/local/httpd>
          Deny From *.php
     </Directory>

    http://httpd.apache.org/docs/mod/core.html#directory, oder vielleicht
    http://httpd.apache.org/docs/mod/core.html#directorymatch

    oder so ähnlich? Kenn mich da nicht aus, aber es gibt doch sowas in der Art!

    Bin aber leider selbst noch keiN Apache-Fachman. Aber wieso richtest Du nocht jedem User einen eigenen Virtuelen Host ein?
    Anmerkung zu Mehruser-Apache1-System und mod_php:
    Du kannst beim PHP als Apache1-Modul nicht den Zugriff der User auf die Dateien untereinander unterbinden, da die Scripte die Rechte des Apachen haben und so auf alle Benutzer-Verzeichnisse zugriffsberechtigt sind. Das läßt sich nur in der CGI-Version beschränken, oder mit Apache2(ich Weiß aber noch nicht wie;-))

    Grüße
    Andreas

    1. Hallo Andreas,

      <Directory /usr/local/httpd>
            Deny From *.php
      </Directory>

      die Deny-Direktive bezieht sich m.E. nur auf Hostnamen. Deshalb komme ich auf diese Weise sicherlich nicht weiter.

      http://httpd.apache.org/docs/mod/core.html#directory, oder vielleicht
      http://httpd.apache.org/docs/mod/core.html#directorymatch

      Die <Directory>-Direktiven brauche ich, um das Ziel meiner Restriktionen zu spezifizieren. Mir geht es ja darum, was ich _innerhalb_ des Directory-Blocks angeben muss, um mein Problem zu lösen.

      Bin aber leider selbst noch keiN Apache-Fachman. Aber wieso richtest Du nocht jedem User einen eigenen Virtuelen Host ein?

      Der Server ist nicht neu. Die Adressen http://hostname/~username/ sind obligat. Ich möchte nur auf einen anderen Rechner umziehen und Kontrolle haben, wer Skripte ausführen darf, und wer nicht.

      Du kannst beim PHP als Apache1-Modul nicht den Zugriff der User auf die Dateien untereinander unterbinden, da die Scripte die Rechte des Apachen haben und so auf alle Benutzer-Verzeichnisse zugriffsberechtigt sind. Das läßt sich nur in der CGI-Version beschränken, oder mit Apache2(ich Weiß aber noch nicht wie;-))

      Das ist mir klar. Mit Apache2 wird ein MPM mitgeliefert, welches es erlaubt einzelne Vhosts unter eigenen User-IDs laufen zu lassen (mod_perchild wars glaub ich). Ich hab mal ein wenig damit rumexperimentiert, aber mehr als eine Handvoll virtueller Hosts hab ich nicht zum Laufen bekommen, weil dann der Apache irgendwann nicht mehr startet.

      viele Grüße
        Achim Schrepfer

      --
      »Wenn die meisten sich schon armseliger Kleider und Möbel schämen, wieviel mehr sollten wir uns da erst armseliger Ideen und Weltanschauungen schämen.« - Albert Einstein
  2. Nun ist auf dem Server PHP als Modul installiert. Und ich möchte natürlich was verbieten ;-). Und zwar soll nicht jeder User dieses virtuellen Hosts PHP-Skripte ausführen dürfen. Eine vernünftige Doku zu mod_php hab ich leider nicht gefunden.

    Die Doku zu PHP findest Du unter http://php.net. Dort befindet sich auch ein Kapitel "Konfiguration", in welchem wiederum beschrieben ist, wie man in der Apache-Konfiguration mittels "php_flag" und "engine off" den PHP-Interpreter ausschaltet. Allerdings kennt der Apache keine unterschiedlichen Konfigurationen pro Benutzern, nur auf Dateisystemebene (virtualhost, directory, files, .htaccess).

    Gruß,
      soenk.e

    1. Hallo Soenke,

      Die Doku zu PHP findest Du unter http://php.net. Dort befindet sich auch ein Kapitel "Konfiguration", in welchem wiederum beschrieben ist, wie man in der Apache-Konfiguration mittels "php_flag" und "engine off" den PHP-Interpreter ausschaltet. Allerdings kennt der Apache keine unterschiedlichen Konfigurationen pro Benutzern, nur auf Dateisystemebene (virtualhost, directory, files, .htaccess).

      perfekt! Ich hab das völlig übersehen in der Doku. Mir genügt es im übrigen völlig, im directory-Kontekt zu arbeiten. Danke für den Tipp! Das war wieder so ein typisches "Brett vorm Kopf".

      viele Grüße
        Achim Schrepfer

      --
      »Wenn die meisten sich schon armseliger Kleider und Möbel schämen, wieviel mehr sollten wir uns da erst armseliger Ideen und Weltanschauungen schämen.« - Albert Einstein
  3. Hi Achim,

    Ich habe einen virtuellen Host eingerichtet, über den man mit angehängter Tilde (~) und einem Usernamen die Seiten des entsprechenden Benutzers angezeigt bekommt. Also praktisch http://hostname/~username/ liefert die Seiten von [username]. Soweit nichts besonderes.

    meinst Du das hier?
       http://httpd.apache.org/docs/mod/mod_userdir.html#userdir

    Nun ist auf dem Server PHP als Modul installiert. Und ich möchte natürlich was verbieten ;-). Und zwar soll nicht jeder User dieses virtuellen Hosts PHP-Skripte ausführen dürfen.

    Sondern ... was soll beim Zugriff auf Dateien dieser Art geschehen? Aufgabenstellung, bitte.

    Hat jemand einen Tipp für mich, wie ich das bewerkstelligen kann?

    Ich weiß nicht, wie Deine PHP-Installation genau funktioniert.

    Ich kristallkugele aber, daß Du ein Namensmuster an einen Handler bindest. Das wiederum kannst Du natürlich auch (in lokaleren Verzeichnissen) wieder overrulen - es gibt einen "default_handler":
       http://httpd.apache.org/docs/handler.html#definition

    Viele Grüße
          Michael

    --
    T'Pol: I apologize if I acted inappropriately.
    V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.