Remarque : Cet article a ete initialement publie en 2013. Certaines etapes, commandes ou versions de logiciels peuvent avoir change. Consultez la documentation actuelle d’Apache Web Server pour les informations les plus recentes.
Dans ce guide etape par etape, vous apprendrez a securiser un site en utilisant Apache.
Comment : Securiser un site en utilisant Apache
Si je devais le dire, je dirais probablement que la plupart des gens qui utilisent Apache le font pour publier des sites qui sont accessibles au public et/ou qui ont une securite integree (pensez a WordPress qui gere lui-meme l’acces a l’application et aux donnees). Donc, maintenant que je voulais publier un site qui demande un nom d’utilisateur/mot de passe ou une sorte de restriction pour que seul je puisse voir ses donnees (pensez console de gestion), je ne savais pas par ou commencer.
Apache offre les deux modalites qui peuvent etre utilisees independamment ou en combinaison : l’authentification et l’autorisation.
L’authentification signifie que l’utilisateur doit fournir des identifiants pour acceder et sa session est authentifiee (identifiee) tout au long de son sejour.
L’autorisation signifie que le client est autorise a acceder a la page. L’utilisateur individuel n’est pas necessairement identifie. Par exemple, si l’autorisation est basee sur l’hote source (adresse IP), il n’y a pas besoin d’authentification (Module Apache mod_authz_host.)
Ci-dessous se trouvent les informations pertinentes pour configurer Apache de maniere simple (obtenues de : http://httpd.apache.org/docs/2.2/howto/auth.html)
Il existe trois types de modules impliques dans le processus d’authentification et d’autorisation. Vous devrez generalement choisir au moins un module de chaque groupe.
- Type d’authentification (voir la directive
(<http://httpd.apache.org/docs/2.2/mod/core.html#authtype>))(<http://httpd.apache.org/docs/2.2/mod/mod_auth_basic.html>)(<http://httpd.apache.org/docs/2.2/mod/mod_auth_digest.html>)
- Fournisseur d’authentification (voir les directives
(<http://httpd.apache.org/docs/2.2/mod/mod_auth_basic.html#authbasicprovider>)et(<http://httpd.apache.org/docs/2.2/mod/mod_auth_digest.html#authdigestprovider>))(<http://httpd.apache.org/docs/2.2/mod/mod_authn_anon.html>)(<http://httpd.apache.org/docs/2.2/mod/mod_authn_dbd.html>)(<http://httpd.apache.org/docs/2.2/mod/mod_authn_dbm.html>)(<http://httpd.apache.org/docs/2.2/mod/mod_authn_file.html>)(<http://httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html>)
- Autorisation (voir la directive
(<http://httpd.apache.org/docs/2.2/mod/core.html#require>))(<http://httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html>)(<http://httpd.apache.org/docs/2.2/mod/mod_authz_dbm.html>)(<http://httpd.apache.org/docs/2.2/mod/mod_authz_groupfile.html>)(<http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html>)(<http://httpd.apache.org/docs/2.2/mod/mod_authz_owner.html>)(<http://httpd.apache.org/docs/2.2/mod/mod_authz_user.html>)
Le module (<http://httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html>) est a la fois un fournisseur d’authentification et d’autorisation. Le module (<http://httpd.apache.org/docs/2.2/mod/mod_authn_alias.html>) n’est pas un fournisseur d’authentification en soi, mais permet a d’autres fournisseurs d’authentification d’etre configures de maniere flexible. Le module (<http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html>) fournit l’autorisation et le controle d’acces base sur le nom d’hote, l’adresse IP ou les caracteristiques de la requete, mais ne fait pas partie du systeme de fournisseur d’authentification.
Premierement, vous devez creer un fichier de mots de passe. La facon exacte de le faire variera en fonction du fournisseur d’authentification que vous avez choisi. Plus de details a ce sujet plus tard. Pour commencer, nous utiliserons un fichier de mots de passe en texte. Ce fichier doit etre place quelque part qui n’est pas accessible depuis le web. C’est pour que les gens ne puissent pas telecharger le fichier de mots de passe. Par exemple, si vos documents sont servis depuis /usr/local/apache/htdocs, vous pourriez vouloir mettre le(s) fichier(s) de mots de passe dans /usr/local/apache/passwd. Pour creer le fichier, utilisez l’utilitaire (<http://httpd.apache.org/docs/2.2/programs/htpasswd.html>) fourni avec Apache. Celui-ci sera situe dans le repertoire bin de l’endroit ou vous avez installe Apache. Si vous avez installe Apache a partir d’un paquet tiers, il peut etre dans votre chemin d’execution. Pour creer le fichier, tapez :
htpasswd -c /usr/local/apache/passwd/passwords rbowen
(<http://httpd.apache.org/docs/2.2/programs/htpasswd.html>) vous demandera le mot de passe, puis vous demandera de le taper a nouveau pour confirmer :
# htpasswd -c /usr/local/apache/passwd/passwords rbowen New password: mypassword Re-type new password: mypassword Adding password for user rbowen
Si (<http://httpd.apache.org/docs/2.2/programs/htpasswd.html>) n’est pas dans votre chemin, vous devrez evidemment taper le chemin complet du fichier pour le faire fonctionner. Avec une installation par defaut, il est situe a /usr/local/apache2/bin/htpasswd. Ensuite, vous devrez configurer le serveur pour demander un mot de passe et indiquer au serveur quels utilisateurs sont autorises a acceder. Vous pouvez le faire soit en editant le fichier httpd.conf, soit en utilisant un fichier .htaccess. Par exemple, si vous souhaitez proteger le repertoire /usr/local/apache/htdocs/secret, vous pouvez utiliser les directives suivantes, soit placees dans le fichier /usr/local/apache/htdocs/secret/.htaccess, soit placees dans httpd.conf a l’interieur d’une section <Directory /usr/local/apache/apache/htdocs/secret>.
AuthType Basic AuthName "Restricted Files" # (Following line optional) AuthBasicProvider file AuthUserFile /usr/local/apache/passwd/passwords Require user rbowen
Examinons chacune de ces directives individuellement. La directive (<http://httpd.apache.org/docs/2.2/mod/core.html#authtype>) selectionne la methode utilisee pour authentifier l’utilisateur. La methode la plus courante est Basic, et c’est la methode implementee par (<http://httpd.apache.org/docs/2.2/mod/mod_auth_basic.html>). Il est important de savoir, cependant, que l’authentification Basic envoie le mot de passe du client au serveur sans chiffrement. Cette methode ne devrait donc pas etre utilisee pour des donnees tres sensibles, sauf si elle est accompagnee de (<http://httpd.apache.org/docs/2.2/mod/mod_ssl.html>). Apache prend en charge une autre methode d’authentification : AuthType Digest. Cette methode est implementee par (<http://httpd.apache.org/docs/2.2/mod/mod_auth_digest.html>) et est beaucoup plus securisee. La plupart des navigateurs recents prennent en charge l’authentification Digest. La directive (<http://httpd.apache.org/docs/2.2/mod/core.html#authname>) definit le Realm a utiliser dans l’authentification. Le realm remplit deux fonctions principales. Premierement, le client presente souvent ces informations a l’utilisateur dans la boite de dialogue de mot de passe. Deuxiemement, il est utilise par le client pour determiner quel mot de passe envoyer pour une zone authentifiee donnee. Ainsi, par exemple, une fois qu’un client s’est authentifie dans la zone "Restricted Files", il reessaiera automatiquement le meme mot de passe pour toute zone sur le meme serveur marquee avec le Realm "Restricted Files". Par consequent, vous pouvez empecher un utilisateur d’etre invite plus d’une fois a saisir un mot de passe en laissant plusieurs zones restreintes partager le meme realm. Bien sur, pour des raisons de securite, le client devra toujours redemander le mot de passe chaque fois que le nom d’hote du serveur change. La directive (<http://httpd.apache.org/docs/2.2/mod/mod_auth_basic.html#authbasicprovider>) est, dans ce cas, optionnelle, puisque file est la valeur par defaut pour cette directive. Vous devrez utiliser cette directive si vous choisissez une source differente pour l’authentification, comme (<http://httpd.apache.org/docs/2.2/mod/mod_authn_dbm.html>) ou (<http://httpd.apache.org/docs/2.2/mod/mod_authn_dbd.html>). La directive (<http://httpd.apache.org/docs/2.2/mod/mod_authn_file.html#authuserfile>) definit le chemin vers le fichier de mots de passe que nous venons de creer avec (<http://httpd.apache.org/docs/2.2/programs/htpasswd.html>). Si vous avez un grand nombre d’utilisateurs, il peut etre assez lent de rechercher dans un fichier texte pour authentifier l’utilisateur a chaque requete. Apache a egalement la possibilite de stocker les informations utilisateur dans des fichiers de base de donnees rapides. Le module (<http://httpd.apache.org/docs/2.2/mod/mod_authn_dbm.html>) fournit la directive (<http://httpd.apache.org/docs/2.2/mod/mod_authn_dbm.html#authdbmuserfile>). Ces fichiers peuvent etre crees et manipules avec le programme (<http://httpd.apache.org/docs/2.2/programs/dbmmanage.html>). De nombreux autres types d’options d’authentification sont disponibles via des modules tiers dans (http://modules.apache.org/). Enfin, la directive (<http://httpd.apache.org/docs/2.2/mod/core.html#require>) fournit la partie autorisation du processus en definissant l’utilisateur autorise a acceder a cette region du serveur. Dans la section suivante, nous discutons des differentes facons d’utiliser la directive (<http://httpd.apache.org/docs/2.2/mod/core.html#require>).
La directive (<http://httpd.apache.org/docs/2.2/mod/core.html#satisfy>) peut etre utilisee pour specifier que plusieurs criteres peuvent etre consideres lors de la decision d’accorder ou non l’admission a un utilisateur particulier. Satisfy peut prendre comme argument l’une des deux options - all ou any. Par defaut, on suppose que la valeur est all. Cela signifie que si plusieurs criteres sont specifies, alors tous doivent etre remplis pour que quelqu’un puisse entrer. Cependant, si defini sur any, alors plusieurs criteres peuvent etre specifies, mais si l’utilisateur satisfait l’un d’entre eux, il se verra accorder l’entree. Un exemple de ceci est l’utilisation du controle d’acces pour s’assurer que, bien qu’une ressource soit protegee par mot de passe depuis l’exterieur de votre reseau, tous les hotes a l’interieur du reseau se verront accorder un acces non authentifie a la ressource. Cela serait accompli en utilisant la directive Satisfy, comme montre ci-dessous.
<Directory /usr/local/apache/htdocs/sekrit> AuthType Basic AuthName intranet AuthUserFile /www/passwd/users AuthGroupFile /www/passwd/groups Require group customers Order allow,deny Allow from internal.com Satisfy any </Directory>
Les directives ci-dessus ne laissent entrer qu’une seule personne (specifiquement quelqu’un avec un nom d’utilisateur rbowen) dans le repertoire. Dans la plupart des cas, vous voudrez laisser entrer plus d’une personne. C’est la qu’intervient (<http://httpd.apache.org/docs/2.2/mod/mod_authz_groupfile.html#authgroupfile>). Si vous voulez laisser entrer plus d’une personne, vous devrez creer un fichier de groupe qui associe les noms de groupes a une liste d’utilisateurs dans ce groupe. Le format de ce fichier est assez simple, et vous pouvez le creer avec votre editeur prefere. Le contenu du fichier ressemblera a ceci :
GroupName: rbowen dpitts sungo rshersey
C’est simplement une liste des membres du groupe sur une longue ligne separee par des espaces. Pour ajouter un utilisateur a votre fichier de mots de passe existant, tapez :
htpasswd /usr/local/apache/passwd/passwords dpitts
Vous obtiendrez la meme reponse qu’avant, mais elle sera ajoutee au fichier existant, plutot que de creer un nouveau fichier. (C’est le -c qui cree un nouveau fichier de mots de passe). Maintenant, vous devez modifier votre fichier .htaccess ou votre bloc (<http://httpd.apache.org/docs/2.2/mod/core.html#directory>) pour qu’il ressemble a ce qui suit :
AuthType Basic AuthName "By Invitation Only" # Optional line: AuthBasicProvider file AuthUserFile /usr/local/apache/passwd/passwords AuthGroupFile /usr/local/apache/passwd/groups Require group GroupName
Maintenant, toute personne listee dans le groupe GroupName, et qui a une entree dans le fichier de mots de passe, sera autorisee a entrer, si elle tape le bon mot de passe. Il existe une autre facon de laisser entrer plusieurs utilisateurs qui est moins specifique. Plutot que de creer un fichier de groupe, vous pouvez simplement utiliser la directive suivante :
Require valid-user
Utiliser cela plutot que la ligne Require user rbowen permettra a quiconque est liste dans le fichier de mots de passe, et qui entre correctement son mot de passe, d’entrer.
Parce que le stockage des mots de passe dans des fichiers texte brut presente les problemes ci-dessus, vous pourriez souhaiter stocker vos mots de passe ailleurs, comme dans une base de donnees. (<http://httpd.apache.org/docs/2.2/mod/mod_authn_dbm.html>) et (<http://httpd.apache.org/docs/2.2/mod/mod_authn_dbd.html>) sont deux modules qui rendent cela possible. Plutot que de selectionner “(http://httpd.apache.org/docs/2.2/mod/mod_auth_basic.html#authbasicprovider) file, vous pouvez plutot choisir dbm ou dbd comme format de stockage. Pour selectionner un fichier dbd plutot qu’un fichier texte, par exemple :
<Directory /www/docs/private> AuthName "Private" AuthType Basic AuthBasicProvider dbm AuthDBMUserFile /www/passwords/passwd.dbm Require valid-user </Directory>
D’autres options sont disponibles. Consultez la documentation de (<http://httpd.apache.org/docs/2.2/mod/mod_authn_dbm.html>) pour plus de details.
(http://img.zemanta.com/zemified_e.png?x-id=e42f8804-6c89-45f2-a6df-f24978a5af3c)](http://www.zemanta.com/?px “Enhanced by Zemanta”)
Resume
Vous avez appris avec succes a securiser un site en utilisant Apache. Si vous rencontrez des problemes, verifiez les prerequis et assurez-vous que votre environnement Apache Web Server est correctement configure.
Articles connexes
- How to solve: Apache error .htaccess: ExpiresActive not allowed here, referrer: http://Technology.Bauzas.com/…
- How to solve: Apache error .htaccess: ForceType not allowed here
- How to solve: Apache error .htaccess: Option MultiViews not allowed here
- How to solve: Apache error .htaccess: RewriteEngine not allowed here