GNU/Linux >> Tutoriales Linux >  >> Linux

Apache CGI en el directorio de usuarios Fin de la salida del script antes de los encabezados

Finalmente resolví eso. Gracias a @JimB, porque en su comentario señaló SUEXEC, que no conocía (o simplemente ignoré hasta ahora).

Después de leer un poco la documentación de suEXEC, entendí que el problema tenía que estar ahí. Entonces, eché un vistazo a la configuración:

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

y todo se veía bien (buen uid/gid para mi usuario, userdir_suffix está bien, etc.). Así que eché un vistazo a los registros del 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)

y eso es el problema:mi cgi-bin otros usuarios podían escribir en el directorio .

Lo solucioné simplemente cambiando los permisos a 755 .


Esto a veces surge cuando intenta llamar a otros métodos de módulos de Python desde su cgi donde podría haber dejado algunas declaraciones de 'impresión' (quizás para depurar). Así que escanee su código en busca de cualquier declaración de 'impresión', a veces esto soluciona el problema fácilmente.


Para mí, funcionó cuando cambié la línea shebang (#!/usr/bin/sh ) a #!/usr/bin/env sh . Descubrí que cualquier línea shebang de ¿Cuál es el shebang Bash preferido? parecía funcionar (sin embargo, tenga en cuenta que sh es diferente de bash así que si quieres usar sh quedarse con eso).

Así que este código funcionó para mí:

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

Además, según la publicación mencionada anteriormente, parece /usr/bin/env sh parece preferible a /bin/sh . No tengo idea sobre las cosas por directorio.


Linux
  1. ¿Cómo ejecutar el comando antes del inicio de sesión del usuario en Linux?

  2. Directorio bin Cgi para cada usuario en Apache

  3. Restablecer una contraseña de usuario de Active Directory

  4. Configuración de la umask del usuario de Apache

  5. MYSQL difiere en la salida del script

no se puede obtener el script de origen en un directorio actual

Agregue un script bash a la ruta

¿Cómo ejecutar un script bash?

Ejecutando Apache como un usuario diferente

Ejecute un script de shell como un usuario diferente

Cómo grep salida ps con encabezados