GNU/Linux >> Tutoriels Linux >  >> Linux

Apache CGI dans le répertoire utilisateur Fin de la sortie du script avant les en-têtes

Finalement j'ai résolu ça. Merci à @JimB, car dans son commentaire, il a souligné SUEXEC, que je ne connaissais pas (ou que j'ignorais simplement jusqu'à présent).

Après avoir lu un peu la documentation suEXEC, j'ai compris que le problème devait être là. J'ai donc jeté un œil à la configuration :

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

et tout semblait OK (bon uid/gid pour mon utilisateur, userdir_suffix est bien, etc.). J'ai donc jeté un coup d'œil aux journaux système :

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

et c'est le problème :mon cgi-bin répertoire était accessible en écriture par d'autres .

J'ai corrigé en changeant simplement les autorisations en 755 .


Cela se produit parfois lorsque vous essayez d'appeler d'autres méthodes de module Python à partir de votre cgi où vous avez peut-être laissé des instructions 'print' (peut-être pour le débogage). Scannez donc votre code pour toute instruction "print", parfois cela résout facilement le problème.


Pour moi, cela a fonctionné lorsque j'ai changé la ligne shebang (#!/usr/bin/sh ) à #!/usr/bin/env sh . J'ai trouvé que toutes les lignes de shebang de Quel est le shebang Bash préféré? semblait fonctionner (notez cependant que sh est différent de bash donc si vous voulez utiliser sh tenez-vous-y).

Donc ce code a fonctionné pour moi :

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

De plus, selon le post mentionné ci-dessus, il semblerait que /usr/bin/env sh semble préféré à /bin/sh . Je n'ai aucune idée des trucs par répertoire.


Linux
  1. Pourquoi ne puis-je pas utiliser Cd dans un script Bash ? ?

  2. Répertoire bin Cgi pour chaque utilisateur dans Apache

  3. Installer WordPress sur Linux avec Apache

  4. Réinitialiser un mot de passe d'utilisateur Active Directory

  5. Définition de l'umask de l'utilisateur Apache

Exécuter le script avec des arguments en tant qu'utilisateur ?

D'où est exécuté un script Shell ?

Comment créer une crontab via un script

Ajouter un script bash au chemin

Mot de passe panique sous Linux

Comment grep ps sortie avec des en-têtes