Seguridad y Administración en Bases Documentales
1. Gestión de Usuarios y Permisos #
Por defecto, cuando instalamos MongoDB, cualquier persona puede conectarse sin autenticación. ¡Esto es peligroso! 😱
Para evitarlo, debemos crear usuarios con permisos específicos.
📌 Ejemplo: Crear un usuario administrador
1use admin 2db.createUser({ 3 user: "admin", 4 pwd: "password123", 5 roles: [{ role: "userAdminAnyDatabase", db: "admin" }] 6})
✅ Ahora, solo este usuario puede administrar la base de datos.
📌 Ejemplo: Crear un usuario con acceso solo a una base de datos
1use tienda 2db.createUser({ 3 user: "empleado", 4 pwd: "secreto", 5 roles: [{ role: "readWrite", db: "tienda" }] 6})
✅ Este usuario solo puede leer y escribir en la base tienda.
2. Habilitar Autenticación en MongoDB #
Para que MongoDB requiera usuario y contraseña, seguimos estos pasos:
1️⃣ Editamos el archivo de configuración de MongoDB (mongod.conf):
1sudo nano /etc/mongod.conf
2️⃣ Buscamos la sección security y agregamos:
1security: 2 authorization: enabled
3️⃣ Guardamos los cambios y reiniciamos MongoDB:
1sudo systemctl restart mongod
Ahora, para conectarnos, necesitamos ingresar el usuario y contraseña:
1mongo -u admin -p password123 --authenticationDatabase admin
✅ ¡Ahora MongoDB está protegido con autenticación! 🔒
3. Proteger MongoDB contra Ataques #
📌 1. No permitir conexiones externas
Si tu base de datos solo se usa en el mismo servidor, limita las conexiones a localhost.
Editar mongod.conf y asegurarse de que dice:
1bindIp: 127.0.0.1
📌 2. Usar contraseñas seguras
Siempre usa contraseñas fuertes en los usuarios de la base de datos.
❌ MAL: password123, admin123, 123456
✅ BIEN: b4s3D4t0S*2024!
📌 3. Configurar Firewalls
Si MongoDB está en un servidor remoto, bloquea el acceso a su puerto (por defecto 27017).
En Linux (Ubuntu):
1sudo ufw deny 27017
Si necesitas acceso desde una IP específica, permítelo así:
1sudo ufw allow from 192.168.1.100 to any port 27017
✅ Esto evita ataques de hackers en la nube.
4. Hacer Copias de Seguridad (Backups) #
📌 Para hacer una copia de seguridad de la base de datos tienda:
1mongodump --db tienda --out /backup/
✅ Esto genera una copia en la carpeta /backup/.
📌 Para restaurar la copia de seguridad en otra máquina:
1mongorestore --db tienda /backup/tienda/
✅ Esto recupera toda la base de datos sin perder información.
5. Monitoreo y Administración #
Es importante supervisar nuestra base de datos para detectar problemas.
📌 Ver el estado de la base de datos:
1db.serverStatus()
📌 Ver las conexiones activas:
1db.currentOp()
📌 Ver el uso de memoria y disco:
1db.stats()
✅ Estos comandos ayudan a detectar si la base está sobrecargada.
Resumen del tema
Conceptos clave #
- Control de Acceso y Roles (RBAC): creación de usuarios con privilegios mínimos necesarios mediante roles específicos (
readWrite,userAdminAnyDatabase) a través dedb.createUser(). - Habilitación de Autenticación: activación obligatoria de
security.authorization: enabledenmongod.confpara exigir credenciales en cada conexión. - Aislamiento de Red: limitar la escucha de conexiones a interfaces locales (
bindIp: 127.0.0.1) o restringir el puerto27017mediante cortafuegos (UFW/ grupos de seguridad). - Copias de Seguridad: uso de las herramientas CLI
mongodumppara exportar datos ymongorestorepara recuperarlos sin pérdida de información. - Monitoreo del Sistema: inspección de métricas de carga, operaciones activas y uso de recursos con
db.serverStatus(),db.currentOp()ydb.stats().
Qué debes recordar #
Desplegar MongoDB con autenticación activada, interfaces de red protegidas y políticas periódicas de backup (mongodump) es fundamental para evitar accesos no autorizados y pérdidas de datos en producción.