Apache2: UserDir and permission. How do I fix this?

May 10th, 2008 by joachim

While configuring a local Apache2 server using Ubuntu 7.04 I came across this error message:

[Wed Mar 21 16:18:35 2007] [crit] [client 192.168.178.24] (13): /home/myusername/.htaccess pcfg_openfile: unable to check ht
access file, ensure it is readable

This message remained even after I created the file /home/myusername/.htaccess and made it world-readable.

I figured out that Apache has been unable to read the dir /home/myusername/ so I added the user www-data to the group “myusername”:

  1. adduser www-data myusername

This fixes the problem because /home/myusername has the owen myusername and the group myusername. www-data is the user apache is running under.

Posted in Apache Webserver | No Comments »

Wie kann ich mod_suphp zusammen mit Apache 2.2 verwenden?

May 5th, 2008 by matthias

  1. PHP-Scripts sollen mit mod_php funktionieren (statt als CGIs ausgefürt zu werden). Dazu braucht man
    (unter Ubuntu 7.4): die symbolischen Links /etc/apache2/mods-enabled/php5.conf und
    /etc/apache2/mods-enabled/php5.load und den Standard-Inhalt von /etc/apache2/mods-available/php5.conf:

    1. <IfModule mod_php5.c>
    2.     AddType application/x-httpd-php .php .phtml .php3
    3.     AddType application/x-httpd-php-source .phps
    4.   </IfModule>

    Diese Zeilen sind nicht einmal erforderlich weil: in /etc/mime.types sind die Mime-Typen gelistet die in Apache 2.2 bekannt sind, darunter (zumindest auf einem Ubuntu 7.4 System) auch: »application/x-httpd-php phtml pht php«.

  2. Es ist nicht klar wie mod_suphp Scripts ausführen kann die nicht unter DocumentRoot liegen sondern mit mod_alias angebunden wurden. Hinweise:
    • Alias
    • ScriptAlias
    • ScriptAliasMatch
    • Options ExecCGI
    • ScriptAliasMatch ^/jipakiza/administrator/?$ /home/path/index.php
    • ScriptAliasMatch ^/jipakiza/?$ /home/path/index.php
    • ScriptAliasMatch ^/jipakiza(.*) /home/path/homepagename.de$1
  3. Einfacher ist es, einen eigenen VirtualHost einzurichten: in /etc/apache2/ports.conf eine zusätzliche Listen-Direktive für einen zusätzlichen Port eintragen (z.B. 81); /etc/apache2/sites-available/default an einen Ort im selben Verzeichnis kopieren, entsprechend abändern; symbolischen Link auf die neue VirtualHost-Konfigurationsdatei von /etc/apache2/sites-enabled aus anlegen.
  4. mod_suphp als Handler für PHP-Dateien einrichten. Dazu schreibt man in /etc/apache2/mods-available/suphp.conf
    »suPHP_AddHandler application/x-httpd-php«. Diesen Handler nehme man außerdem in /etc/suphp/suphp.conf auf sonst entsteht der Fehler »[error] [client 127.0.0.1] SecurityException in Application.cpp:437: Handler not found in configuration«.
  5. Problem:
    1. [error] [client 127.0.0.1] SoftException in Application.cpp:199: Script "[...]" resolving to
    2.   "[...]" not within configured docroot

    Der Fehler tritt auch auf wenn man »DocumentRoot /« einstellt und dann eine PHP-Datei aufruft. Er tritt nur mit PHP-Dateien auf, ist also ein Fehler in mod_suphp. Der Fehler liegt daran dass nicht Apaches DocumentRoot sondern das von suphp gemeint ist, zu konfigurieren in /etc/suphp/suphp.conf . Siehe: www.mail-archive.com/suphp@lists.marsching.biz/msg00105.html . Am einfachsten könnte man den Fehler wohl verhindern indem man dort einstellt: »check_vhost_docroot=false«. Das funktionierte im vorliegenden Fall jedoch nicht, also wurde »docroot=/home/matthias« gesetzt (ein Pfad in dem sich alle PHP-Dateien befinden werden).

  6. Um Probleme mit Zugriffsrechten bei der Webentwicklung zu vermeiden setze man relaxte Sicherheitsoptionen in /etc/suphp/suphp.conf :
    1. ; Security options
    2. allow_file_group_writeable=true
    3. allow_file_others_writeable=true
    4. allow_directory_group_writeable=true
    5. allow_directory_others_writeable=true

Posted in Apache Webserver | No Comments »

Woran kann es liegen wenn ein VirtualHost unter Apache nicht funktioniert?

May 5th, 2008 by matthias

Die Listen-Direktive muss für jeden Port wiederholt werden:

  1. Listen 80
  2. Listen 81

statt

  1. Listen 80 81

Letzterer Fall ist gleichbedeutend mit:

  1. Listen 80

Posted in Apache Webserver | No Comments »

Wie kann ich erreichen, dass mein lokaler Apache-Webserver mit meinen eigenen Benutzerrechten ausgeführt wird, so dass ich keine Probleme mit Lese- und Schreibberechtigungen bei Webapplikationen mehr bekomme?

May 5th, 2008 by matthias

  1. Unter Debian/GNU Linux 3.1 installieren: Paket suphp-common und zusätzlich libapache-mod-suphp (für Apache 1.3x) oder libapache2-mod-suphp (für Apache2).
  2. Dadurch wird an die Datei /etc/apache/modules.conf die folgende Zeile angehängt:
    1. LoadModule suphp_module /usr/lib/apache/1.3/mod_suphp.so
  3. In /etc/apache/httpd.conf füge man _nach_ der Zeile
    1. LoadModule suphp_module /usr/lib/apache/1.3/mod_suphp.so

    oder etwas wie

    1. Include /etc/apache/modules.conf

    ein:

    1. # suPHP: configuration of setting the user’s rights for php scripts
    2. # prevents struggling with access rights for PHP development
    3.  
    4. <IfModule mod_suphp.c>
    5.  # Whether PHP is on or off, default is off
    6.  suPHP_Engine on
    7.  # Where the php.ini resists, default is to use PHP’s default configuration
    8.   suPHP_ConfigPath /etc/php4/apache
    9.   AddHandler x-httpd-php .php
    10. </IfModule>

    Wahrscheinlich kann dies auch mit dem neuen Debian-Konfigurationsmechanismus für Apache-Module
    (/etc/apache/conf.d/) integriert werden, das wurde jedoch nicht versucht.

  4. Dass mod_suphp.c nun bei einem Neustart von Apache geladen würde, garantiert noch nicht, dass es
    (statt mod_php4) die PHP-Dateien behandelt. Dazu müssen die Zeilen, mit denen PHP-Dateien zur Behandlung an mod_php4 zugewiesen werden, in httpd.conf auskommentiert werden:

    1. # AddType application/x-httpd-php .php
    2. # AddType application/x-httpd-php-source .phps

    Dieselben Zeilen stehen in /etc/apache/conf.d/php4.conf und müssen evtl. auch dort auskommentiert werden. Die Zeile in /etc/apache/modules.conf

    1. LoadModule php4_module /usr/lib/apache/1.3/libphp4.so

    kann jedoch stehen bleiben. Damit wird mod_php4 geladen, aber noch nicht zum Handler für PHP-Dateien gemacht. Indem man so auf manuelle Änderungen an /etc/apache/modules.conf verzichtet, spart man sich die Probleme von apt-get mit geänderten Konfigurationsdateien bei Neu- und Reinstallationen.

  5. Man starte Apache neu und verifiziere in http://localhost/server-info, dass mod_suphp.c tatsächlich mit den gewünschten Konfigurationseinstellungen geladen wurde. PHP-Scripte sollten nun mit den Berechtigungen ihres Eigentümers auf andere Dateien zugreifen können. Für weitere Informationen (und die beste Quelle beim Schreiben dieser Anleitung …) vergleiche:
    1. User matthias # mit dem eigenen Benutzernamen ersetzen
    2. Group users # mit dem eigenen Gruppennamen ersetzen

Diese Lösung kommt ganz ohne suphp aus.

Posted in Apache Webserver | No Comments »

Wie wird in der Apache-Konfiguration festgelegt, was mit welchen angeforderten Dateien passieren soll? Zum Beispiel mit Dateien mit der Endung .php?

May 4th, 2008 by matthias

Korrekte Konfiguration für mod_suphp:

  1. <IfModule mod_suphp.c>
  2.   AddHandler x-httpd-php .php
  3. </IfModule>

Alternativ: korrekte Konfiguration für mod_php4:

  1. AddType application/x-httpd-php .php
  2. AddType application/x-httpd-php-source .phps

AddType bedeutet: Dateien mit der angegebenen Endung haben den angegebenen Mime-Type. AddHandler bedeutet: Dateien mit der angegebenen Endung sollen vom benannten Apache-Handler behandelt werden. Dass Apache-Handler genauso heißen wie Mime-Types ist dabei Zufall. Siehe auch httpd.apache.org/docs/handler.html . Handler werden vom Server selbst, von Modulen oder mit der Action-Direktive zur Verfügung gestellt. http://localhost/server-info zeigt nun, dass mod_suphp den Content Handler x-httpd-php zur Verfügung stellt, mod_php4 aber die Content Handler application/x-httpd-php , application/x-httpd-php-source und text/html. Es ist problemlos möglich, dass beide Module gleichzeitig geladen sind (es braucht nur entsprechende LoadModule-Zeilen in /etc/apache/modules.conf).

Mit AddHandler x-httpd-php .php wird also konfiguriert, dass mod_suphp alle .php-Dateien behandelt. Gibt es mehrere AddHandler-Direktiven für Dateien mit derselben Endung, so überschreibt die letztere alle vorigen. Es scheint, dass AddType nicht nur Dateien einem Typ zuweist, sondern gleichzeitig diesen Typ einem gleichnamigen Handler. Anders ist nicht zu erklären, wie die oben gezeigte Konfiguration für mod_php4 funktioniert. Diese implizite Handler-Zuweisung aufgrund des Dateityps ist tatsächlich der Fall. In der Apache-Dokumentation wird das so ausgedrückt: »Generally, files have implicit handlers, based on the file type. Normally, all files are simply served by the server, but certain file types are “handled” separately.« ( httpd.apache.org/docs/handler.html ).

Indem man die explizite Handler-Zuweisung mit AddHander nach der impliziten mit AddType plaziert, sollte es möglich sein, alle zu den obigen Konfigurationen gehörenden Direktiven gleichzeitig zu verwenden, derart dass trotzdem PHP-Dateien von mod_suphp behandelt werden. Die AddHandler-Direktive überschreibt dann die Zuweisung eines Handlers durch die AddType-Direktive.

Posted in Apache Webserver | No Comments »

Wie kann ich symbolische Links zusammen mit Apache 2 verwenden?

May 4th, 2008 by matthias

Das Problem: ein symbolischer Link aus /var/www/ nach /home/user1/foo/ funktionierte nicht. Links aus aus /var/www/ nach /var/www/foo/ funktionierten. Die Option »FollowSymLinks« war für /var/www/ korrekt gesetzt. Symptom des Fehlers: »[error] [client 127.0.0.1] Symbolic link not allowed or link target not accessible: /var/www/home-jipakiza« in /var/log/apache2/error.log.

Lösung: symbolische Links werden nicht verfolgt wenn sie aus dem DocumentRoot-Verzeichnis des Webservers hinausführen. Das geschieht aus Sicherheitsgründen. Siehe: www.quotesdb.info/undernet/linuxhelp/15Aug2006/1.html
Um über den Webserver dennoch auf das Verzeichnis zugreifen zu können das eigentlich Ziel des symbolischen Links sein sollte kann man entweder einen neuen Virtual Host aufsetzen oder aber eine »Alias«-Direktive in der Konfiguration des aktuellen Virtual Hosts verwenden, ggf. zusammen mit einer »Directory«-Direktive:

  1. Alias /foo/ "/home/user1/bar/"
  2. <Directory "/home/user1/bar/">
  3.   Options Indexes MultiViews FollowSymLinks
  4.   AllowOverride None
  5.   Order deny,allow
  6.   Deny from all
  7.   Allow from 127.0.0.0/255.0.0.0 ::1/128
  8. </Directory>

Tritt dann ein Fehler »(13)Permission denied:« auf so liegt das möglicherweise an Zugriffsberechtigungen: alle Verzeichnisse auf dem Weg müssen für den Benutzer unter dem der Apache-Serverprozess läuft ausführbar sein (das heißt: wenn man den Namen einer Datei in diesem Verzeichnis kennt darf man sie lesen, aber Verzeichnisauflistungen selbst sind damit nicht möglich sondern über die Leseberechtigung). Für eine weitere Möglichkeit für diesen Fehler siehe: defindit.com/readme_files/apache_13_error.html .

Diese Lösung hat jedoch noch das Problem dass Scripts von mod_suphp nicht ausgeführt werden wenn sie in Verzeichnissen außerhalb DocumentRoot gespeichert sind. (Mit mod_php5 werden diese allerdings genausogut ausgeführt). Dieser Fehler tritt im Browser als »500 Internal Server Error« auf und im Error Log als »SoftException in Application.cpp:199: Script [...] not within configured docroot«.

Posted in Apache Webserver | No Comments »

Dokumentation zu Apache 2?

May 4th, 2008 by matthias

Im web unter httpd.apache.org/docs/2.2/
Lokal: Paket apache2-doc, dann in file:///usr/share/doc/apache2-doc/manual/index.html.de .
http://localhost/doc/apache2-doc/manual/index.html

Posted in Apache Webserver | No Comments »

Woran liegt es wenn eine Datei außerhalb des Apache Document Root nicht ausgeführt werden kann obwohl der symbolische Link dorthin zulässig ist?

April 30th, 2008 by matthias

Es kann am Einsatz von mod_suphp liegen. In Version 0.6.1 sehen die Symptome so aus:
in /var/log/apache/error.log:

  1. SoftException in Application.cpp:193: Script "/var/www/cgw/index.php" resolving to "/home/matthias/Act.InformatikDiplom/Modul.DiplArb/CGW:RP//cgw_rp.php" not within configured docroot
  2. *** glibc detected *** double free or corruption (fasttop): 0×08070ba0 ***
  3. [Fri Jul 14 23:41:38 2006] [error] [client 127.0.0.1] Premature end of script headers: /var/www/cgw/index.php

in /var/log/suphp/suphp.log:

  1. [Fri Jul 14 23:41:38 2006] [warn] Script "/var/www/cgw/index.php" resolving to "/home/matthias/Act.InformatikDiplom/Modul.DiplArb/CGW:RP//cgw_rp.php" not within configured docroot

Posted in Apache Webserver | No Comments »

Woran liegt die Fehlermeldung »Inappropriate permissions set on script« beim Einsatz von mod_suphp für Apache 1.3?

April 10th, 2008 by matthias

Symptom: in /var/log/apache/error.log finden sich Zeilen wie:

  1. Error in suphp.c on line 256: Inappropriate permissions set on script
  2.   [Fri Jan 28 09:25:51 2005] [error] [client 127.0.0.1] Premature end of script headers: /var/www/phpinfo.php

Dies tritt auf, wenn für dieses Script Schreibrechte für »group« oder »others« gesetzt sind. Schreibrechte dürfen nur für den Eigentümer gesetzt sein. Für wen und ob überhaupt Ausführungsrechte gesetzt sind ist dagegen völlig egal.

Posted in Apache Webserver | No Comments »

Woran liegt die Fehlermeldung »User is not allowed to run scripts« beim Einsatz von mod_suphp für Apache 1.3?

April 10th, 2008 by matthias

Symptom: in /var/log/apache/error.log finden sich Zeilen wie:

  1. Error in suphp.c on line 364: User is not allowed to run scripts
  2. [Fri Jan 28 09:25:30 2005] [error] [client 127.0.0.1] Premature end of script headers: /var/www/phpinfo.php

Dies tritt auf, wenn der Dateieigentümer des Scripts der Benutzer »root« ist. mod_suphp führt ein Script mit den Rechten seines Eigentümers aus, und wohl aus Sicherheitsgründen erlaubt mod_suphp nicht, dass ein Script mit root-Rechten ausgeführt wird.

Posted in Apache Webserver | No Comments »