Apache: CGI-Scripte in jedem Verzeichnis

CGI-Scripte sind in einer Standard Apache Installation nur im Ordner cgi-bin erlaubt. Mit einer kleinen Konfigurations-Anpassung kann man diese aber in jedem Verzeichnis erlauben.

In der Datei /etc/httpd/conf/httpd.conf kann man folgende Zeile auskommentieren:

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

Dadurch kann der cgi-bin Ordner auf Wunsch auch direkt im DocumentRoot-Ordner erstellt werden.

Danach muss für das HTML-Verzeichnis noch die Option ExecCGI aktiviert und der Handler für die Dateiendung .cgi aktiviert werden, hier fett markiert:

<Directory "/var/www/html">
 Options Indexes FollowSymLinks ExecCGI
 AddHandler cgi-script .cgi
 AllowOverride All
 Require all granted
</Directory>

Die AddHandler Zeile kann auch nochmals für weiter Dateiendungen wie .pl eingefügt werden, das cgi-script bleibt dabei stets identisch. Es existieren dabei mehrere <Directory> Tags, die Zeilen müssen in jenem des DocumentRoots eingefügt werden. Die anderen Zeilen können je nach Apache-Konfiguration ggf. abweichen.

Nach dem anpassen der Datei muss der Apache-Dienst mit /bin/systemctl restart httpd.service neu gestartet werden. Danach sollten CGI-Scripte in jedem Verzeichnis erlaubt sein.

Sicherheitshinweis

Wenn Besuchern der Upload von Dateien in irgendein Verzeichnis erlaubt ist, sollten die Dateien beim Upload geprüft und in diesem Verzeichnis über eine .htaccess-Datei der Zugriff auf CGI-Scripte untersagt werden (gilt auch für PHP und weitere Programmiersprachen). Ansonsten stellt dies ein erhebliches Sicherheitsrisiko dar. Eine .htaccess-Datei kann beispielsweise so aussehen:

Order Allow,Deny
Allow from all

<If "%{REQUEST_URI} =~ m#/.*\.(php|pl|cgi)$#i">
 Order Deny,Allow
 Deny from all
</If>