Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Apache CGI-Skript zum Laufen bringen

11 views
Skip to first unread message

Marco Moock

unread,
Dec 1, 2022, 8:23:57 AM12/1/22
to
Hallo zusammen,

ich habe in Apache2 ein CGI-Skript (Bash) erstellt.
Dieses liegt in /var/www/html/cgi-bin/test.cgi und kann vom Apache
gelesen und ausgeführt werden und gehört dem auch (www-data).

Er findet die Datei aber nicht (den Ordner schon), obwohl sie da ist
(Schreibweisen gleich).

Folgendes steht in der Konfig in <VirtualHost>

<Directory "/var/www/html/cgi-bin">
AllowOverride None
AddHandler cgi-script .cgi
Options +ExecCGI
Require all granted
</Directory>

Was ist hier das Problem?

--
Gruß
Marco Moock

Tim Ritberg

unread,
Dec 1, 2022, 8:43:25 AM12/1/22
to
Am 01.12.22 um 14:23 schrieb Marco Moock:
Steht noch was in config-enabled?

Tim

Marco Moock

unread,
Dec 1, 2022, 10:30:09 AM12/1/22
to
Am 01.12.2022 um 14:43:22 Uhr schrieb Tim Ritberg:

> Steht noch was in config-enabled?

Schaue ich nächste Woche nach, wenn ich wieder im Geschäft bin.
Ich meine, dass es da was gibt, aber im Kopf habe ich das (noch) nicht.
:-)

Tim Ritberg

unread,
Dec 1, 2022, 12:00:55 PM12/1/22
to
Am 01.12.22 um 16:30 schrieb Marco Moock:
Normalweise gibt es eine Standard-CGI-Config.
Du hattest doch debian-like?

Tim

Marco Moock

unread,
Dec 1, 2022, 2:18:32 PM12/1/22
to
Am 01.12.2022 um 18:00:53 Uhr schrieb Tim Ritberg:

> Du hattest doch debian-like?

Ist ein Ubuntu 22.04.

Tim Ritberg

unread,
Dec 1, 2022, 2:31:32 PM12/1/22
to
Am 01.12.22 um 20:18 schrieb Marco Moock:
> Am 01.12.2022 um 18:00:53 Uhr schrieb Tim Ritberg:
>
>> Du hattest doch debian-like?
>
> Ist ein Ubuntu 22.04.
>

Und weiter?
CGI?

Tim

Marco Moock

unread,
Dec 1, 2022, 2:44:15 PM12/1/22
to
Am 01.12.2022 um 20:31:31 Uhr schrieb Tim Ritberg:

> Und weiter?
> CGI?

Eigentlich die binary vom Listserv (da baue ich gerade ein Testsystem),
aber für den CGI-Test ein einfaches Bash-Skript mit der Dateiendung
.cgi und passendem Shebang.

Thomas Hochstein

unread,
Dec 2, 2022, 2:45:03 PM12/2/22
to
Marco Moock schrieb:

> Er findet die Datei aber nicht (den Ordner schon), obwohl sie da ist
> (Schreibweisen gleich).
>
> Folgendes steht in der Konfig in <VirtualHost>
>
> <Directory "/var/www/html/cgi-bin">
[...]
> </Directory>

Das setzt Optionen für das Verzeichnis.

Es beantwortet aber noch nicht die Frage für das Mapping zwischen URLs
(die der Browser an den Server übermittelt) und Dateien im Dateisystem.

> Was ist hier das Problem?

Jenes?

Marco Moock

unread,
Dec 5, 2022, 8:13:00 AM12/5/22
to
Ich habe jetzt ein Debian neu aufgesetzt und nun eine neue Konfig ohne
Überbleibsel.
Aktiviert habe ich am Apache bisher nur das Modul cgi.
Mehr nicht.
Welche Schritte sind nun notwendig, um CGI-Skripte zu nutzen?
In welcher Datei konfiguriert man am besten die CGI-Optionen?

Am Ende muss eine direkte Binärdatei ohne Dateiendung genutzt werden
können.

Peter J. Holzer

unread,
Dec 5, 2022, 1:46:31 PM12/5/22
to
On 2022-12-05 13:12, Marco Moock <mo...@posteo.de> wrote:
> Ich habe jetzt ein Debian neu aufgesetzt und nun eine neue Konfig ohne
> Überbleibsel.
> Aktiviert habe ich am Apache bisher nur das Modul cgi.
> Mehr nicht.
> Welche Schritte sind nun notwendig, um CGI-Skripte zu nutzen?
> In welcher Datei konfiguriert man am besten die CGI-Optionen?

Wenn Du das Debian-Config-Framework verwendest: In der
Site-Konfiguration.


> Am Ende muss eine direkte Binärdatei ohne Dateiendung genutzt werden
> können.

In dem Fall musst Du ScriptAlias[1] verwenden. Aber warum *muss* das
sein? Kannst Du die Datei nicht umbenennen bzw. verlinken (Falls Dich
die Endung im URL stört, die kann man auch über Content-Negotiation
loswerden).

hp

[1] https://httpd.apache.org/docs/2.4/mod/mod_alias.html#scriptalias

Marco Moock

unread,
Dec 6, 2022, 3:20:00 AM12/6/22
to
Am 05.12.2022 um 19:46:30 Uhr schrieb Peter J. Holzer:

> On 2022-12-05 13:12, Marco Moock <mo...@posteo.de> wrote:
> > Ich habe jetzt ein Debian neu aufgesetzt und nun eine neue Konfig
> > ohne Überbleibsel.
> > Aktiviert habe ich am Apache bisher nur das Modul cgi.
> > Mehr nicht.
> > Welche Schritte sind nun notwendig, um CGI-Skripte zu nutzen?
> > In welcher Datei konfiguriert man am besten die CGI-Optionen?
>
> Wenn Du das Debian-Config-Framework verwendest: In der
> Site-Konfiguration.

Da habe ich nun Include conf-available/serve-cgi-bin.conf aktiviert
innerhalb von VirtualHost.

Das hat folgenden Inhalt:

<IfModule mod_alias.c>
<IfModule mod_cgi.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfModule mod_cgid.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfDefine ENABLE_USR_LIB_CGI_BIN>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews
+SymLinksIfOwnerMatch
Require all granted
</Directory>
</IfDefine>
</IfModule>

Leider kann ich das Skript aber nicht abrufen, diverse Pfade probiert
(liegt in /usr/lib/cgi-bin/test.cgi). Welchen muss man nutzen?
Das Skript selbst gehört www-data und ist ausführbar.

Wenn es mit dem Skript läuft kümmere ich mich um die Binärdatei.

Peter J. Holzer

unread,
Dec 6, 2022, 1:09:17 PM12/6/22
to
On 2022-12-06 08:19, Marco Moock <mo...@posteo.de> wrote:
> Am 05.12.2022 um 19:46:30 Uhr schrieb Peter J. Holzer:
>> On 2022-12-05 13:12, Marco Moock <mo...@posteo.de> wrote:
>> > Ich habe jetzt ein Debian neu aufgesetzt und nun eine neue Konfig
>> > ohne Überbleibsel.
>> > Aktiviert habe ich am Apache bisher nur das Modul cgi.
>> > Mehr nicht.
>> > Welche Schritte sind nun notwendig, um CGI-Skripte zu nutzen?
>> > In welcher Datei konfiguriert man am besten die CGI-Optionen?
>>
>> Wenn Du das Debian-Config-Framework verwendest: In der
>> Site-Konfiguration.
>
> Da habe ich nun Include conf-available/serve-cgi-bin.conf aktiviert
> innerhalb von VirtualHost.
>
> Das hat folgenden Inhalt:
>
><IfModule mod_alias.c>
^^^^^^^^^
Hast Du mod_alias auch enabled?

Ohne das wird dieser ganze Abschnitt ignoriert (und ScriptAlias würde
nicht funktionieren).

Ich verwende das Debian-Apache-Config-System nicht, aber hier ist ein
minimales httpd.conf, das mir die Ausführung von CGI-Scripts erlaubt:

------------------------------------------------------------------------
User www-data
Group www-data
Listen 127.0.0.1:80

LoadModule alias_module /usr/lib/apache2/modules/mod_alias.so
LoadModule authn_core_module /usr/lib/apache2/modules/mod_authn_core.so
LoadModule authz_core_module /usr/lib/apache2/modules/mod_authz_core.so
LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so
LoadModule mpm_worker_module /usr/lib/apache2/modules/mod_mpm_worker.so
LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{ms}Tms %V HTTPS=%{HTTPS}x SSL_PROTOCOL=%{SSL_PROTOCOL}x" full
ErrorLog "|/usr/bin/rotatelogs /var/log/www/cgitest/error-%Y-%m-%d.log 86400"
CustomLog "|/usr/bin/rotatelogs /var/log/www/cgitest/access-%Y-%m-%d.log 86400" full

DocumentRoot /usr/local/www/cgitest/htdocs

ScriptAlias /cgi-bin/ /usr/local/www/cgitest/cgi-bin/
------------------------------------------------------------------------
(ssl_module ist nur für mein übliches Log-Format notwendig)

$ cat /usr/local/www/cgitest/cgi-bin/foo
#!/bin/sh

echo "Content-Type: text/plain"
echo
date
printenv

$ curl http://localhost/cgi-bin/foo
Tue Dec 6 19:02:37 CET 2022
GATEWAY_INTERFACE=CGI/1.1
REMOTE_ADDR=127.0.0.1
QUERY_STRING=
HTTP_USER_AGENT=curl/7.81.0
...
SERVER_PORT=80
SCRIPT_NAME=/cgi-bin/foo
SERVER_NAME=localhost

...
> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
...
> Leider kann ich das Skript aber nicht abrufen, diverse Pfade probiert
> (liegt in /usr/lib/cgi-bin/test.cgi). Welchen muss man nutzen?

Da /cgi-bin/ das Alias für /usr/lib/cgi-bin/ ist: /cgi-bin/test.cgi.

hp

Marco Moock

unread,
Dec 7, 2022, 6:10:34 AM12/7/22
to
Am 06.12.2022 um 19:09:14 Uhr schrieb Peter J. Holzer:

> On 2022-12-06 08:19, Marco Moock <mo...@posteo.de> wrote:
> ><IfModule mod_alias.c>
> ^^^^^^^^^
> Hast Du mod_alias auch enabled?

Scheint so:
test@test:~$ apachectl -M |grep alia
alias_module (shared)
test@test:~$

> Da /cgi-bin/ das Alias für /usr/lib/cgi-bin/ ist: /cgi-bin/test.cgi.

Das klappt bei mir nun auch, ich hatte aber einen Fehler im Skript.

Der echo-Befehl fehlt, der einfach nur ne Leerzeile erzeugt. Das fraß
der Apache nicht.

Jetzt sehe ich weiter wie ich das mit der Binary vom Listserv
hinbekomme.

Danke für die Hilfe.

0 new messages