
Ich habe mit dem Mod in Apache ein CGI-Verzeichnis eingerichtet userdir
. Ich verwende möglichst allgemeine Konfigurationen, damit sie auch für andere Benutzer auf meinem Laptop anwendbar sind. Ich bin an einem Punkt angelangt, an dem ich das Skript mit dieser URL ausführen kann:
http://localhost/~tomas/cgi-bin/hw.cgi
Ich habe aber auch einen Link zu meinem public_html
im Stammverzeichnis des Servers unter gesetzt /var/www/html
, sodass localhost
ich beim Aufrufen der URL den Index mit einem Link zu meinem Verzeichnis unter bekomme localhost/tomas
. Der Link funktioniert einwandfrei und zeigt einen weiteren Index an, einen meiner Benutzer. Jetzt befindet sich das private CGI-Bin unter /home/*/public_html/cgi-bin
, sodass ich sehen kann, cgi-bin
wann ich den privaten Index bekomme. Wenn ich jetzt dieses Verzeichnis betrete, bekomme ich einen weiteren Index mit den CGIs. Das ist für mich in Ordnung, obwohl ich nicht sicher bin, ob dies als sicher gilt. Aber wenn ich von dort aus ein CGI aufrufe, wird es nicht ausgeführt und stattdessen angezeigt. Das ist das Problem.
Soweit ich weiß, geht es darum, dass Apache nicht sieht
http://localhost/tomas/cgi-bin/hw.cgi
als
http://localhost/~tomas/cgi-bin/hw.cgi
Ich habe nach einer Richtlinie gesucht, mit der es funktioniert, kann sie aber nicht finden. Ich bin mir nicht einmal ganz sicher, was mir zur Verfügung steht – eine Richtlinie oder was sonst?
Hier ist meins usermod.conf
:
<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled root
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Require all granted
</Limit>
<LimitExcept GET POST OPTIONS>
Require all denied
</LimitExcept>
</Directory>
<Directory /home/*/public_html/cgi-bin>
Options ExecCGI
AddHandler cgi-script .cgi
</Directory>
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Antwort1
Da das cgi-bin
Verzeichnis über einen separaten Pfad erreichbar ist, besteht eine Möglichkeit darin, den Directory
Abschnitt mit dem alternativen Pfad direkt unter den anderen zu kopieren, z. B.:
<Directory /var/www/html/*/cgi-bin>
Options ExecCGI
AddHandler cgi-script .cgi
</Directory>
Dadurch sollten auch die Verzeichniseinträge deaktiviert werden.
Wenn Sie Indizes lieber aktiviert haben möchten, fügen Sie entweder hinzu Indexes
oder Options
lassen Sie es die Optionen des übergeordneten Elements übernehmen, indem Sie ExecCGI
es in ändern +ExecCGI
, z. B.
<Directory /var/www/html/*/cgi-bin>
Options Indexes ExecCGI
AddHandler cgi-script .cgi
</Directory>
Ich würde lieber Options Indexes ExecCGI
over verwenden Options +ExecCGI
, da Sie auf diese Weise keine unerwünschten Optionen erben.