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”:
-
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 »
May 5th, 2008 by matthias
- 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:
-
<IfModule mod_php5.c>
-
AddType application/x-httpd-php .php .phtml .php3
-
AddType application/x-httpd-php-source .phps
-
</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«.
- 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
- 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.
- 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«.
- Problem:
-
[error] [client 127.0.0.1] SoftException in Application.cpp:199: Script "[...]" resolving to
-
"[...]" 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).
- Um Probleme mit Zugriffsrechten bei der Webentwicklung zu vermeiden setze man relaxte Sicherheitsoptionen in /etc/suphp/suphp.conf :
-
; Security options
-
allow_file_group_writeable=true
-
allow_file_others_writeable=true
-
allow_directory_group_writeable=true
-
allow_directory_others_writeable=true
Posted in Apache Webserver | No Comments »
May 5th, 2008 by matthias
Die Listen-Direktive muss für jeden Port wiederholt werden:
statt
Letzterer Fall ist gleichbedeutend mit:
Posted in Apache Webserver | No Comments »
May 5th, 2008 by matthias
- 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).
- Dadurch wird an die Datei /etc/apache/modules.conf die folgende Zeile angehängt:
-
LoadModule suphp_module /usr/lib/apache/1.3/mod_suphp.so
- In /etc/apache/httpd.conf füge man _nach_ der Zeile
-
LoadModule suphp_module /usr/lib/apache/1.3/mod_suphp.so
oder etwas wie
-
Include /etc/apache/modules.conf
ein:
-
# suPHP: configuration of setting the user’s rights for php scripts
-
# prevents struggling with access rights for PHP development
-
-
<IfModule mod_suphp.c>
-
# Whether PHP is on or off, default is off
-
suPHP_Engine on
-
# Where the php.ini resists, default is to use PHP’s default configuration
-
suPHP_ConfigPath /etc/php4/apache
-
AddHandler x-httpd-php .php
-
</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.
- 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:
-
# AddType application/x-httpd-php .php
-
# 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
-
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.
- 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:
-
User matthias # mit dem eigenen Benutzernamen ersetzen
-
Group users # mit dem eigenen Gruppennamen ersetzen
Diese Lösung kommt ganz ohne suphp aus.
Posted in Apache Webserver | No Comments »
May 4th, 2008 by matthias
Korrekte Konfiguration für mod_suphp:
-
<IfModule mod_suphp.c>
-
AddHandler x-httpd-php .php
-
</IfModule>
Alternativ: korrekte Konfiguration für mod_php4:
-
AddType application/x-httpd-php .php
-
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 »
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:
-
Alias /foo/ "/home/user1/bar/"
-
<Directory "/home/user1/bar/">
-
Options Indexes MultiViews FollowSymLinks
-
AllowOverride None
-
Order deny,allow
-
Deny from all
-
Allow from 127.0.0.0/255.0.0.0 ::1/128
-
</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 »
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 »
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:
-
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
-
*** glibc detected *** double free or corruption (fasttop): 0×08070ba0 ***
-
[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:
-
[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 »
April 10th, 2008 by matthias
Symptom: in /var/log/apache/error.log finden sich Zeilen wie:
-
Error in suphp.c on line 256: Inappropriate permissions set on script
-
[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 »
April 10th, 2008 by matthias
Symptom: in /var/log/apache/error.log finden sich Zeilen wie:
-
Error in suphp.c on line 364: User is not allowed to run scripts
-
[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 »