Accueil > Le développement > La formation > Les Outils Numériques > Les lignes de commande sous macOS > Les lignes de commande - Leçon 5 - rendre effective l’utilisation de la (...)
Les lignes de commande - Leçon 5 - rendre effective l’utilisation de la pile LAMP
dimanche 1er octobre 2023, par
Vous l’aurez remarqué, nous utilisons parfois la commande sudo
. Il est plus sûr d’utiliser la commande sudo
dans Terminal que d’activer l’utilisateur root
. L’utilisateur root
peut tout faire. sudo
permet à un utilisateur ordinaire de demander l’autorisation de faire une chose interdite. Pour en savoir plus sur sudo
, ouvrez l’application Terminal et saisissez man sudo
.
Pour en savoir plus sur l’utilisateur root :
https://support.apple.com/fr-fr/HT204012
Le répertoire où se trouve le site du serveur http Apache que nous avons lancé lors de la précédent leçon se trouve parmi les fichiers system qui sont protégés. Ils sont situés dans une arborescence au dessus du répertoire de l’utilisateur. Il serait intéressant de permettre la création de zones dédiée pour les utilisateurs.
1. Permettre à Apache de gérer les utilisateurs
1.1 Modifier la configuration principale du serveur web Apache
Avant de procéder à une modification de la configuration, il est prudent d’en faire une copie
sudo cp -i /etc/apache2/httpd.conf /etc/apache2/httpd.conf.bak
Vous pouvez ensuite modifier la configuration principale du serveur web Apache avec la commande :
sudo vim /etc/apache2/httpd.conf
où l’on retrouve les lignes ci-dessous et on les décommente si nécessaire. Pour décommenter une ligne, il faut retirer le caractère dièse (#
) à son début.
LoadModule userdir_module libexec/apache2/mod_userdir.so
LoadModule include_module libexec/apache2/mod_include.so
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
Include /private/etc/apache2/extra/httpd-userdir.conf
Une petite astuce sous
vim
:
Pour rechercher une chaîne de caractères, tapez / suivi de la chaîne recherchée et appuyez sur Return.vim
positionne le curseur sur la première occurrence de la chaîne trouvée. Par exemple taper/userdir_module
vous permettra de retrouver l’appel au module et de retirer le commentaire (#
) le précédent et le rendant inactif.
1.2 Modifier la configuration des utilisateurs
Il faut modifier le script ci-dessus appelé par un include avec la commande :
sudo vim /etc/apache2/extra/httpd-userdir.conf
Vous y verrez une ligne de commentaire qui indique :
# Required module: mod_authz_core, mod_authz_host, mod_userdir
C’est cette vérification que nous avons faite dans le fichier httpd.conf
ci-dessus.
Vous y verrez une ligne indiquant
UserDir Sites
Cela signifie que c’est le répertoire Sites, dans le dossier de l’utilisateur, qui permet d’accueillir les requêtes du serveur http. Le chemin sera : /Users/username/Sites/
Vous devez ajouter ou décommenter dans le présent fichier la ligne suivante :
Include /private/etc/apache2/users/*.conf
1.3 Créer ma configuration en tant qu’utilisateur
Enfin, après s’être placé dans le répertoire racine, il convient de créer le fichier username.conf
(ou username
sera votre nom d’user)
avec la commande :
sudo vim /etc/apache2/users/username.conf
par exemple sudo vim /etc/apache2/users/vincent.conf
Vous devez saisir ces lignes (ou username
sera votre nom d’user)
:
<Directory "/Users/username/Sites/">
AllowOverride All
Options Indexes MultiViews FollowSymLinks
Require all granted
</Directory>
Ces opérations faites, lançons le serveur Web
sudo apachectl start
et vérifions les modules installés avec l’instruction :
apachectl -t -D DUMP_MODULES
Doivent apparaitre :
userdir_module (shared)
include_module (shared)
rewrite_module (shared)
Tester l’accès depuis Safari :
au site global
http://localhost
puis au site de l’user (vous)
http://localhost/~vincent/
où vincent est le nom de l’utilisateur.
Si vous avez un problème imprévu de configuration, vous pouvez lancer un test sur cette configuration qui pourra vous dire où est l’erreur avec la commande :
sudo apachectl configtest
2. Utilisation de Sites
L’utilisateur à maintenant son site à gérer dans le répertoire Sites
(situé à la racine de son répertoire d’utilisateur).
Si vous rencontrer des erreurs, il peut être utile d’aller consulter le journal des erreurs d’Apache. Vous pouvez le faire avec la commande ci-dessous :
cat /var/log/apache2/error_log
Une erreur sera rédigée de la façon suivante dans le log :
[Sat Sep 30 18:39:56.671447 2023] [core:crit] [pid 71538] (13)Permission denied : [client ::1:52090] AH00529 : /Users/vincent/Sites/.htaccess pcfg_openfile : unable to check htaccess file, ensure it is readable and that ’/Users/vincent/Sites/’ is executable
Même si vous ne rencontrez pas l’erreur ci-dessus, les commandes que nous allons faire pour corriger le problème peuvent vous intéresser.
2.1 Les droits des répertoires et des fichiers
Il y a, tout d’abord, les droits sur les fichiers et répertoires. la commande ls
suivie de l’argument -l
permet de connaitre ces droits.
Placez vous dans le répertoire de l’utilisateur :
cd ~
Regardez les droits du répertoire Sites
et de ce qu’il contient :
ls -l -a Sites
- Le répertoire Sites, représenté par un point (« . ») est indiqué avec les droits
drwx------
.
La première lettre, la lettred
, signifie qu’il s’agit d’un répertoire (« a directory » en anglais). _ Les autres lettres doivent se lire en série, trois lettres pour l’utilisateur (ou « user » en anglais), trois lettres pour le groupe (ou « group » en anglais), trois lettres pour les autres (ou « others » en anglais).
Autrement dit, l’utilisateur pour le répertoireSites
, se voit attribuer trois lettresrwx
. le r signifie un droit en lecture (pour « read » en anglais), le w signifie écrire (« write » en anglais), le x est pour exécuter (« execute » en anglais).
le groupe ou les autres n’ont aucun droit ce qui se traduit par un tiret (« - »). - le fichier
index.html.en
est indiqué avec les droits -rwxr-xr-x, codification que vous pouvez maintenant interprétée, sachant que le premier tiret « - » indique simplement qu’il s’agit d’un fichier.
L’examen de ces droits permet d’identifier que le répertoire Sites n’a pas été créé avec des droits suffisants. Pour lui donner, pour les trois groupes, les droits maximaux, il est possible de saisir cette commande :
chmod +rwx Sites
Reste que ce serait excessif. Les droits nécessaires sont les suivants
chmod 705 Sites
Nous utilisons ici des chiffres et non des lettres, ce qui est une autre convention, facile à retenir une fois que l’on sait qu’il s’agit du chiffre à séparer en trois, pour les trois groupes, et chaque groupe est la simple addition de permission ainsi réparties : la lecture = 4, l’écriture = 2, l’exécution = 1.
Il reste aussi à optimiser les droits du fichier index.html.en
qui n’a pas besoin de droit de groupe.
chmod 705 index.html.en
On peut se demander ce qu’est ce fichier index.html
auquel un .en
a été ajouté.
2.2 L’index
a) les négociations de language
Le jargon Apache parle de « Négociation de language ». Le serveur Web http permet la gestion d’une extension liée au langage. Lorsque, précédemment dans cet article, vous avez défini votre configuration en tant qu’utilisateur, vous avez introduit le mot clé MultiViews
qui demande cette fonctionnalité.
Rééditer le fichier de configuration de l’utilisateur :
sudo vim /etc/apache2/users/username.conf
(par exemple sudo vim /etc/apache2/users/vincent.conf
) et modifiez le entièrement ainsi :
Vous devez saisir ces lignes (ou username
sera votre nom d’user)
:
<Directory "/Users/username/Sites/">
AllowOverride none
Options -MultiViews
Require all granted
</Directory>
Comme on n’utilise pas de .htaccess
on peut entièrement désactivée ce recours en définissant la directive AllowOverride
à none
Nous avons supprimé l’usage de MultiViews
Nous avons rappelé que l’index serait soit index.html
soit index.php
Nous avons autorisé les accès.
Renommez index.html.en
en index.html
seulement :
mv index.html.en index.html
Puis tester le site de l’utilisateur
http://localhost/~vincent/
Et si nous parlions de cet index.php
?
b) permettre l’utilisation du PHP
Créons un index en php :
vim index.php
Ecrivez :
<?php
echo 'Ceci est mon texte envoyé en Php !';
renommons index.html pour le rendre inutilisable :
mv index.html old_index.html
Puis testons le site de l’utilisateur
http://localhost/~vincent/
Nous aurons une erreur 403 Forbidden. En effet, ne trouvant pas le fichier index.html
, le serveur ne va pas chercher le fichier index.php
.
Ajoutons une ligne à notre fichier de configuration d’utilisateur pour lui dire, si l’index.html n’est pas là, d’utiliser l’index.php
sudo vim /etc/apache2/users/username.conf
ajoutons :
DirectoryIndex index.html index.php
Le script PHP va s’afficher mais ne sera pas interprété. En effet, ne trouvant pas le fichier index.html
, le serveur va bien chercher le fichier index.php
mais ne l’interprète pas. Il faut configurer le serveur pour qu’il puisse servir des pages PHP.
Le fichier de configuration d’Apache sous macOS précise, dans ses commentaires, que le PHP était obsolète dans macOS 11 et supprimé de macOS 12. Nous n’allons donc pas pouvoir réactiver le module php. Il faudra aller le rechercher dans l’installation que nous avons faite lors de l’installation de Composer (voir la leçon 4). Vous retrouverez l’installation faite par Homebrew par la ligne de commande suivante :
cd $HOMEBREW_REPOSITORY/Cellar/php/
Le module a appelé par Apache sera dans :
cd $HOMEBREW_REPOSITORY/opt/homebrew/opt/php/lib/httpd/modules/
Nous ouvrons le fichier de configuration d’Apache
sudo vim /etc/apache2/httpd.conf
Vous verrez sans doute un commentaire dans le fichier de configuration Apache :
#PHP was deprecated in macOS 11 and removed from macOS 12
Ce qui signifie que l’Apache d’Apple n’utilise pas le php.
Nous ajoutons la ligne suivant pour appeler le module php :
LoadModule php_module /opt/homebrew/opt/php/lib/httpd/modules/libphp.so
Puis nous précisons que si le module est chargé, il faut utiliser le PHP pour les fichiers qui utilise l’extension adéquate :
<IfModule php_module>
<FilesMatch .php$>
SetHandler application/x-httpd-php
</FilesMatch>
</IfModule>
Mais le simple ajout de ce module ne suffit pas. Cela va générer une erreur que vous pourrez retrouver dans :
sudo apachectl configtest
[Sun Oct 01 19:48:55.864782 2023] [so:error] [pid 76530] AH06665 : No code signing authority for module at /opt/homebrew/opt/php/lib/httpd/modules/libphp.so specified in LoadModule directive.
httpd : Syntax error on line 72 of /private/etc/apache2/httpd.conf : Code signing absent - not loading module at : /opt/homebrew/opt/php/lib/httpd/modules/libphp.so
Il s’agit d’une précaution pour assurer la sécurité de votre serveur : des modules ne peuvent être ajouté que s’ils sont signés. Il vous faut donc ouvrir votre Trousseau d’accès, et depuis le menu, Assistant de configuration | Créer une autorité de certificat et choisir dans les options, Signature de code. Une procédure est ici détaillée en anglais. vous devrez mettre entre guillemet à la fin de la ligne, le titre de ce certificat.
En relançant le serveur Apache :
sudo apachectl -k restart
Un message de confirmation devrait apparaître :
[Sun Oct 01 21:43:31.910876 2023] [so:notice] [pid 78282] AH06662 : Allowing module loading process to continue for module at /opt/homebrew/opt/php/lib/httpd/modules/libphp.so because module signature matches authority "AC de vincent" specified in LoadModule directive
Le fichier Php est maintenant interprété !
c) Travailler en mode local en php
Pour connaitre le lieu ou est votre fichier de configuration, passez la commande suivante :
php -r "phpinfo();" | grep php.ini
editer le fichier dont le chemin vous est donné, par exemple :
vim /opt/homebrew/etc/php/8.2/php.ini
Désactivé jit
Faire une recherche de la section concernant le module pcre :
/pcre
décommenter la ligne et donner la valeur zéro à
pcre.jit=0
Permettre l’affichage de toutes les erreurs
comme nous sommes en local, vous pouvez ajouter les lignes suivantes au fichierphp.ini
:
; Enable error reporting
error_reporting = E_ALL
Conclusion
Le SYNPER donne des formations d’initiation à la programmation. Les articles de cette rubrique accompagnent une formation sur les lignes de commande avec macOS.
- Un premier article qui vous a appris à passer des commandes sous Linux.
- Un second article vous a appris à regrouper ces commandes et les exécuter depuis un fichier.
- Le troisième article vous a appris à appeler un dépôt et procéder à une installation par paquets.
- Le quatrième article vous a appris à utiliser la Pile LAMP en ligne de commande.
- Le présente article, très technique, montre que vous maitriser cet univers et sa complexité. Bravo ! Voyez attentif à ce que le fait qu’Apache soit livré avec le macOs peut provoquer, lors de mise à jour importante, le remplacement de votre fichier de configuration du service Web http et donc vous amener à devoir refaire les opérations ci-dessus.