Come prendere il controllo della sicurezza del tuo MongoDB

**Gli hacker stanno diventando sempre più sofisticati e sanno come sfruttare le vulnerabilità. Se hai dati sensibili nel tuo database MongoDB, è fondamentale prendere seriamente la sicurezza. Ma come fare? Non preoccuparti! Questo tutorial ti copre!

In questo tutorial imparerai a proteggere i tuoi database MongoDB e respingere gli hacker configurando misure di sicurezza.

Continua a leggere e inizia a prendere il controllo della sicurezza del tuo MongoDB!

Prerequisiti

  • Questo tutorial sarà una dimostrazione pratica. Per seguirla, assicurati di avere quanto segue:
  • A non-root user with sudo privileges.

Creazione di un Utente Amministrativo Dedicato

MongoDB non ha un sistema di autenticazione integrato. Per impostazione predefinita, chiunque abbia accesso al database ha privilegi amministrativi completi, troppo pericoloso! Come proteggere il tuo database? Creerai un utente con privilegi amministrativi e bloccherai i database per quell’utente amministrativo.**

Questa configurazione ti consente di fornire un unico punto di accesso utente con privilegi amministrativi, limitando al contempo ciò che ogni utente può fare all’interno del database. Ad esempio, gli sviluppatori dovrebbero avere solo accesso in lettura ai database, mentre gli amministratori possono creare e modificare i dati.

1. Apri il tuo terminale e esegui il comando mongo senza argomenti. Questo comando ti consente di connetterti alla tua shell MongoDB come utente admin predefinito.

Questo utente admin è potente in quanto ha pieno accesso in lettura/scrittura a tutti i database sul server, ed è meglio evitare di utilizzare questo utente per il lavoro quotidiano.

mongo

Riceverai un avviso che dice Il controllo degli accessi non è abilitato…, come mostrato di seguito.

Questo avviso indica che chiunque possa accedere al server MongoDB può eseguire le azioni che desidera con i database. Queste azioni includono ma non si limitano a eliminare, cancellare, aggiornare i database.

Questo avviso appare perché non hai ancora abilitato il controllo degli accessi. Non preoccuparti, per ora. Imparerai come abilitare il controllo degli accessi nella sezione seguente.

Connecting to your MongoDB shell

2. Successivamente, esegui il comando show dbs per mostrare tutti i database sul server, inclusi i database admin che un utente normale non dovrebbe vedere.

show dbs
Showing all databases on the server

3. Esegui il comando use admin di seguito per passare al database admin poiché il tuo focus è sulla creazione di un utente amministrativo dedicato. Questo comando cambia il contesto del database attuale per utilizzare il database admin, come mostrato di seguito.

MongoDB utilizza il database admin per memorizzare le regole di controllo degli accessi e fornire autenticazione integrata, nomi utente e password per gli utenti e i loro ruoli. Non puoi eliminare o rinominare il database admin perché è essenziale per la funzionalità del database.

use admin
Switching to the admin database

4. Ora, copia e incolla il codice di seguito nella shell mongo e premi Invio. Questo codice crea un utente chiamato AdminATA, con una password di LDWbPf6Fy9Ezs3Mv, ma puoi utilizzare credenziali diverse se preferisci.

Questo nuovo utente ha accesso in lettura/scrittura (readWriteAnyDatabase) a tutti i database e accesso amministrativo a tutte le raccolte. Ma questo utente non ha privilegi per eliminare/eliminare database e non può eliminare o modificare i privilegi di altri utenti.

Dopo aver eseguito il comando e aver ricevuto un errore, controlla nuovamente il tuo codice e riprova.

# Il metodo db.createUser() crea un nuovo utente nel database corrente, con i privilegi specificati dai ruoli.
db.createUser(
{
# Specificando il nome utente AdminATA, ma puoi inserire qualsiasi nome utente desideri.
user: "AdminATA",
# Il metodo passwordPrompt() è una funzione di utilità universale 
# che indica alla shell di MongoDB di chiederti una password per l'utente AdminATA.
pwd: passwordPrompt(),
# Specificando i ruoli che vuoi assegnare al tuo utente AdminATA.
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)

5. Fornisci una password sicura quando richiesto, come mostrato di seguito, e premi Invio.

Providing a secure password

Qui sotto, puoi vedere un messaggio Utente aggiunto con successo. Questo output conferma che hai creato con successo un utente con privilegi amministrativi e li hai limitati ai minimi privilegi necessari.

A questo punto, hai già un utente amministrativo chiamato AdminATA che può fare tutto ciò di cui hai bisogno nel database senza concedere l’accesso a tutti.

Verifying Successful Admin User Creation in MongoDB

6. Infine, esegui il comando exit per uscire dalla shell di mongo.

exit
Leaving the mongo shell

Aggiunta di sicurezza abilitando l’autenticazione

Ora che hai un utente amministrativo, aggiungerai un altro livello di sicurezza abilitando l’autenticazione. Farlo permette l’accesso al database solo agli utenti con le credenziali corrette.

L’autenticazione si riferisce al processo di convalida di una connessione, di solito fornendo un nome utente e una password o usando un token di autenticazione. L’autenticazione garantisce che tu sia chi dici di essere e non un impostore che cerca di accedere alle risorse.

1. Abilita l’autenticazione modificando il file di configurazione di MongoDB con quanto segue e salva le modifiche:

  • Apri il file /etc/mongod.conf nel tuo editor di testo preferito. Il file /etc/mongod.conf contiene la configurazione del tuo cluster MongoDB.
  • Cerca e decommenta la direttiva #security rimuovendo il simbolo # di fronte alla direttiva, come mostrato di seguito. Questa direttiva dice a MongoDB di cercare l’impostazione di sicurezza nel file di configurazione.
  • Aggiungi una nuova riga sotto la direttiva security che dica authorization: enabled. Nota che la linea authorization: enabled è indentata (ha due spazi all’inizio), come mostrato di seguito.
Adding the authorization parameter

2. Successivamente, esegui il seguente comando systemctl per riavviare il server MongoDB affinché le modifiche abbiano effetto.

sudo systemctl restart mongod

3. Infine, esegui il comando sottostante per visualizzare lo stato del servizio MongoDB.

sudo systemctl status mongod

Di seguito, puoi vedere una linea che dice Attivo: attivo (in esecuzione) in testo verde, che indica che il tuo server MongoDB è in esecuzione e pronto ad accettare connessioni.

Viewing MongoDB Service Status

Test se l’autenticazione funziona

Hai appena abilitato l’autenticazione, ma come puoi sapere se funziona? Effettuerai l’accesso con l’utente amministrativo per testare ed assicurarti che l’autenticazione funzioni visualizzando i database.

1. Esegui i seguenti comandi per accedere alla shell mongo come hai fatto nella sezione “Creazione di un utente amministrativo dedicato” (passaggio uno).

mongo

Come puoi vedere di seguito, non ricevi più l’avviso Il controllo degli accessi non è abilitato… riguardo l’abilitazione dell’autenticazione. Invece, otterrai un messaggio che ti indica la versione del tuo server MongoDB e della shell MongoDB.

Connecting to the MongoDB Shell

2. Successivamente, esegui di nuovo il comando show dbs per verificare se puoi ancora accedere al database.

show dbs

Il comando dovrebbe mostrarti tutti i database, anche il database admin. Ma come vedi di seguito, non appare nulla. Perché? La visualizzazione dell’elenco dei database è un privilegio riservato solo agli utenti amministrativi.

Non hai autenticato la tua shell mongo per utilizzare il ruolo Admin, quindi non sei autorizzato a visualizzare l’elenco dei database.

Listing All Databases (empty)

Con l’autenticazione abilitata, la connessione fallirà se qualcuno tenta di accedere al database utilizzando una stringa di connessione che non contiene le credenziali corrette.

Autenticare le stringhe di connessione è una parte fondamentale della sicurezza di MongoDB, e dovresti implementare l’autenticazione a tutti i livelli dell’applicazione. Tutte le connessioni a MongoDB devono utilizzare una stringa di autenticazione composta da credenziali. Queste credenziali includono il nome utente e la password corretti.

3. Esegui il comando exit per uscire dalla shell di MongoDB.

exit

4. Ora, esegui il comando di seguito per accedere alla shell di MongoDB con il nome utente (-u) e la password (-p) del nuovo utente amministrativo creato. Sostituisci AdminATA con il nome utente che hai creato nella sezione “Creazione di un Utente Amministrativo Dedicato” (passo quattro).

Il parametro --authenticationDatabase indica alla shell di MongoDB di autenticarsi contro il database admin.

mongo -u AdminATA -p --authenticationDatabase admin

5. Fornisci la password del tuo utente amministrativo quando richiesto.

Providing administrative password
logging into the MongoDB shell as an administrator

6. Infine, esegui nuovamente il comando show dbs per vedere se riesci a visualizzare tutti i database.

show dbs

Questa volta, come puoi vedere di seguito, l’elenco dei database viene visualizzato poiché sei un utente amministratore.

Listing all databases as admin user

Conclusione

In questo tutorial, hai imparato come connetterti per creare un utente amministrativo e abilitare l’autenticazione. Hai imparato a prendere il controllo della sicurezza di MongoDB e a imporre restrizioni su chi può accedere ai database sul tuo server.

A questo punto, decidi tu chi può accedere a cosa. Quindi, qual è il prossimo passo per te? Forse imparare come utilizzare un contenitore MongoDB in modo sicuro?

Source:
https://adamtheautomator.com/mongodb-security/