Indledning
Når du opretter en webserver, er der ofte dele af webstedet, som du ønsker at begrænse adgangen til. Webapplikationer tilbyder ofte deres egne godkendelses- og autorisationsmetoder, men selve webserveren kan bruges til at begrænse adgangen, hvis disse er utilstrækkelige eller ikke er tilgængelige.
I denne vejledning demonstrerer vi, hvordan du kan beskytte aktiver med adgangskode på en Apache-webserver, der kører på Ubuntu 14.04.
Forudsætninger
For at komme i gang skal du have adgang til et Ubuntu 14.04-servermiljø. Du skal have en ikke-root-bruger med sudo
-privilegier for at kunne udføre administrative opgaver. Hvis du vil vide, hvordan du opretter en sådan bruger, kan du følge vores guide til installation af Ubuntu 14.04-serveren ved første opsætning.
Installer Apache Utilities-pakken
For at oprette den fil, der skal gemme de adgangskoder, der er nødvendige for at få adgang til vores begrænsede indhold, skal vi bruge et hjælpeprogram kaldet htpasswd
. Dette findes i pakken apache2-utils
i Ubuntu-repositorierne.
opdatér den lokale pakkecache og installer pakken ved at skrive denne kommando. Vi vil benytte lejligheden til også at få fat i Apache2-serveren, hvis den endnu ikke er installeret på serveren:
- sudo apt-get update
- sudo apt-get install apache2 apache2-utils
Opret adgangskodefilen
Vi har nu adgang til kommandoen htpasswd
. Vi kan bruge den til at oprette en adgangskodefil, som Apache kan bruge til at autentificere brugere. Vi opretter en skjult fil til dette formål kaldet .htpasswd
i vores /etc/apache2
-konfigurationsmappe.
Første gang vi bruger dette hjælpeprogram, skal vi tilføje -c
-indstillingen for at oprette den angivne fil. Vi angiver et brugernavn (sammy
i dette eksempel) i slutningen af kommandoen for at oprette en ny post i filen:
- sudo htpasswd -c /etc/apache2/.htpasswd sammy
Du vil blive bedt om at angive og bekræfte en adgangskode for brugeren.
Lad -c
-argumentet ude for eventuelle yderligere brugere, som du ønsker at tilføje:
- sudo htpasswd /etc/apache2/.htpasswd another_user
Hvis vi ser indholdet af filen, kan vi se brugernavnet og det krypterede kodeord for hver post:
- cat /etc/apache2/.htpasswd
Outputsammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
Konfigurer Apache Password Authentication
Nu da vi har en fil med vores brugere og adgangskoder i et format, som Apache kan læse, skal vi konfigurere Apache til at kontrollere denne fil, før vi serverer vores beskyttede indhold. Vi kan gøre dette på to forskellige måder.
Den første mulighed er at redigere Apache-konfigurationen og tilføje vores adgangskodebeskyttelse til den virtuelle værtsfil. Dette vil generelt give bedre ydeevne, fordi det undgår udgiften til at læse distribuerede konfigurationsfiler. Hvis du har denne mulighed, anbefales denne metode.
Hvis du ikke har mulighed for at ændre den virtuelle værtsfil (eller hvis du allerede bruger .htaccess files for other purposes), you can restrict access using an
.htaccessfile. Apache uses
.htaccess`-filer for at tillade, at visse konfigurationselementer kan indstilles i en fil i en indholdskatalog. Ulempen er, at Apache skal genlæse disse filer ved hver anmodning, der involverer mappen, hvilket kan påvirke ydeevnen.
Vælg den indstilling, der passer bedst til dine behov nedenfor.
Konfigurering af adgangskontrol inden for definitionen af den virtuelle vært
Begynd med at åbne den virtuelle værtsfil, som du ønsker at tilføje en begrænsning til. I vores eksempel bruger vi filen 000-default.conf
, der indeholder den virtuelle standardvært, der er installeret via Ubuntus apache-pakke:
- sudo nano /etc/apache2/sites-enabled/000-default.conf
Indenfor, med kommentarerne fjernet, skal filen se således ud:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost>
Autentificering sker på en basis pr. mappe. For at konfigurere godkendelsen skal du målrette den mappe, du ønsker at begrænse, med en <Directory ___>
-blok. I vores eksempel begrænser vi hele dokumentroden, men du kan ændre denne liste til kun at målrette en bestemt mappe inden for webområdet:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory "/var/www/html"> </Directory></VirtualHost>
Inden for denne mappeblok skal du angive, at vi ønsker at opsætte Basic
-godkendelse. For AuthName
skal du vælge et realm-navn, der skal vises for brugeren, når han eller hun bliver bedt om legitimationsoplysninger. Brug AuthUserFile
-direktivet til at pege Apache til den adgangskodefil, vi har oprettet. Endelig vil vi kræve en valid-user
for at få adgang til denne ressource, hvilket betyder, at alle, der kan bekræfte deres identitet med en adgangskode, får adgang:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory "/var/www/html"> AuthType Basic AuthName "Restricted Content" AuthUserFile /etc/apache2/.htpasswd Require valid-user </Directory></VirtualHost>
Spar og luk filen, når du er færdig. Genstart Apache for at implementere din adgangskodepolitik:
- sudo service apache2 restart
Den mappe, du har angivet, bør nu være beskyttet med adgangskode.
Konfigurering af adgangskontrol med .htaccess-filer
Hvis du i stedet ønsker at konfigurere adgangskodebeskyttelse ved hjælp af .htaccess
-filer, skal du begynde med at redigere Apaches hovedkonfigurationsfil for at tillade .htaccess
-filer:
- sudo nano /etc/apache2/apache2.conf
Find <Directory>
-blokken for /var/www
-mappen, som indeholder dokumentroden. Slå .htaccess
-behandling til ved at ændre AllowOverride
-direktivet i denne blok fra “None” til “All”:
. . .<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted</Directory>. . .
Spar og luk filen, når du er færdig.
Næst skal vi tilføje en .htaccess
-fil til den mappe, som vi ønsker at begrænse. I vores demonstration begrænser vi hele dokumentroden (hele webstedet), som er baseret på /var/www/html
, men du kan placere denne fil i en hvilken som helst mappe, du ønsker at begrænse adgangen til:
- sudo nano /var/www/html/.htaccess
Inden for denne fil skal du angive, at vi ønsker at opsætte Basic
-godkendelse. For AuthName
skal du vælge et realm-navn, der skal vises for brugeren, når han eller hun bliver bedt om legitimationsoplysninger. Brug AuthUserFile
-direktivet til at pege Apache til den adgangskodefil, vi har oprettet. Endelig kræver vi en valid-user
for at få adgang til denne ressource, hvilket betyder, at alle, der kan bekræfte deres identitet med en adgangskode, får adgang:
AuthType BasicAuthName "Restricted Content"AuthUserFile /etc/apache2/.htpasswdRequire valid-user
Save and close the file. Genstart webserveren for at beskytte alt indhold i eller under mappen med filen .htaccess
med adgangskode:
- sudo service apache2 restart
Bekræft adgangskodegodkendelsen
For at bekræfte, at dit indhold er beskyttet, skal du prøve at få adgang til dit begrænsede indhold i en webbrowser. Du bør få vist en prompt med et brugernavn og en adgangskode, der ser således ud:
Hvis du indtaster de korrekte legitimationsoplysninger, får du adgang til indholdet. Hvis du indtaster de forkerte legitimationsoplysninger eller trykker på “Annuller”, vises fejlsiden “Uautoriseret”:
Konklusion
Du burde nu have alt, hvad du behøver for at konfigurere grundlæggende godkendelse til dit websted. Husk, at adgangskodebeskyttelse bør kombineres med SSL-kryptering, så dine legitimationsoplysninger ikke sendes til serveren i ren tekst. Følg denne vejledning for at lære, hvordan du opretter et selvsigneret SSL-certifikat til brug med Apache. Hvis du vil vide, hvordan du installerer et kommercielt certifikat, skal du følge denne vejledning.