Alla fine ho risolto. Grazie a @JimB, perché nel suo commento ha indicato SUEXEC, che non conoscevo (o semplicemente ignorato fino ad ora).
Dopo aver letto un po' la documentazione suEXEC, ho capito che il problema doveva essere lì. Quindi, ho dato un'occhiata alla configurazione:
# 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"
e tutto sembrava ok (buon uid/gid per il mio utente, userdir_suffix va bene, ecc.). Quindi ho dato un'occhiata ai log di sistema:
# 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)
e questo è il problema:il mio cgi-bin
directory era scrivibile da altri .
Ho risolto semplicemente cambiando i permessi in 755
.
Questo a volte si presenta quando provi a chiamare altri metodi del modulo Python dal tuo cgi dove potresti aver lasciato alcune istruzioni 'print' (forse per il debug). Quindi scansiona il tuo codice per qualsiasi istruzione 'print', a volte questo risolve facilmente il problema.
Per me, ha funzionato quando ho cambiato la linea Shebang (#!/usr/bin/sh
) a #!/usr/bin/env sh
. Ho scoperto che qualsiasi frase di Shebang da Qual è il Bash shebang preferito? sembrava funzionare (si noti tuttavia che sh
è diverso da bash
quindi se vuoi usare sh
insisti).
Quindi questo codice ha funzionato per me:
#!/usr/bin/env sh
echo "Content-type: text/plain"
echo ""
echo "Hello"
Inoltre, secondo il post menzionato sopra, sembra /usr/bin/env sh
sembra preferito a /bin/sh
. Non ho idea delle cose per directory.