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.
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>