Comment restreindre l'accès à une ressource à l'aide d'Apache sur Linux

Comment restreindre l'accès à une ressource à l'aide d'Apache sur Linux

La restriction de l'accès à une ressource est souvent requise lors de l'utilisation du Web. Sur des applications Web complexes, cela est souvent implémenté à l'aide d'un système de connexion qui peut être plus ou moins sophistiqué. Si nos exigences sont cependant assez basiques, nous pouvons utiliser le système d'authentification fourni par le serveur Web Apache. Dans ce tutoriel, nous verrons comment pouvons-nous le faire.

Dans ce tutoriel, vous apprendrez:

  • Comment restreindre l'accès à une page Web à l'aide du serveur Web Apache
  • Comment stocker les mots de passe utilisateur dans des fichiers texte brut
  • Comment stocker les mots de passe utilisateur dans une base de données
  • Comment permettre l'accès à plusieurs utilisateurs
Comment restreindre l'accès à une ressource à l'aide d'Apache sur Linux

Exigences et conventions logicielles utilisées

Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Indépendant de la distribution
Logiciel Le serveur Web Apache
Autre Privilèges racine pour modifier les fichiers de configuration
Conventions # - Exige que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier

Configuration de base



La configuration la plus élémentaire implique les deux étapes: la création d'un fichier de mot de passe Lorsque les mots de passe des utilisateurs seront stockés et l'utilisation de directives spécifiques dans le fichier de configuration principal du serveur (l'emplacement de ce fichier dépend de la distribution que nous utilisons: sur Fedora et la famille de distribution Red Hat, le fichier est / etc / httpd / http / confre, Pendant que sur la distribution basée à Debian, par exemple, est / etc / apache2 / apache2.confli), dans un fichier de configuration VirtualHost, ou à l'intérieur d'un .htaccess fichier placé dans le répertoire approprié.

Si nous décidons d'utiliser cette dernière option, nous devons être sûrs du Authonfig La directive peut être remplacée. En supposant le .htaccess le fichier est à l'intérieur du / var / www / html / restreint Répertoire, nous écrivions:

 Autorride Authconfig  

Création du fichier de mot de passe

La création d'un fichier de mot de passe est vraiment facile: tout ce que nous avons à faire est d'utiliser le htpasswd utilitaire, qui est généralement livré avec l'installation d'Apache. Il est très important que le fichier contenant les mots de passe des utilisateurs soit placé dans un répertoire où il ne peut pas être accessible par le public. Dans ce tutoriel, nous créerons le fichier à l'intérieur du / etc / httpd annuaire.

Supposons que nous voulons permettre l'accès au egdoc utilisateur. Pour créer son mot de passe, nous exécutrions:

$ sudo htpasswd -c / etc / httpd / mot de passe egdoc 

Le htpasswd L'utilitaire est utilisé pour gérer les mots de passe des utilisateurs et les stocker dans des fichiers en texte brut. Dans ce cas, nous avons invoqué l'utilitaire et l'avons utilisé avec le -c Option: Ceci est nécessaire pour créer le fichier à partir de zéro. Si le fichier existe déjà, il est tronqué, donc lorsque nous devons y ajouter de nouvelles entrées, l'option doit être omise.

Nous avons fourni les deux arguments: le premier est le chemin d'accès du fichier de mot de passe, le second est le nom de l'utilisateur pour lequel nous voulons créer un mot de passe pour. La commande nous invitera à saisir un mot de passe pour l'utilisateur et à le confirmer:

Nouveau mot de passe: ré-typer un nouveau mot de passe: 

Nous ne pourrons pas voir le mot de passe alors que nous l'entourons. Si nous jetons maintenant un coup d'œil à l'intérieur du fichier généré, nous pouvons voir qu'il a été stocké après avoir été haché avec le format de hachage Apache APR1:

Egdoc: $ APR1 $ GEVSWC3P $ ZHR / MQMMN6G7TJ8FH8RCY / 

Configuration du serveur



Une fois notre fichier de mot de passe prêt, nous devons créer la bonne configuration pour le serveur Web Apache. Par exemple, supposons que nous voulons restreindre l'accès au / var / www / restreint répertoire qui est le Document de document d'un VirtualHost configuré comme suit:

 Test de nom de serveur.LAN DocumentRoot / Var / www / AuthType restreint Authname Basic Authname "!"Fichier AuthBasicProvider AuthUserFile / etc / httpd / mot de passe nécessite l'utilisateur egdoc   

Examinons les directives que nous avons utilisées dans cette configuration.

Tout d'abord, nous avons utilisé Authentification. Cette directive est utilisée pour sélectionner le type d'authentification que nous souhaitons utiliser. Dans ce cas, nous choisissons «Basic» comme valeur: cette fonctionnalité est fournie par le mod_auth_basic module. D'autres valeurs possibles sont Aucun, Digérer (fourni par le module mod_auth_digest), et Former, qui est fourni par le module mod_auth_form.

Le Authbasicprovider La directive est utilisée pour déclarer quel fournisseur doit être utilisé pour l'authentification. Dans ce cas, nous aurions pu l'omettre, puisque déposer est la valeur par défaut, fournie par le mod_authn_file module.

Avec le Autoriser directive, nous configurons un royaume. Cette configuration a essentiellement deux objectifs: comme une première chose, le message que nous fournissons ici, apparaîtra comme un message sur l'invite fournie par le serveur, par exemple:

Le site dit: «Zone restreinte!"

Le «royaume» est également utilisé par le client, pour décider quel mot de passe il doit envoyer au serveur. Si l'utilisateur est déjà authentifié, il pourra accéder à toutes les ressources dans le même domaine, sans avoir à se connecter à nouveau.

Le AuthUserfile La directive est utilisée pour pointer vers le fichier texte brut hébergeant le mot de passe des utilisateurs que nous avons créé auparavant avec le htpasswd utilitaire.

Enfin, nous avons le Exiger directif. Avec cette directive, nous pouvons restreindre l'accès à une ressource sur la base de certains paramètres comme l'adresse IP du client, ou, comme dans ce cas, l'authentification en tant qu'utilisateur spécifique.

Le / var / www / test Le répertoire contient un fichier d'index, indice.html, où nous venons de placer «l'accès accordé!" message. Une fois notre configuration prête, nous pouvons redémarrer le serveur:

$ sudo systemctl redémarrer httpd 

Lorsque nous essayons d'accéder à la page, nous serons invités à saisir un nom de connexion et un mot de passe:

L'invite de connexion Apache

Si nous fournissons les bonnes informations d'identification, l'accès à la page sera accordé:

L'accès Apache accordé

Utilisation de groupes

Dans la grande majorité des cas, nous voulons permettre à plusieurs utilisateurs d'accéder à une ressource. Dans ces cas, nous voulons utiliser un dossier de groupe où nous associons le nom d'un groupe à une liste séparée de l'espace de ses membres. Supposons que le chemin de notre fichier soit / etc / httpd / groupes; Son contenu serait:

ALLIMESSEURS: Egdoc Tim Rob 


Nous avons déclaré que les utilisateurs d'Egdoc, Tim et Rob sont membres du Permis Groupe: Pour chacun d'eux, une entrée dans le fichier de mot de passe doit être ajoutée. À ce stade, nous devons modifier la configuration de notre serveur et l'adapter à la nouvelle configuration:

 Test de nom de serveur.LAN DocumentRoot / Var / www / AuthType restreint Authname Basic Authname "!"Fichier AuthBasicProvider AuthUserFile / etc / httpd / mot de passe AuthGroupFile / etc / httpd / Les groupes nécessitent un groupe autorisé   

Nous avons introduit une nouvelle directive, Authgroupfile, et lui a transmis le chemin du fichier où les groupes sont mappés aux utilisateurs. Nous avons également changé la valeur du Exiger directif; Maintenant, pour être autorisé à accéder à la ressource, un utilisateur doit faire partie du Permis groupe. Pour rendre les modifications efficaces, nous devons redémarrer le serveur.

Stockage des mots de passe dans une base de données

Dans l'exemple précédent, nous avons vu comment stocker les mots de passe des utilisateurs dans un fichier texte simple et brut. C'est une solution parfaite viable lorsque nous n'avons pas beaucoup d'utilisateurs. Lorsque la liste des utilisateurs devient assez longue, il pourrait plutôt être assez peu pratique de scanner l'ensemble du fichier de mot de passe pour chaque demande. Dans des cas comme celui-ci, nous voulons peut-être stocker les mots de passe dans une base de données à la place.

Une option consiste à créer un Dbm déposer. Nous pouvons accomplir la tâche en utilisant le htdbm utilitaire. Pour générer un dbm Fichier dans la même position que nous avons utilisée dans l'exemple précédent, nous pouvons exécuter:

$ sudo htdbm -cb / etc / httpd / passwd / mot de passe egdoc nouveau mot de passe: re-type nouveau mot de passe: base de données passwd / mot de passe créé. 


Comme vous pouvez le voir, la syntaxe est très similaire à celle utilisée pour htpasswd. Tout comme avant, nous avons lancé la commande en utilisant le -c option, pour créer le fichier ou le tronquer s'il existe déjà. Dans ce cas, nous avons également utilisé le -B option pour utiliser le bcrypt algorithme pour le cryptage de mot de passe. Puisque nous avons changé la façon dont les mots de passe sont stockés, nous devons également modifier la configuration du serveur:

 Test de nom de serveur.LAN DocumentRoot / Var / www / AuthType restreint Authname Basic Authname "!"AuthbasicProvider dbm authdbmuserfile / etc / httpd / passwd / mot de passe exiger l'utilisateur egdoc   

Ce que nous avons changé ci-dessus, c'est la valeur que nous avons transmise au Authbasicprovider directive, qui est maintenant dbm. Nous avons également substitué le AuthUserfile directive avec Authdbmuserfile, fournissant comme avant, le chemin du fichier où le mot de passe est stocké. Pour que cette configuration fonctionne, nous devons avoir le mod_authn_dmb module activé.

Conclusion

Dans ce tutoriel, nous avons vu comment restreindre l'accès à une ressource et implémenter un système d'authentification de connexion simple à l'aide du serveur Web Apache. Nous avons vu comment stocker des mots de passe dans des fichiers texte brut ou dans un dbm format de base de données. Nous avons également vu comment permettre l'accès à plusieurs utilisateurs à l'aide d'un Dossier de groupe Et quelles directives devraient être utilisées pour atteindre notre objectif.

Tutoriels Linux connexes:

  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Choses à installer sur Ubuntu 20.04
  • Ubuntu 20.04 WordPress avec installation Apache
  • Tutoriel SQLite Linux pour les débutants
  • Ampache Raspberry Pi Installation
  • Comment migrer Apache vers Nginx en convertissant les objets VirtualHosts en…
  • Masterring Bash Script Loops
  • Installez MySQL sur Ubuntu 20.04 LTS Linux
  • Comment installer MySQL sur Almalinux
  • Tutoriel LFTP sur Linux avec des exemples