Endlich habe ich das gelöst. Danke an @JimB, weil er in seinem Kommentar auf SUEXEC hingewiesen hat, von dem ich nichts wusste (oder bis jetzt einfach ignoriert habe).
Nachdem ich ein wenig die suEXEC-Dokumentation gelesen hatte, verstand ich, dass das Problem dort liegen musste. Also habe ich mir die Konfiguration angesehen:
# suexec -V
-D AP_DOC_ROOT="/var/www"
-D AP_GID_MIN=1000
-D AP_HTTPD_USER="apache"
-D AP_LOG_SYSLOG
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=1000
-D AP_USERDIR_SUFFIX="public_html"
und alles sah in Ordnung aus (gute uid/gid für meinen Benutzer, userdir_suffix ist in Ordnung usw.). Also habe ich mir die Systemprotokolle angesehen:
# journalctl -b | grep "suexec"
May 22 11:43:12 caladan suexec[5397]: uid: (1000/user) gid: (1000/user) cmd: test.cgi
May 22 11:43:12 caladan suexec[5397]: directory is writable by others: (/home/user/public_html/cgi-bin)
und das ist das problem:mein cgi-bin
Verzeichnis war für andere beschreibbar .
Ich habe das Problem behoben, indem ich einfach die Berechtigungen auf 755
geändert habe .
Dies tritt manchmal auf, wenn Sie versuchen, andere Python-Modulmethoden aus Ihrem CGI aufzurufen, wo Sie möglicherweise einige 'print'-Anweisungen hinterlassen haben (vielleicht zum Debuggen). Scannen Sie also Ihren Code nach einer 'print'-Anweisung, manchmal behebt dies das Problem einfach.
Bei mir hat es funktioniert, als ich die Shebang-Zeile geändert habe (#!/usr/bin/sh
) bis #!/usr/bin/env sh
. Ich habe festgestellt, dass irgendwelche Shebang-Zeilen von What is the Preferred Bash Shebang? schien zu funktionieren (beachten Sie jedoch, dass sh
unterscheidet sich von bash
wenn Sie also sh
verwenden möchten Bleib dabei).
Dieser Code hat also bei mir funktioniert:
#!/usr/bin/env sh
echo "Content-type: text/plain"
echo ""
echo "Hello"
Außerdem scheint es laut dem oben erwähnten Beitrag /usr/bin/env sh
zu sein scheint gegenüber /bin/sh
bevorzugt zu werden . Ich habe keine Ahnung von den Sachen pro Verzeichnis.