Friday, January 2, 2015

MongoDB - 3 repl with security

========================================================
Create Mongo 3 replicaset with security in a Single Box
=========================================================

stopmongo if any running
-------------------------
service mongod stop
killall -w mongo
Create directories
-------------------
cd /apps/data
rm -rdf c1 c2 c3 b1 b2 b3 a1 a2 a3 ar1
rm -f *.log
mkdir   c1 c2 c3 b1 b2 b3 a1 a2 a3 ar1
Start Mongo 3 Processes
---------------------------------
mongod --logpath /apps/data/a1_mongod.log --logappend --fork --port 27017 --dbpath /apps/data/a1  --rest  --replSet rs_a  --oplogSize 64
mongod --logpath /apps/data/a2_mongod.log --logappend --fork --port 27018 --dbpath /apps/data/a2  --rest  --replSet rs_a --oplogSize 64
mongod --logpath /apps/data/a3_mongod.log --logappend --fork --port 27019 --dbpath /apps/data/a3  --rest  --replSet rs_a  --oplogSize 64
Login to primary and Add others in config make a replica set
------------------------------------------------------------
mongo --port 27017
rs_a:PRIMARY> rs.initiate()
rs_a:PRIMARY> rs.add('node2:27018')
rs_a:PRIMARY> rs.add('node2:27019')
Create database & Add Data
--------------------------
> use mydb
switched to db mydb

rs_a:primary> for( var i=1; i <= 5001 ; i++) {db.myinfo.insert({x:i,y:"hello how are you today "})}
rs_a:PRIMARY> db.myinfo.stats()
{
        "ns" : "mydb.myinfo",
        "count" : 5001,
        "size" : 360088,
        "avgObjSize" : 72.00319936012798,
        "storageSize" : 1396736,
        "numExtents" : 5,
        "nindexes" : 1,
        "lastExtentSize" : 1048576,
        "paddingFactor" : 1,
        "systemFlags" : 1,
        "userFlags" : 0,
        "totalIndexSize" : 171696,
        "indexSizes" : {
                "_id_" : 171696
        },
        "ok" : 1
}
Create Users
------------
primary> db
> use admin
db.addUser( { user: "admin",pwd: "admin",roles:[ "userAdminAnyDatabase","clusterAdmin","dbAdminAnyDatabase","readWriteAnyDatabase"] } )
db.system.users.find()
db.system.users.remove({"user" : "admin"});
-- Craete User in the Local database
> use mydb
db.addUser( { user: "dba",pwd: "dba",roles:[ "dbAdmin"] } )
db.addUser( { user: "user1",pwd: "user1",roles:[ "readWrite"] } )
db.addUser( { user: "user2",pwd: "user2",roles:[ "read"] } )

-- Cleanup code if you need to remove
db.system.users.find()
db.system.users.remove({"user" : "dba"});
db.system.users.remove({"user" : "user1"});
db.system.users.remove({"user" : "user2"});
======================================================
-- stop
service mongod stop
killall -w mongo
show
mongod --logpath   /apps/data/a1_mongod.log --logappend --fork --port 27017 --dbpath /apps/data/a1  --rest  --replSet rs_a  --oplogSize 64
mongod --logpath   /apps/data/a2_mongod.log --logappend --fork --port 27018 --dbpath /apps/data/a2  --rest  --replSet rs_a  --oplogSize 64
mongod --logpath   /apps/data/a3_mongod.log --logappend --fork --port 27019 --dbpath /apps/data/a3  --rest  --replSet rs_a  --oplogSize 64

---------------------
-- Add security Key
---------------------
mkdir /data/mongokey/
change user and permissions
mkdir /data/mongokey/
chmod -R 700 /data/mongokey/
chown -R mongod:mongod  /data/mongokey/
Generate key
------------
login to one node
root> openssl rand -base64 753 > /data/mongokey/authkey
chown -R mongod:mongod  /data/mongokey/
show

Stop all and Restart with security Credentials
-------------------------------------------------
service mongod stop
killall -w mongo
show
mongod --auth --keyFile /apps/data/mongokey --logpath  /apps/data/a1_mongod.log --logappend --fork --port 27017 --dbpath /apps/data/a1  --rest  --replSet rs_a  --oplogSize 64
mongod --auth --keyFile /apps/data/mongokey --logpath  /apps/data/a2_mongod.log --logappend --fork --port 27018 --dbpath /apps/data/a2  --rest  --replSet rs_a  --oplogSize 64
mongod --auth --keyFile /apps/data/mongokey --logpath  /apps/data/a3_mongod.log --logappend --fork --port 27019 --dbpath /apps/data/a3  --rest  --replSet rs_a  --oplogSize 64
show

Test user login now
-------------------
mongo -u admin -p admin localhost/admin
mongo -u user1 -p user1 localhost/mydb
--- Port adding does not work
mongo localhost/admin:27017 -u admin -p admin
mongo localhost:27017/admin -u  admin -p 'admin'
db.auth({"admin":"admin"})