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
Output
sammy:$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:

/etc/apache2/sites-enabled/000-default.conf
<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:

/etc/apache2/sites-enabled/000-default.conf
<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:

/etc/apache2/sites-enabled/000-default.conf
<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”:

/etc/apache2/apache2.conf
. . .<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:

/var/www/html/.htaccess
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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.