Mot de passe pour un répertoire
Le fichier .htaccess
est un fichier en texte clair, qui permet de définir le message affiché lors de la demande de mot de passe, ainsi que le fichier dans lequel Apache ira vérifier que l’utilisateur/mot de passe est correct (le .htpasswd
).
Dans mon cas, je choisis de faire un fichier .htpasswd par répertoire, car tous les répertoires ne doivent pas être accessibles aux mêmes utilisateurs.
Je crée le .htpasswd :
cd /path/to/site/files
htpasswd -c .htpasswd user1
L’option -c sert à créer/réécrire le fichier. Si on ne la spécifie pas, ça rajoute une nouvel utilisateur qui pourra lire ce répertoire.
Ensuite, on ajoute le .htaccess, qui va directement protéger le répertoire
nano .htaccess
Dans lequel on met :
AuthType Basic
AuthUserFile "/path/to/site/files/.htpasswd"
AuthName "Identification pour ce dossier ?"
Require valid-user
Il semble indispensable d’indiquer le chemin complet vers le .htpasswd, sans quoi le serveur retourne une erreur 500.
Dans le cas où le repértoire est en dehors des répertoires standards de Apache (/usr/share ou /var/www), il faut les ajouter à la main dans le /etc/apache2/apache2.conf
ou dans /etc/apache2/sites-available/00X-mon-site.conf
:
<Directory /path/to/site/files/>
Options Indexes FollowSymLinks
AllowOverride AuthConfig
Require all granted
</Directory>
Ceci permet respectivement de suivre les liens symboliques (utile pour mon setup), de permettre d’outrepasser les droits localement (et donc d’utiliser le htaccess), et permet à tout le monde (toutes les IPs notamment) d’accéder au site.
AllowOverride
Cette directive doit être présente dans le fichier de configuration d’apache (dans /etc/apache2/
sous Debian, dans /usr/local/apache2/conf/httpd.conf
pour l’image docker d’apache) pour autoriser, entre autres, le .htaccess.
Par défaut, c’est None
, qui n’autorise rien dans les htaccess (et renverra une erreur 500 si un htaccess est utilisé). On peut remplacer None par les différents mot-clés (AuthConfig FileInfo Indexes Limit Options
) ou All
pour l’ensemble. Chacune de ces directives est un ensemble de sous-directives.
Pour un filtrage plus granulaire, on peut utiliser la directive AllowOverrideList
pour autoriser uniquement certaines sous-directives.