Tutorial > Come proteggere le cartelle tramite password con Apache su CentOS 8

Come proteggere le cartelle tramite password con Apache su CentOS 8

Pubblicato il: 25 febbraio 2021

Apache CentOS Hosting Sicurezza

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:

Area Riservata

Altrimenti verrà visualizzato un errore:

Accesso non autorizzatoA 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.