GNU/Linux >> Linux の 問題 >  >> Linux

ユーザー ディレクトリの Apache CGI ヘッダーの前のスクリプト出力の終わり

最後に私はそれを解決しました。 @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よりも好まれているようです .ディレクトリごとのことはわかりません。


Linux
  1. Linuxでユーザーがログインする前にコマンドを実行する方法は?

  2. BashスクリプトでCdを使用できないのはなぜですか?

  3. ActiveDirectoryユーザーパスワードをリセットする

  1. 現在のディレクトリでスクリプトを入手できません

  2. bash スクリプトを実行するには?

  3. 別のユーザーとして Apache を実行する

  1. ユーザーとして引数を使用してスクリプトを実行しますか?

  2. シェルスクリプトはどこから実行されますか?

  3. Apacheの各ユーザーのCgibinディレクトリ