GNU/Linux >> Belajar Linux >  >> Linux

Apache CGI di direktori pengguna Akhir keluaran skrip sebelum header

Akhirnya saya menyelesaikannya. Terima kasih kepada @JimB, karena dalam komentarnya dia menunjukkan SUEXEC, yang tidak saya ketahui (atau diabaikan begitu saja sampai sekarang).

Setelah membaca sedikit dokumentasi suEXEC, saya mengerti bahwa masalahnya ada di sana. Jadi, saya melihat konfigurasinya:

# 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"

dan semuanya tampak Ok (uid/gid bagus untuk pengguna saya, userdir_suffix baik-baik saja, dll). Jadi saya melihat log sistem:

# 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)

dan itu masalahnya:cgi-bin saya direktori dapat ditulis oleh orang lain .

Saya memperbaikinya hanya dengan mengubah izin menjadi 755 .


Ini terkadang muncul ketika Anda mencoba memanggil metode modul Python lain dari cgi Anda di mana Anda mungkin telah meninggalkan beberapa pernyataan 'cetak' (mungkin untuk debugging). Jadi, pindai kode Anda untuk menemukan pernyataan 'cetak' apa pun, terkadang ini menyelesaikan masalah dengan mudah.


Bagi saya, itu berhasil ketika saya mengubah garis shebang (#!/usr/bin/sh ) ke #!/usr/bin/env sh . Saya menemukan bahwa ada garis shebang dari Apa yang disukai Bash shebang? tampaknya berfungsi (namun perhatikan bahwa sh berbeda dengan bash jadi jika Anda ingin menggunakan sh tetap dengan itu).

Jadi kode ini bekerja untuk saya:

#!/usr/bin/env sh
echo "Content-type: text/plain"
echo ""
echo "Hello"

Juga, menurut posting yang disebutkan di atas, sepertinya /usr/bin/env sh tampaknya lebih disukai daripada /bin/sh . Saya tidak tahu tentang hal-hal per direktori.


Linux
  1. Mengapa Saya Tidak Dapat Menggunakan Cd Dalam Skrip Bash??

  2. Jalankan Script Dengan Argumen Sebagai Pengguna?

  3. Setel ulang kata sandi pengguna Direktori Aktif

  1. Mengatur umask pengguna Apache

  2. tidak dapat sumber skrip di direktori saat ini

  3. Kata Sandi Panik di Linux

  1. Bagaimana Cara Menjalankan Perintah Sebelum Login Pengguna Di Linux?

  2. Apa yang dihasilkan pwd?

  3. Cara grep keluaran ps dengan header