Was ist die Standardmethode, um CGI-Skripte nicht anzuzeigen?

Was ist die Standardmethode, um CGI-Skripte nicht anzuzeigen?

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_htmlim Stammverzeichnis des Servers unter gesetzt /var/www/html, sodass localhostich 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-binwann 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-binVerzeichnis über einen separaten Pfad erreichbar ist, besteht eine Möglichkeit darin, den DirectoryAbschnitt 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 Indexesoder Optionslassen Sie es die Optionen des übergeordneten Elements übernehmen, indem Sie ExecCGIes 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 ExecCGIover verwenden Options +ExecCGI, da Sie auf diese Weise keine unerwünschten Optionen erben.

verwandte Informationen