Inleiding

Bij het opzetten van een webserver zijn er vaak secties van de site waartoe u de toegang wilt beperken. Web applicaties bieden vaak hun eigen authenticatie en autorisatie methoden, maar de webserver zelf kan worden gebruikt om de toegang te beperken als deze ontoereikend of niet beschikbaar zijn.

In deze gids demonstreren we hoe u met een wachtwoord beveiligde onderdelen op een Apache webserver draait op Ubuntu 14.04.

Voorvereisten

Om te beginnen, heeft u toegang nodig tot een Ubuntu 14.04 server omgeving. U heeft een niet-root gebruiker nodig met sudo privileges om administratieve taken uit te voeren. Om te leren hoe u zo’n gebruiker aanmaakt, volgt u onze Ubuntu 14.04 initiële server installatie gids.

Installeer het Apache Hulppakket

Om het bestand aan te maken dat de wachtwoorden zal opslaan die nodig zijn om toegang te krijgen tot onze beperkte inhoud, zullen we een hulpprogramma gebruiken met de naam htpasswd. Dit is te vinden in het apache2-utils pakket in de Ubuntu repositories.

Update de lokale pakket cache en installeer het pakket door het typen van dit commando. We maken van de gelegenheid gebruik om ook de Apache2 server te pakken voor het geval die nog niet op de server is geïnstalleerd:

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

Maak het wachtwoordbestand

We hebben nu toegang tot het htpasswd commando. We kunnen dit gebruiken om een wachtwoordbestand te maken dat Apache kan gebruiken om gebruikers te authenticeren. We zullen een verborgen bestand voor dit doel maken, .htpasswd genaamd, in onze /etc/apache2 configuratie directory.

De eerste keer dat we dit hulpprogramma gebruiken, moeten we de -c optie toevoegen om het gespecificeerde bestand te maken. We specificeren een gebruikersnaam (sammy in dit voorbeeld) aan het eind van het commando om een nieuwe entry in het bestand te maken:

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

U wordt gevraagd om een wachtwoord voor de gebruiker in te voeren en te bevestigen.

Laat het -c-argument weg voor eventuele extra gebruikers die u wilt toevoegen:

  • sudo htpasswd /etc/apache2/.htpasswd another_user

Als we de inhoud van het bestand bekijken, zien we de gebruikersnaam en het gecodeerde wachtwoord voor elk record:

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

Configure Apache Password Authentication

Nu we een bestand hebben met onze gebruikers en wachtwoorden in een formaat dat Apache kan lezen, moeten we Apache configureren om dit bestand te controleren alvorens onze beveiligde inhoud te serveren. We kunnen dit op twee verschillende manieren doen.

De eerste optie is om de Apache configuratie te bewerken en onze wachtwoordbeveiliging aan het virtual host bestand toe te voegen. Dit zal over het algemeen betere prestaties geven omdat het de kosten van het lezen van gedistribueerde configuratiebestanden vermijdt. Als u deze mogelijkheid hebt, wordt deze methode aanbevolen.

Als u niet de mogelijkheid hebt om het virtuele host-bestand te wijzigen (of als u al .htaccess files for other purposes), you can restrict access using an.htaccessfile. Apache uses.htaccess`-bestanden gebruikt om bepaalde configuratie-items in te stellen binnen een bestand in een inhoudsdirectory. Het nadeel is dat Apache deze bestanden bij elk verzoek opnieuw moet lezen, wat de prestaties kan beïnvloeden.

Kies hieronder de optie die het beste bij uw behoeften past.

Toegangscontrole configureren binnen de definitie van de virtuele host

Begin met het openen van het virtuele host-bestand waaraan u een beperking wilt toevoegen. Voor ons voorbeeld zullen we het 000-default.conf bestand gebruiken dat de standaard virtuele host bevat die via Ubuntu’s apache pakket is geïnstalleerd:

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

Binnenin, met het commentaar gestript, zou het bestand er ongeveer zo uit moeten zien:

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

Authenticatie wordt gedaan op een per-directory basis. Om authenticatie in te stellen, moet je de directory die je wilt beperken targeten met een <Directory ___> blok. In ons voorbeeld, beperken we de gehele document root, maar u kunt deze lijst aanpassen om alleen een specifieke directory binnen de webruimte te beperken:

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

In dit directory blok, specificeren we dat we Basic authenticatie willen instellen. Kies voor de AuthName een realm naam die aan de gebruiker zal worden getoond wanneer om credentials wordt gevraagd. Gebruik de AuthUserFile directief om Apache te verwijzen naar het wachtwoordbestand dat we hebben gemaakt. Tenslotte hebben we een valid-user nodig om toegang te krijgen tot deze bron, wat betekent dat iedereen die zijn identiteit kan verifiëren met een wachtwoord toegang zal krijgen:

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

Bewaar en sluit het bestand als u klaar bent. Herstart Apache om uw wachtwoordbeleid te implementeren:

  • sudo service apache2 restart

De directory die u hebt opgegeven zou nu beveiligd moeten zijn met een wachtwoord.

Toegangscontrole configureren met .htaccess-bestanden

Als u in plaats daarvan wachtwoordbeveiliging wilt instellen met .htaccess-bestanden, moet u beginnen met het bewerken van het hoofdconfiguratiebestand van Apache om .htaccess-bestanden toe te staan:

  • sudo nano /etc/apache2/apache2.conf

Zoek het <Directory>-blok voor de /var/www-directory die de documentroot bevat. Zet .htaccess-verwerking aan door de AllowOverride-richtlijn in dat blok te veranderen van “Geen” in “Alle”:

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

Bewaar en sluit het bestand als je klaar bent.

Nogmaals moeten we een .htaccess-bestand toevoegen aan de directory die we willen beperken. In onze demonstratie beperken we de hele document root (de hele website) die is gebaseerd op /var/www/html, maar u kunt dit bestand in elke directory plaatsen waartoe u de toegang wilt beperken:

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

In dit bestand geven we aan dat we Basic-authenticatie willen instellen. Kies voor de AuthName een realm naam die aan de gebruiker zal worden getoond wanneer om credentials wordt gevraagd. Gebruik de AuthUserFile directief om Apache te verwijzen naar het wachtwoordbestand dat we hebben gemaakt. Tenslotte hebben we een valid-user nodig om toegang te krijgen tot deze bron, wat betekent dat iedereen die zijn identiteit kan verifiëren met een wachtwoord toegang zal krijgen:

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

Bewaar en sluit het bestand. Start de webserver opnieuw op om alle inhoud in of onder de directory met het .htaccess bestand met een wachtwoord te beveiligen:

  • sudo service apache2 restart

Bevestig de wachtwoordverificatie

Om te bevestigen dat uw inhoud beveiligd is, probeert u toegang te krijgen tot uw beveiligde inhoud in een webbrowser. U zou een gebruikersnaam en wachtwoord moeten krijgen dat er als volgt uitziet:

Als u de juiste gegevens invoert, krijgt u toegang tot de inhoud. Als u de verkeerde gegevens invoert of op “Annuleren” drukt, krijgt u de foutpagina “Niet geautoriseerd” te zien:

Conclusie

U zou nu alles moeten hebben wat u nodig hebt om de basisauthenticatie voor uw site in te stellen. Denk eraan dat wachtwoordbeveiliging moet worden gecombineerd met SSL-encryptie, zodat uw gegevens niet in platte tekst naar de server worden verzonden. Volg deze gids om te leren hoe u een zelfondertekend SSL-certificaat maakt om met Apache te gebruiken. Om te leren hoe u een commercieel certificaat installeert, volgt u deze handleiding.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.