Installare MongoDB su Centos 6.10
Creare un repository così da poter installare MongoDB usando yum.
vi /etc/yum.repos.d/mongodb.repo
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
Queste info possono essere recuperate dal manuale di installazione mondodb su redhat
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
Prima di installare il pacchetto verifichiamo che il repository MongoDB esiste con il seguente comando:
yum repolist
Plugin abilitati:fastestmirror, security
Loading mirror speeds from cached hostfile
id repo nome repo stato
base CentOS-6 - Base 6713
mongodb-org-4.0 MongoDB Repository 55
updates CentOS-6 - Updates 467
repolist: 7235
Vengono creati i seguenti oggetti che hanno come owner e gruppo mongod:
Controllare il file di log /var/log/mongodb/mongod.log
Il warning "soft rlimits too low" può essere risolto aggiungendo nel file
/etc/security/limits.d/ 90-nproc.conf le due righe evidenziate in giallo.
Riavviare i servizio di mongod
service mongod restart
Si abilitare o disabilitare il controllo degli accessi basato sui ruoli (RBAC) per garantire l'accesso di ciascun utente alle proprie risorse e privilegi del database.
enabled Un utente può accedere solo alle risorse del database ed eseguire le azioni per le quali ha avuto i privilegi.
disabled Un utente può accedere a un qualsiasi database ed eseguire una qualsiasi azione.
N.B. Quando è abilitato l'access control occorre definire un utenza che abbia almeno ruoli userAdminAnyDatabase e readWriteAnyDatabase che permette di creare ed eliminare utenti, ruoli e cambiare password, e può farlo su ogni database presente nell'istanza.
1) Mantenere "security authorization: disabled" quindi avviare mongodb senza access control abilitato.
service mongodb stop
mongod --port 27017 --dbpath /var/lib/mongo
oppure se si cambiano i path
mongod --port 27017 --dbpath /u02/mongodb/data
Creare un utente amministratore degli utenti di tutti i database presenti in MongoDB.
> use admin
switched to db admin
> db.createUser(
{
user: "admin",
pwd: "admin",
roles: [{role: "root" , db:"admin"}]
}
)
Stoppare l'istanza Mongodb dalla shell
>db.adminCommand( { shutdown: 1 } )
>exit
Una volta creato l'utente amministratore posso riavviare mongodb con Access Control in due modi:
1) security authorization: disabled
mongod --auth --port 27017 --dbpath /var/lib/mongodb
oppure
mongod --auth --port 27017 --dbpath /u02/mongodb/data
2) security authorization: enabled
service mongod start
Creare una utenza amministratore per l'ambiente di sviluppo.
i) accedere a mongo come amministratore e usare db.createUser().
mongo -u admin -p admin admin
> use heroesdb
> db.createUser(
{ user: "heroadmin",
pwd: "heroadmin",
roles: [{role: "dbOwner" , db:"heroesdb"}]
})
>
ii) uscire dalla shell mongo e autenticarsi come nuovo user e creare il db.
mongo -u heroadmin -p heroadmin heroesdb
> db
heroesdb
> db.heroes.insert( {hero:"Punisher", name:"Frank", surname:"Castle", groups:" "} )
WriteResult({ "nInserted" : 1 })
vi /etc/yum.repos.d/mongodb.repo
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
Queste info possono essere recuperate dal manuale di installazione mondodb su redhat
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
Prima di installare il pacchetto verifichiamo che il repository MongoDB esiste con il seguente comando:
yum repolist
Plugin abilitati:fastestmirror, security
Loading mirror speeds from cached hostfile
id repo nome repo stato
base CentOS-6 - Base 6713
mongodb-org-4.0 MongoDB Repository 55
updates CentOS-6 - Updates 467
repolist: 7235
Ora è possibile procedere con l'installazione del pacchetto.
yum install -y mongodb-org
Vengono installati 5 pacchetti principali oltre alle dipendenze:
mongodb-org-mongos
mongodb-org-server
mongodb-org-shell
mongodb-org-tools
Vengono creati i seguenti oggetti che hanno come owner e gruppo mongod:
/etc/mongod.cong è il file di configurazione
/var/lib/mongo è la directory dei dati
/var/log/mongodb è la directory dei log
Nella mia installazione di Centos ho disabilitato Selinux pertanto non occorre configurarlo per Mongodb.
vim /etc/selinux/config
........
SELINUX=disable
.....
SELINUXTYPE=targeted
Start MongoDB
service mongod start
Verifica che si sia avviato il servizio e il log.
ps -ef | grep mongod
mongod 23945 1 2 11:03 ? 00:00:01 /usr/bin/mongod -f /etc/mongod.conf
root 23984 22837 0 11:04 pts/0 00:00:00 grep mongod
Controllare il file di log /var/log/mongodb/mongod.log
Stop MongoDB
service mongod stop
Start MongoDB
service mongod restart
Se si vuole avviare MongoDB al reboot del sistema
chkconfig mongod on
Accediamo alla Shell mongo
[root@coslab02 mongodb]# mongo
MongoDB shell version v4.0.10
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("a21e3d6e-9245-4fa9-a185-da46c5140f3b") }
MongoDB server version: 4.0.10
Server has startup warnings:
2019-06-19T11:17:38.810+0200 I STORAGE [initandlisten]
2019-06-19T11:17:38.810+0200 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2019-06-19T11:17:38.810+0200 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem
2019-06-19T11:17:41.510+0200 I CONTROL [initandlisten]
2019-06-19T11:17:41.510+0200 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2019-06-19T11:17:41.510+0200 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2019-06-19T11:17:41.511+0200 I CONTROL [initandlisten]
2019-06-19T11:17:41.512+0200 I CONTROL [initandlisten]
2019-06-19T11:17:41.512+0200 I CONTROL [initandlisten] ** WARNING: soft rlimits too low. rlimits set to 1024 processes, 64000 files. Number of processes should be at least 32000 : 0.5 times number of files.
---
>
Il warning "soft rlimits too low" può essere risolto aggiungendo nel file
/etc/security/limits.d/ 90-nproc.conf le due righe evidenziate in giallo.
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
* soft nproc 1024
root soft nproc unlimited
mongo soft nproc 64000
mongo hard nproc 64000
Il warning "Access control is not enabled for the database" può essere risolto modificando il file di configurazione abilitando la "security authorization":
vi /etc/mongod.conf
.....
security:
authorization: enabled
......
Riavviare i servizio di mongod
service mongod restart
Si abilitare o disabilitare il controllo degli accessi basato sui ruoli (RBAC) per garantire l'accesso di ciascun utente alle proprie risorse e privilegi del database.
enabled Un utente può accedere solo alle risorse del database ed eseguire le azioni per le quali ha avuto i privilegi.
disabled Un utente può accedere a un qualsiasi database ed eseguire una qualsiasi azione.
N.B. Quando è abilitato l'access control occorre definire un utenza che abbia almeno ruoli userAdminAnyDatabase e readWriteAnyDatabase che permette di creare ed eliminare utenti, ruoli e cambiare password, e può farlo su ogni database presente nell'istanza.
Abilitazione dell'Access Control
1) Mantenere "security authorization: disabled" quindi avviare mongodb senza access control abilitato.
service mongodb stop
mongod --port 27017 --dbpath /var/lib/mongo
oppure se si cambiano i path
mongod --port 27017 --dbpath /u02/mongodb/data
Aprire un altro terminale ed accedere alla shell mongo
mongo --port 27017
> use admin
switched to db admin
> db.createUser(
{
user: "admin",
pwd: "admin",
roles: [{role: "root" , db:"admin"}]
}
)
Il ruolo root ha accesso alle operazioni e a tutte le risorse: readWriteAnyDatabase, dbAdminAnyDatabase, userAdminAnyDatabase, clusterAdmin, restore e backup.
Stoppare l'istanza Mongodb dalla shell
>db.adminCommand( { shutdown: 1 } )
>exit
Una volta creato l'utente amministratore posso riavviare mongodb con Access Control in due modi:
1) security authorization: disabled
mongod --auth --port 27017 --dbpath /var/lib/mongodb
oppure
mongod --auth --port 27017 --dbpath /u02/mongodb/data
2) security authorization: enabled
service mongod start
Creare una utenza amministratore per l'ambiente di sviluppo.
i) accedere a mongo come amministratore e usare db.createUser().
mongo -u admin -p admin admin
> use heroesdb
> db.createUser(
{ user: "heroadmin",
pwd: "heroadmin",
roles: [{role: "dbOwner" , db:"heroesdb"}]
})
>
ii) uscire dalla shell mongo e autenticarsi come nuovo user e creare il db.
mongo -u heroadmin -p heroadmin heroesdb
> db
heroesdb
> db.heroes.insert( {hero:"Punisher", name:"Frank", surname:"Castle", groups:" "} )
WriteResult({ "nInserted" : 1 })
Cambiare directory dati e log
Se si vuole usare un'altra directory per i log e i dati modificare il file di config come segue:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /u01/mongodb/log/mongod.log
# Where and how to store data.
storage:
dbPath: /u01/mongodb/data
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
Creare le directory
[root@coslab02 /]# mkdir -p /u01/mongodb/log/
[root@coslab02 /]# mkdir -p /u01/mongodb/data
Cambiare utente.
chown -R mongod:mongod mongodb
Riavviare il servizio mongod.
Subito dopo l’installazione, MongoDB non ha utenti preimpostati ma un meccanismo detto Localhost Exception che permette di accedere come amministratore a tutti gli utenti che tentano di accedere dalla stessa macchina in cui si trova il server.
Creare subito un utente con i permessi di amministratore degli utenti di tutti i database presenti in MongoDB.
Usare come ruolo "userAdminAnyDatabase" che permette di creare ed eliminare utenti, ruoli e cambiare password su ogni database presente nell’istanza.
> use admin
switched to db admin
> db.createUser({ user: "fradmin",
pwd: "fradmin",
roles: [ { role: "userAdminAnyDatabase", db: "admin" }]
})
Subito dopo l’installazione, MongoDB non ha utenti preimpostati ma un meccanismo detto Localhost Exception che permette di accedere come amministratore a tutti gli utenti che tentano di accedere dalla stessa macchina in cui si trova il server.
Creare subito un utente con i permessi di amministratore degli utenti di tutti i database presenti in MongoDB.
Usare come ruolo "userAdminAnyDatabase" che permette di creare ed eliminare utenti, ruoli e cambiare password su ogni database presente nell’istanza.
> use admin
switched to db admin
> db.createUser({ user: "fradmin",
pwd: "fradmin",
roles: [ { role: "userAdminAnyDatabase", db: "admin" }]
})
Se avessimo usato il ruolo "UserAdmin" l'utente sarebbe stato solo l'amministratore del db indicato.
Stop del servizio
Disinstallare Mongod
Stop del servizio
service mongod stop
Rimuovere i pacchetti
yum erase $(rpm -qa | grep mongodb-org)
Rimuovere le directory
rm -r /var/log/mongodb
rm -r /var/lib/mongo
Rimuovere i pacchetti
yum erase $(rpm -qa | grep mongodb-org)
Rimuovere le directory
rm -r /var/log/mongodb
rm -r /var/lib/mongo
Rimuovere le directory non di default come ad esempio /u01/mongodb/.