最後に私はそれを解決しました。 @JimB に感謝します。彼のコメントで、私が知らなかった (または単に今まで無視していた) SUEXEC を指摘してくれたからです。
suEXEC のドキュメントを少し読んだ後、問題がそこにあるに違いないことがわかりました。そこで、構成を調べてみました:
# 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"
すべてが正常に見えました(ユーザーの適切なuid/gid、userdir_suffixは問題ありませんなど)。そこで、システム ログを調べてみました:
# 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)
そしてそれ 問題:私の cgi-bin
ディレクトリは他のユーザーが書き込み可能でした .
パーミッションを 755
に変更するだけで修正しました .
これは、cgi から他の Python モジュール メソッドを呼び出そうとすると、いくつかの 'print' ステートメント (おそらくデバッグ用) が残っている可能性がある場合に発生することがあります。したがって、コードをスキャンして「print」ステートメントを探してください。これで問題が簡単に解決する場合があります。
私にとっては、シバン行(#!/usr/bin/sh
)を変更するとうまくいきました ) から #!/usr/bin/env sh
. What is the preferred Bash shebang? からのシバン行が見つかりましたか?動作しているように見えました (ただし、sh
に注意してください) bash
とは異なります sh
を使用する場合 それにこだわります)。
したがって、このコードはうまくいきました:
#!/usr/bin/env sh
echo "Content-type: text/plain"
echo ""
echo "Hello"
また、上記の投稿によると、 /usr/bin/env sh
のようです /bin/sh
よりも好まれているようです .ディレクトリごとのことはわかりません。