Hoe u de controle over de beveiliging van uw MongoDB kunt overnemen

Hackers worden steeds geavanceerder en weten hoe ze kwetsbaarheden kunnen misbruiken. Als je gevoelige gegevens in je MongoDB-database hebt, is het cruciaal om serieus met beveiliging om te gaan. Maar hoe? Maak je geen zorgen! Deze tutorial heeft je gedekt!

In deze tutorial leer je hoe je je MongoDB-databases kunt beschermen en hackers kunt afweren door beveiligingsmaatregelen in te stellen.

Lees verder en begin controle te krijgen over de beveiliging van je MongoDB!

Vereisten

  • Deze tutorial zal een praktische demonstratie zijn. Zorg ervoor dat je het volgende hebt om mee te doen:
  • A non-root user with sudo privileges.

Creëer een toegewijde beheerdersgebruiker

MongoDB heeft geen ingebouwd authenticatiesysteem. Standaard heeft iedereen met toegang tot de database volledige beheerprivileges, wat te gevaarlijk is! Hoe beveilig je je database? Je zult een gebruiker met beheerdersrechten aanmaken en de databases vergrendelen voor die beheerdersgebruiker.

Deze opstelling stelt u in staat om een enkel toegangspunt voor gebruikers met beheerdersrechten te bieden, terwijl wordt beperkt wat elke gebruiker binnen de database kan doen. Bijvoorbeeld, ontwikkelaars moeten alleen-lezen toegang hebben tot databases, terwijl beheerders gegevens kunnen maken en bewerken.

1. Open uw terminal en voer de onderstaande mongo opdracht uit zonder enige argumenten. Met deze opdracht kunt u verbinding maken met uw MongoDB-shell als de standaard beheerdersgebruiker.

Deze beheerdersgebruiker is krachtig omdat hij volledige lees/schrijftoegang heeft tot alle databases op de server, en het is het beste om deze gebruiker niet te gebruiken voor dagelijkse werkzaamheden.

mongo

U krijgt een waarschuwing die zegt Toegangscontrole is niet ingeschakeld…, zoals hieronder weergegeven.

Deze waarschuwing geeft aan dat iedereen die toegang heeft tot de MongoDB-server de acties kan uitvoeren die ze willen met de databases. Deze acties omvatten onder andere het verwijderen, laten vallen en bijwerken van databases.

Deze waarschuwing verschijnt omdat u de toegangscontrole nog niet hebt ingeschakeld. Maak u er nu geen zorgen over. U leert hoe u toegangscontrole kunt inschakelen in de volgende sectie.

Connecting to your MongoDB shell

2. Voer vervolgens de show dbs opdracht uit om alle databases op de server weer te geven, inclusief de admin databases die een normale gebruiker niet zou moeten zien.

show dbs
Showing all databases on the server

3. Voer de onderstaande use admin opdracht uit om over te schakelen naar de admin database, aangezien je je richt op het maken van een toegewijde beheerdersgebruiker. Deze opdracht wijzigt de context van je huidige database om de admin database te gebruiken, zoals hieronder wordt weergegeven.

MongoDB gebruikt de admin database om toegangscontrole regels op te slaan en ingebouwde authenticatie, gebruikersnamen en wachtwoorden te verstrekken voor gebruikers en hun rollen. Je kunt de admin database niet verwijderen of hernoemen omdat deze essentieel is voor de functionaliteit van de database.

use admin
Switching to the admin database

4. Kopieer en plak nu de onderstaande code naar de mongo shell en druk op Enter. Deze code maakt een gebruiker genaamd AdminATA aan, met een wachtwoord van LDWbPf6Fy9Ezs3Mv, maar je kunt verschillende referenties gebruiken zoals je wilt.

Deze nieuwe gebruiker heeft lees/schrijf (readWriteAnyDatabase) toegang tot alle databases en beheerdersrechten tot alle collecties. Maar deze gebruiker heeft geen drop/verwijder database machtigingen en kan de machtigingen van andere gebruikers niet verwijderen of wijzigen.

Na het uitvoeren van de opdracht en als je een foutmelding krijgt, controleer dan je code opnieuw en probeer het opnieuw.

# De methode db.createUser() maakt een nieuwe gebruiker aan in de huidige database, met de privileges gespecificeerd door rollen.
db.createUser(
{
# Geef de gebruikersnaam AdminATA op, maar je kunt elke gewenste gebruikersnaam invoeren.
user: "AdminATA",
# De methode passwordPrompt() is een universele hulpfunctie
# die de MongoDB-shell vertelt om je om een wachtwoord te vragen voor de gebruiker AdminATA.
pwd: passwordPrompt(),
# Specificeer de rollen die je wilt dat je gebruiker AdminATA heeft.
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)

5. Geef een veilig wachtwoord op wanneer daarom wordt gevraagd, zoals hieronder wordt getoond, en druk op Enter.

Providing a secure password

Hieronder zie je een bericht Succesvol gebruiker toegevoegd. Deze output bevestigt dat je succesvol een gebruiker met beheerdersrechten hebt aangemaakt en deze hebt beperkt tot de minimaal vereiste privileges.

Op dit punt heb je al een beheerdersgebruiker genaamd AdminATA die alles kan doen wat je nodig hebt in de database zonder toegang te geven aan iedereen.

Verifying Successful Admin User Creation in MongoDB

6. Voer ten slotte het exit-commando uit om de mongo shell te verlaten.

exit
Leaving the mongo shell

Beveiliging toevoegen door authenticatie in te schakelen

Nu je een beheerdersgebruiker hebt, voeg je nog een laag beveiliging toe door authenticatie in te schakelen. Hierdoor krijgen alleen gebruikers met de juiste referenties toegang tot de database.

Authenticatie verwijst naar het proces van het valideren van een verbinding, meestal door het verstrekken van een gebruikersnaam en wachtwoord of door het gebruik van een authenticatietoken. Authenticatie zorgt ervoor dat je bent wie je zegt dat je bent en niet een bedrieger die probeert toegang te krijgen tot bronnen.

1. Schakel authenticatie in door het bewerken van het MongoDB configuratiebestand met het volgende, en sla de wijzigingen op:

  • Open het /etc/mongod.conf bestand in je favoriete teksteditor. Het /etc/mongod.conf bestand bevat de configuratie van je MongoDB cluster.
  • Zoek naar en verwijder het commentaar bij de #security directive door het # symbool voor de directive te verwijderen, zoals hieronder getoond. Deze directive vertelt MongoDB om de beveiligingsinstellingen in het configuratiebestand te zoeken.
  • Voeg een nieuwe regel toe onder de security directive die zegt authorization: enabled. Let op dat de regel authorization: enabled is ingesprongen (heeft twee spaties aan het begin), zoals hieronder getoond.
Adding the authorization parameter

2. Voer vervolgens de volgende systemctl commando uit om de MongoDB-server te herstarten zodat de wijzigingen van kracht worden.

sudo systemctl restart mongod

3. Voer tot slot het onderstaande commando uit om de status van je MongoDB-service te bekijken.

sudo systemctl status mongod

Hieronder zie je een regel die zegt Actief: actief (lopend) in groene tekst, wat aangeeft dat je MongoDB-server draait en klaar is om verbindingen te accepteren.

Viewing MongoDB Service Status

Het testen of authenticatie werkt

Je hebt net authenticatie ingeschakeld, maar hoe weet je of het werkt? Je zult inloggen op de beheerdersgebruiker om te testen en ervoor te zorgen dat je authenticatie werkt door databases te bekijken.

1. Voer de volgende opdrachten uit om toegang te krijgen tot de mongo shell zoals je deed in de sectie “Het aanmaken van een toegewijde beheerdersgebruiker” (stap één).

mongo

Zoals je hieronder kunt zien, ontvang je niet langer de waarschuwing Toegangsbeheer is niet ingeschakeld… over het inschakelen van authenticatie. In plaats daarvan krijg je een bericht dat je de versie van je MongoDB-server en MongoDB-shell vertelt.

Connecting to the MongoDB Shell

2. Voer vervolgens het show dbs commando opnieuw uit om te controleren of je nog steeds toegang hebt tot de database.

show dbs

Het commando zou je alle databases moeten laten zien, zelfs de admin-database. Maar zoals je hieronder ziet, wordt er niets weergegeven. Waarom niet? Het bekijken van de lijst met databases is een voorrecht dat alleen is voorbehouden aan beheerdersgebruikers.

Je hebt je mongo shell niet geauthenticeerd om de Admin-rol te gebruiken, dus je bent niet gemachtigd om de lijst met databases te bekijken.

Listing All Databases (empty)

Met authenticatie ingeschakeld zal de verbinding mislukken als iemand probeert toegang te krijgen tot de database met een verbindingsreeks die niet de juiste referenties bevat.

Authenticatie van verbindingsreeksen is een essentieel onderdeel van de beveiliging van MongoDB, en je moet authenticatie implementeren op alle lagen van de applicatie. Alle verbindingen met MongoDB moeten een verificatiereeks gebruiken bestaande uit referenties. Deze referenties omvatten de juiste gebruikersnaam en wachtwoord.

3. Voer het exit-commando uit om de MongoDB-shell te verlaten.

exit

4. Voer nu het onderstaande commando uit om in te loggen op de MongoDB-shell met de gebruikersnaam (-u) en wachtwoord (-p) van je nieuw aangemaakte beheerdersgebruiker. Vervang AdminATA door de gebruikersnaam die je hebt aangemaakt in de sectie “Een toegewijde beheerdersgebruiker maken” (stap vier).

De parameter --authenticationDatabase vertelt de MongoDB-shell om zich te authenticeren tegen de admin-database.

mongo -u AdminATA -p --authenticationDatabase admin

5. Geef je wachtwoord voor je beheerdersgebruiker wanneer daarom wordt gevraagd.

Providing administrative password
logging into the MongoDB shell as an administrator

6. Voer ten slotte opnieuw het show dbs-commando uit om te proberen te zien of je alle databases kunt bekijken.

show dbs

Deze keer, zoals je hieronder ziet, verschijnt de lijst met databases omdat je een beheerdersgebruiker bent.

Listing all databases as admin user

Conclusie

In deze zelfstudie heb je geleerd hoe je verbinding kunt maken om een beheerdersgebruiker te maken en authenticatie kunt inschakelen. Je hebt geleerd hoe je controle kunt krijgen over de beveiliging van je MongoDB en beperkingen kunt opleggen aan wie toegang heeft tot databases op je server.

Op dit punt kun je beslissen wie toegang heeft tot wat. Dus wat is jouw volgende stap? Misschien leren hoe je een MongoDB-container veilig kunt gebruiken?

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