Je suis très nouveau sur Apache sous Ubuntu. J'ai récemment installé Apache2 sur Ubuntu et j'essaie de configurer CGI. J'ai ajouté les lignes suivantes dans le fichier Apache2.conf:
ScriptAlias /cgi-bin/ /home/router/cgi-bin/
<Directory /home/router/cgi-bin/>
Options ExecCGI
AddHandler cgi-script cgi pl
</Directory>
Et j'ai enregistré et redémarré Apache2, mais lorsque je tape les informations suivantes dans le navigateur:
http://192.168.1.1/cgi-bin/file1.cgi
Je reçois l'erreur suivante:
You don't have permission to access /cgi-bin/file1.cgi on this server.
Tout d'abord, je voudrais ne pas exécuter CGI à partir de votre répertoire /home/
. Les autorisations ne sont pas configurées pour cela, pour les serveurs Web, et peuvent parfois donner lieu à des maux de tête, à la fois avec la configuration des autorisations et d'autres problèmes.
Deuxièmement, je suggérerais * de créer un répertoire dédié dans /var/www/
(tel que cgi-bin
) où vos scripts CGI sont placés et de l'utiliser dans la configuration d'Apache.
Sudo mkdir -p /var/www/cgi-bin/
Sudo chown $USER:www-data /var/www/cgi-bin/
Les commandes ci-dessus vont créer le répertoire et configurer les autorisations pour que vous puissiez écrire dans le répertoire et que le serveur Web puisse lire le répertoire et avoir le droit de faire des choses à l'intérieur de celui-ci.
À partir de là, déposez votre CGI là-bas, assurez-vous qu'il appartient de la même manière (Sudo chown $USER:www-data /var/www/cgi-bin/*
), puis configurez votre configuration Apache pour qu'elle utilise /var/www/cgi-bin
au lieu de /home/router/cgi-bin
.
Si, pour une raison quelconque, vous devez utiliser /home/router/cgi-bin
, vous devez alors effectuer plusieurs opérations: autoriser www-data et tous les utilisateurs à accéder au répertoire cgi-bin
, puis donner www. -data d'accès au répertoire lui-même.
Sudo chgrp www-data /home/router/cgi-bin
Sudo chmod +rx /home/
Sudo chmod +rx /home/router/
Sudo chmod 750 /home/router/cgi-bin/
Le problème, c’est que vous devez ouvrir votre répertoire personnel suffisamment pour que la catégorie "autre" d’utilisateurs puisse accéder à la structure de répertoires et la parcourir. Il s'agit d'une faille de sécurité, car aucun autre utilisateur ne devrait être autorisé à parcourir le système de fichiers dans votre répertoire personnel de cette manière, car cela pourrait entraîner une fuite de données ou le vol de données personnelles. (C’est pourquoi la plupart des guides pour les serveurs Web suggèrent de NE PAS utiliser de répertoires de départ, mais plutôt de répertoires dédiés dans /srv/
ou /var/www/
pour les répertoires de documents de serveur Web.)
Je viens de configurer un nouveau serveur LAMP avec Ubuntu 18.04.01, qui installe ou met à niveau (je ne sais pas lequel) vers Apache2 v 2.4.29. C'est un peu nouveau pour moi car les fichiers de configuration d'Apache ont de nouveau changé, mais je pense que la procédure ci-dessous est la bonne.
Le module de chargement cgi n'a pas été activé, j'ai donc dû le faire d'abord en exécutant a2enmod. (Vérifiez le nom correct des modules disponibles.) Ceci configure un lien symbolique du dossier activé vers le fichier du dossier disponible.
Le module de configuration cgi était déjà activé - je trouvais cela un peu étrange, mais c’est ce que c’était. Le module de configuration a une instruction conditionnelle qui vérifie si le module de chargement est disponible et, le cas échéant, définit Scriptalias sur/usr/bin/cgi-bin. J'ai lu que ce n'est pas une bonne idée, comme dans la réponse précédente, et qu'il est préférable de créer un répertoire/var/www/cgi-bin pour vos scripts, donc je l'ai fait.
Ensuite, je mets mon script php dans le nouveau répertoire que j'avais créé à/var/www/cgi-bin. Cela ne devait être que lu - je l'ai chmodé à 444, et ça a fonctionné.
Au fil des ans, le fichier Apache2.conf a été réduit et, comme expliqué dans la documentation, les développeurs ont essayé de le rendre plus facilement configurable en le faisant appeler les autres bits.