My Universe Logo

mod_rewrite für den OpenBSD-Indianer

Posted by Jesco Freund at Oct. 11, 2007 8:13 p.m.

Ein Apache ohne mod_rewrite kann mühselig werden, wenn man Applikationen wie Serendipity oder TYPO3 damit betreiben möchte. Die vorkonfektionierte Apache-Version, die im OpenBSD-Basissystem enthalten ist, bringt dieses nützliche Stück Software leider nicht mal in Form eines nachladbaren Moduls mit. Allerdings ist es kein Hexenwerk, das benötigte nachzurüsten.

Benötigt wird der Teil des Source Trees, der die Apache-Quellen enthält. Am einfachsten checkt man diesen aus dem OpenBSD CVS aus (ich gehe im Beispiel von OpenBSD 4.1-STABLE aus):

cd /usr
export CVSROOT=anoncvs@anoncvs.ca.openbsd.org:/cvs
cvs -d$CVSROOT checkout -rOPENBSD_4_1 -P src/usr.sbin/httpd

Natürlich kann auch der gesamte Source Tree nach /usr/src ausgecheckt werden. Wenn ohnehin STABLE gebaut werden soll, bietet sich diese Vorgehensweise an. Da dies aber in den OpenBSD FAQ ausführlich erläutert ist, werde ich hier nicht weiter darauf eingehen.

Im nächsten Schritt muss der Apache passend konfiguriert werden. Neben mod_rewrite habe ich noch einige andere nützliche Module sowie suexec mit aktiviert. Wie sich letzteres mit einem im chroot steckenden Indianer unter OpenBSD einsetzen lässt, wird in dieser Anleitung (englisch) umfassend erläutert. Als kleiner Fallstrick ist zu beachten, dass nach dem Checkout aus dem CVS-Repository das configure-Skript nicht ausführbar ist. Die Berechtigung muss noch entsprechend angepasst werden:

cd /usr/src/usr.sbin/httpd
chmod 0755 configure
./configure --with-layout="OpenBSD" --suexec-docroot="/cgi-bin" --suexec-logfile="/logs/suexec_log" --enable-suexec \
--enable-module=ssl --enable-module=so --enable-module=auth_anon --enable-shared=auth_anon \
--enable-module=expires --enable-shared=expires --enable-module=headers --enable-shared=headers \
--enable-module=auth_db --enable-shared=auth_db --enable-module=auth_dbm --enable-shared=auth_dbm \
--enable-module=auth_digest --enable-shared=auth_digest --enable-module=cern_meta --enable-shared=cern_meta \
--enable-module=define --enable-shared=define --enable-module=digest --enable-shared=digest \
--enable-module=info --enable-shared=info --enable-module=log_agent --enable-shared=log_agent \
--enable-module=log_referer --enable-shared=log_referer --enable-module=mime_magic --enable-shared=mime_magic \
--enable-module=mmap_static --enable-shared=mmap_static --enable-module=proxy --enable-shared=proxy \
--enable-module=rewrite --enable-shared=rewrite --enable-module=speling --enable-shared=speling \
--enable-module=unique_id --enable-shared=unique_id --enable-module=usertrack --enable-shared=usertrack \
--enable-module=vhost_alias --enable-shared=vhost_alias

Hat die Konfiguration fehlerfrei funktioniert, muss jetzt nur noch kompiliert und installiert werden:

make
make install

Hinweis: Der Apache funktioniert so bereits, und die gebauten Module wie mod_rewrite können jetzt einfach in der Apache-Konfigurationsdatei (/var/www/conf/httpd.conf) aktiviert werden. Allerdings lässt sich suexec so noch nicht verwenden. Dazu sind weitere Schritte notwendig, die aber in der o. a. Anleitung gut dokumentiert sind. Sollen darüber hinaus dateibasierte Sessions verwendet werden (z. B. mit PHP), wird in der chroot-Umgebung unbedingt noch ein /tmp-Verzeichnis benötigt:

cd /var/www
mkdir tmp
chmod 1777 tmp

3 comments | Defined tags for this entry: Apache, OpenBSD, s9y, Typo3

Comments

hey! Find' die site und vorallem die Hilfestellungen echt gut! ich hab auch OBSD und den gechrooteten Apache. Wollte
RewriteRules machen mit mod_rewrite. Ist in der httpd.conf allerdings auf außerhalb der Chroot-Umgebung verlinkt. Du hast da jetzt extra Apache neu installiert. Hättest Du Dir nich mit den Dynamic Shared Objects einfach das Modul, dass Du brauchst in Deiner Chroot-Umgebung ablegen können, um dann in der httpd.conf darauf zu referenzieren? Ich habe das zum Beispiel so gemacht und beispielsweise die Module aus /usr/lib/apache/modules/ durch das Verschieben zugänglich gemacht. Bin kein Experte - Du hast ja immerhin noch suEXEC und Konsorten mit draufgehauen, da hat sich das wenigstens gelohnt. Nur für einige Module muss man den (wenn auch nicht schweren Schritt) von Dir wahrscheinlich nich gehen. So als Neuling hatte ich viel zu lesen, da kann ich natürlich nicht ausschließen, dass ich damit keinen schweren Fehler gemacht habe oder dergleichen. Falls ich Blödsinn erzähle, dann korrigier' mich einfach. Deine Site war auf jedenfall sehr hilfreich!

Alex on May 2, 2008 21:42 CEST

Hi Alex, bei OpenBSD 4.2 findet sich jetzt auch eine *mod_rewrite.so* in */usr/lib/apache/modules*. Bei OpenBSD 4.1 war das AFAIR noch nicht der Fall. Module, die dort als DSOs abgelegt sind, lassen sich natürlich problemlos über die httpd.conf einbinden, da sie geladen werden, _bevor_ der Apache den chroot-Call tätigt. Um suexec sinnvoll nutzen zu können, kommt man um's neu bauen allerdings nach wie vor nicht drumherum.

Jesco on May 4, 2008 10:12 CEST

Mh ja, das klingt logisch. Bis auf eine Sache - das Einbinden der Module als shared objects ist meines Erachtens nur möglich, wenn sich die entsprechende .so im chroot-jail befindet. Denn das Laden über die httpd.conf, wenn sich die .so nicht im chroot-jail befindet, hat zumindest bei mir nicht geklappt. Das müsste ja heißen, dass gechrootet wird, bevor die Module geladen werden. Wie immer, wenn ich Unsinn blubber, dann bitte korrigieren ;).

Alex on May 4, 2008 15:36 CEST