Introduktion

När du installerar en webbserver finns det ofta delar av webbplatsen som du vill begränsa åtkomsten till. Webbapplikationer tillhandahåller ofta sina egna autentiserings- och auktoriseringsmetoder, men själva webbservern kan användas för att begränsa åtkomsten om dessa är otillräckliga eller otillgängliga.

I den här guiden visar vi hur du skyddar tillgångar med lösenord på en Apache-webbserver som körs på Ubuntu 14.04.

Förutsättningar

För att komma igång måste du ha tillgång till en servermiljö med Ubuntu 14.04. Du behöver en icke-rootanvändare med sudo-privilegier för att kunna utföra administrativa uppgifter. Om du vill veta hur du skapar en sådan användare kan du följa vår guide för Ubuntu 14.04 initial serverinstallation.

Installera Apache Utilities Package

För att skapa filen som kommer att lagra de lösenord som behövs för att få tillgång till vårt begränsade innehåll kommer vi att använda ett verktyg som heter htpasswd. Detta finns i paketet apache2-utils i Ubuntus arkiv.

Uppdatera den lokala paketcachen och installera paketet genom att skriva det här kommandot. Vi tar tillfället i akt att även ta med Apache2-servern om den ännu inte är installerad på servern:

  • sudo apt-get update
  • sudo apt-get install apache2 apache2-utils

Skapa lösenordsfilen

Vi har nu tillgång till kommandot htpasswd. Vi kan använda detta för att skapa en lösenordsfil som Apache kan använda för att autentisera användare. Vi kommer att skapa en dold fil för detta ändamål som heter .htpasswd i vår /etc/apache2 konfigurationskatalog.

Första gången vi använder det här verktyget måste vi lägga till alternativet -c för att skapa den angivna filen. Vi anger ett användarnamn (sammy i det här exemplet) i slutet av kommandot för att skapa en ny post i filen:

  • sudo htpasswd -c /etc/apache2/.htpasswd sammy

Du kommer att bli ombedd att ange och bekräfta ett lösenord för användaren.

Lämna bort argumentet -c för eventuella ytterligare användare som du vill lägga till:

  • sudo htpasswd /etc/apache2/.htpasswd another_user

Om vi tittar på innehållet i filen kan vi se användarnamnet och det krypterade lösenordet för varje post:

  • cat /etc/apache2/.htpasswd
Output
sammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

Configure Apache Password Authentication

Nu när vi har en fil med våra användare och lösenord i ett format som Apache kan läsa måste vi konfigurera Apache så att den kontrollerar filen innan vi serverar vårt skyddade innehåll. Vi kan göra detta på två olika sätt.

Det första alternativet är att redigera Apaches konfiguration och lägga till vårt lösenordsskydd i filen för den virtuella värden. Detta ger i allmänhet bättre prestanda eftersom man slipper utgifterna för att läsa distribuerade konfigurationsfiler. Om du har detta alternativ rekommenderas denna metod.

Om du inte har möjlighet att ändra den virtuella värdfilen (eller om du redan använder .htaccess files for other purposes), you can restrict access using an.htaccessfile. Apache uses.htaccess`-filer för att tillåta att vissa konfigurationsobjekt ställs in i en fil i en innehållskatalog. Nackdelen är att Apache måste läsa om dessa filer vid varje begäran som involverar katalogen, vilket kan påverka prestandan.

Välj det alternativ som bäst passar dina behov nedan.

Konfigurera åtkomstkontroll inom definitionen för virtuell värd

Begynna med att öppna filen för den virtuella värd som du vill lägga till en begränsning för. I vårt exempel använder vi filen 000-default.conf som innehåller den virtuella värddatorn som installerats som standard via Ubuntus apache-paket:

  • sudo nano /etc/apache2/sites-enabled/000-default.conf

Invändigt, med kommentarerna borttagna, bör filen se ut ungefär så här:

/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>

Autentisering sker per katalog. För att ställa in autentisering måste du rikta in dig på den katalog du vill begränsa med ett <Directory ___>-block. I vårt exempel begränsar vi hela dokumentroten, men du kan ändra den här listningen för att bara rikta in dig på en specifik katalog i webbutrymmet:

/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>

Inom det här katalogblocket anger du att vi vill ställa in Basic-autentisering. För AuthName väljer du ett realm-namn som kommer att visas för användaren när han eller hon uppmanas att ange autentiseringsuppgifter. Använd AuthUserFile-direktivet för att peka Apache till den lösenordsfil som vi skapade. Slutligen kräver vi en valid-user för att få tillgång till den här resursen, vilket innebär att alla som kan verifiera sin identitet med ett lösenord kommer att tillåtas komma in:

/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>

Spara och stäng filen när du är klar. Starta om Apache för att implementera din lösenordspolicy:

  • sudo service apache2 restart

Den katalog du angav bör nu vara lösenordsskyddad.

Konfigurera åtkomstkontroll med .htaccess-filer

Om du vill konfigurera lösenordsskydd med hjälp av .htaccess-filer i stället bör du börja med att redigera Apaches huvudkonfigurationsfil så att .htaccess-filer tillåts:

  • sudo nano /etc/apache2/apache2.conf

Leta upp <Directory>-blocket för /var/www-katalogen som innehåller dokumentroten. Aktivera .htaccess-bearbetning genom att ändra AllowOverride-direktivet i det blocket från ”None” till ”All”:

/etc/apache2/apache2.conf
. . .<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted</Directory>. . .

Spara och stäng filen när du är klar.

Nästan måste vi lägga till en .htaccess-fil i katalogen som vi vill begränsa. I vår demonstration begränsar vi hela dokumentroten (hela webbplatsen) som är baserad på /var/www/html, men du kan placera den här filen i vilken katalog som helst som du vill begränsa åtkomsten till:

  • sudo nano /var/www/html/.htaccess

I den här filen anger du att vi vill ställa in Basic autentisering. För AuthName väljer du ett realm-namn som kommer att visas för användaren när denne uppmanas att ange autentiseringsuppgifter. Använd AuthUserFile-direktivet för att peka Apache till den lösenordsfil som vi skapade. Slutligen kräver vi en valid-user för att få tillgång till den här resursen, vilket innebär att alla som kan verifiera sin identitet med ett lösenord får komma in:

/var/www/html/.htaccess
AuthType BasicAuthName "Restricted Content"AuthUserFile /etc/apache2/.htpasswdRequire valid-user

Spara och stäng filen. Starta om webbservern för att lösenordsskydda allt innehåll i eller under katalogen med .htaccess-filen:

  • sudo service apache2 restart

Bekräfta lösenordsautentiseringen

För att bekräfta att ditt innehåll är skyddat försöker du komma åt ditt begränsade innehåll i en webbläsare. Du bör få en fråga om användarnamn och lösenord som ser ut så här:

Om du anger rätt autentiseringsuppgifter får du tillgång till innehållet. Om du anger fel autentiseringsuppgifter eller trycker på ”Cancel” visas felsidan ”Unauthorized” (obehörig):

Slutsats

Du bör nu ha allt du behöver för att konfigurera grundläggande autentisering för din webbplats. Tänk på att lösenordsskydd bör kombineras med SSL-kryptering så att dina autentiseringsuppgifter inte skickas till servern i klartext. Om du vill veta hur du skapar ett självsignerat SSL-certifikat för användning med Apache följer du den här guiden. Om du vill veta hur du installerar ett kommersiellt certifikat följer du den här guiden.

Lämna ett svar

Din e-postadress kommer inte publiceras.