GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Apache CGI im Benutzerverzeichnis Ende der Skriptausgabe vor Headern

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.


Linux
  1. Warum kann ich Cd nicht in einem Bash-Skript verwenden?

  2. Skript mit Argumenten als Benutzer ausführen?

  3. Wo wird ein Shell-Skript ausgeführt?

  4. Cgi bin-Verzeichnis für jeden Benutzer in Apache

  5. MYSQL unterscheidet sich in der Ausgabe vom Skript

Aktuelles Verzeichnis des Shell-Skripts?

Panikpasswort unter Linux

Wie führt man ein Bash-Skript aus?

Ausführen von Apache als ein anderer Benutzer

Was gibt pwd aus?

So grep ps-Ausgabe mit Headern