Introduzione
Dopo aver creato un sito web potresti avere la necessità di limitare l'accesso ad alcune aree solo a utenti specifici. Se utilizzi un CMS o una applicazione web potrebbero esistere delle funzionalità già integrate per effettuare questa operazione, ma non tutti sanno che è possibile limitare l'accesso ad alcune cartelle direttamente dalla configurazione del web server Apache.
In questo tutorial vedremo come creare utenze a cui riservare l'accesso a specifiche directory di Apache su una distribuzione Linux CentOS 8, sia modificando la configurazione di Apache che utilizzando il file htaccess.
Per prima cosa dovrai connetterti al tuo server tramite una connessione SSH. Se non l’hai ancora fatto, ti consigliamo di seguire la nostra guida per
connetterti in sicurezza con il protocollo SSH. In caso di server locale puoi passare al punto successivo e aprire il terminale del tuo server.
Creare l'area riservata su Apache
Attraverso il terminale muoviti nella DocumentRoot di Apache con questo comando:
$ cd /var/www/html
Crea la cartella "reserved" e spostati all'interno di essa:
$ sudo mkdir reserved && cd reserved
Utilizza l'editor nano per creare il file index.html:
$ sudo nano index.html
Incolla dentro il file html questo contenuto di esempio per l'area riservata:
<html>
<head></head>
<body>
<h2>Reserved Area</h2>
<b>Welcome!</b>
</body>
</html>
Salva il file premendo CTRL+X, poi Y e infine ENTER.
A questo punto la nostra area riservata è pronta, ma è ancora visibile a tutti. Ora dovremo creare quindi l'utente che avrà il permesso di visualizzarla.
Creare il file htpasswd con i dati di autenticazione
Utilizza il comando htpasswd per creare le credenziali di autenticazione inserendo, al posto di USERNAME, il nome utente da utilizzare:
$ sudo htpasswd -c /etc/httpd/.htpasswd USERNAME
A questo punto ti verrà richiesto di inserire una password per l'utente da utilizzare per autenticarti.
N.B. Se vuoi aggiungere un nuovo utente al file basta inserire lo stesso comando senza il flag -c , in questo modo:
$ sudo htpasswd /etc/httpd/.htpasswd USERNAME
Limitare l'accesso alla cartella
A questo punto dovrai configurare Apache per limitare l'accesso alla cartella solo agli utenti inseriti nel file .htpasswd. Per fare ciò puoi modificare il file di configurazione di Apache oppure utilizzare il file .htaccess.
Modificare il file di configurazione di Apache
Modifica il file di configurazione di Apache utilizzando l'editor nano:
$ sudo nano /etc/httpd/conf/httpd.conf
Subito dopo il blocco di configurazione della DocumentRoot ( /var/www/html ) incolla il seguente contenuto:
<Directory "/var/www/html/reserved">
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/httpd/.htpasswd
Require valid-user
</Directory>
In maniera tale da ottenere questo risultato:
...
#
# Relax access to content within /var/www.
#
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
# Further relax access to the default document root:
<Directory "/var/www/html">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None
#
# Controls who can get stuff from this server.
#
Require all granted
</Directory>
<Directory "/var/www/html/reserved">
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/httpd/.htpasswd
Require valid-user
</Directory>
....
Salva il file premendo CTRL+X, poi Y e infine ENTER.
Infine riavvia il servizio di Apache per applicare le modifiche:
$ sudo systemctl restart httpd
Utilizzare il file .htaccess
In alternativa, modifica il file di configurazione di Apache utilizzando l'editor nano:
$ sudo nano /etc/httpd/conf/httpd.conf
Modifica la direttiva "AllowOverride", relativa al blocco <Directory> della DocumentRoot, impostandola su "All". In questo modo:
...
# Further relax access to the default document root:
<Directory "/var/www/html">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride All
#
# Controls who can get stuff from this server.
#
Require all granted
</Directory>
....
Salva il file premendo CTRL+X, poi Y e ENTER.
Infine riavvia il servizio di Apache per applicare le modifiche:
$ sudo systemctl restart httpd
Quindi posizionati nella cartella "reserved" e crea il file ".htaccess":
$ cd /var/www/html/reserved && sudo nano .htaccess
Incolla il seguente contenuto:
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/httpd/.htpasswd
Require valid-user
Salva il file premendo CTRL+X, poi Y e infine ENTER.
Verificare la funzionalità di autenticazione tramite password
Per verificare che la tua area riservata sia configurata correttamente naviga all'indirizzo internet corrispondente, ovvero http://IP.SERVER/reserved.
N.B. Sostituisci chiaramente "IP.SERVER"con l'IP del tuo server o l'indirizzo del tuo sito web.
Apparirà un messaggio che ti chiederà di immetere le credenziali create in precedenza.
In caso di credenziali corrette verrà mostrata l'area riservata:

Altrimenti verrà visualizzato un errore:
A questo punto avrai configurato correttamente l'area riservata del tuo sito web su CentOS 8 per restringere l'accesso ai file contenuti all'interno della directory "reserved" di Apache.