Introduzione
In questo articolo, dimostreremo come limitare l'accesso su un server Web Nginx in esecuzione su Ubuntu 17.10.
Prerequisiti
Prima di iniziare con questa guida, dovresti avere un utente non root con i privilegi sudo impostati sul tuo server. Segui questa guida: Configurazione Iniziale su Ubuntu 16.04-17.10
Se non lo hai già fatto, installa Nginx sul tuo server digitando da console:
sudo apt-get update
sudo apt-get install nginx
Creare il file password
Per iniziare, dobbiamo creare il file che conterrà i nostri dati di accesso: username e password. È possibile farlo utilizzando il tool OpenSSL che potrebbe già essere disponibile sul server. In alternativa, è possibile utilizzare il tool htpasswd incluso nel pacchetto.
Creare il file password utilizzando OpenSSL
Se hai OpenSSL installato sul tuo server, puoi creare un file password senza pacchetti aggiuntivi. Creeremo un file nascosto chiamato .htpasswd nella directory di configurazione /etc/nginx per memorizzare i nostri dati di accesso: username e password.
È possibile aggiungere un nome utente al file utilizzando questo comando. Usiamo grok come nostro nome utente, ma puoi usare qualsiasi nome desideri:
sudo sh -c "echo -n 'grok:' >> /etc/nginx/.htpasswd"
Successivamente, aggiungi la voce password crittografata per il nome utente scelto digitando:
sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"
Puoi ripetere questo processo per ulteriori utenti. Puoi vedere come gli utenti e le password crittografate sono memorizzati nel file digitando:
cat /etc/nginx/.htpasswd
Output
grok:$apr1$wI1/T0nB$jEKuTJHkTOOWkopnXqC1d1
Creare il file password utilizzando il tool di Apache
In alternativa a OpenSSL per crittografare le password per l'autenticazione di Nginx, è possibile utilizzare il tool htpasswd, che si trova nel pacchetto apache2-utils.
Per installare il pacchetto apache2-utils sul tuo server digita da console:
sudo apt-get update
sudo apt-get install apache2-utils
Ora hai accesso al comando htpasswd. Possiamo usarlo per creare un file password che Nginx può utilizzare per autenticare gli utenti. Creeremo un file nascosto per questo scopo chiamato .htpasswd all'interno della nostra directory di configurazione /etc/nginx.
La prima volta che usiamo questa utility, dobbiamo aggiungere l'opzione -c per creare il file specificato. Per questo esempio possiamo utilizzare lo stesso nome utente utilizzando precedentemente "grok" alla fine del comando per creare una nuova voce all'interno del file:
sudo htpasswd -c /etc/nginx/.htpasswd grok
Ti verrà chiesto di fornire e confermare una password per l'utente.
Se si desidera aggiungere altri utenti, non utilizzare nuovamente il parametro -c, per esempio:
sudo htpasswd /etc/nginx/.htpasswd nuovo_utente
Possiamo vedere il nome utente e la password crittografata per ogni record:
cat /etc/nginx/.htpasswd
Output
grok:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
nuovo_utente:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
Configurare Nginx con la password di autenticazione
Ora che abbiamo un file con i nostri utenti e password in un formato che Nginx può leggere, dobbiamo configurare Nginx per leggere questo file.
Inizia aprendo il file di configurazione del blocco del server a cui desideri aggiungere una restrizione. Per il nostro esempio, utilizzeremo il file di blocco del server predefinito installato tramite il pacchetto Nginx di Ubuntu:
Da console:
sudo nano /etc/nginx/sites-enabled/default
Cercare il seguente blocco:
...nginx
location / {
try_files $uri $uri/ =404;
}
...
Aggiungere le seguenti voci:
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
Il risultato finale dovrà essere il seguente:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
server_name localhost;
location / {
try_files $uri $uri/ =404;
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
Salvare e chiudere il file.
Riavviare Nginx:
sudo service nginx restart
La directory che hai specificato dovrebbe ora essere protetta da password.
Collegarsi al proprio indirizzo IP pubblico oppure in localhost:
http://localhost/
Dovresti ricevere una richiesta di inserimento di username e password.
La configurazione di Nginx con password di autenticazione su Ubuntu è terminata.