Mongo默认安装往往会导致凤凰网系统等各种安全问题mongodb未经授权的访问。
让我们今天谈谈MongoDB安全配置。
1.MongoDB安装时不添加任何参数,默认无权验证。登录用户可以操作数据库并远程访问数据库–auth参数启动。
2.刚安装完毕的时候MongoDB默认有一个admin此时数据库admin数据库是空的,没有与权限相关的信息记录。admin.system.users即使没有用户,mongod启动时添加–auth如果没有参数admin将用户添加到数据库中,此时可以进行任何操作而不进行任何认证(无论是否–auth 参数启动)直到admin.system.users中添加了一个用户。
3.MongoDB访问分为连接和权限验证,即使是–auth参数启动仍然可以不使用用户名连接数据库,但没有任何操作的权限
4.admin数据库中的用户名可以管理所有数据库,其他数据库中的用户只能管理数据库。
5.在2.4在之前的版本中,用户的权限分为只读和所有权;2.4版本的权限管理主要分为:数据库的操作权数据库用户管理权和集群管理权。建议超级用户admin在数据库中管理这些用户。但仍然兼容2.4版本前的用户管理方法。
0×01 MongoDB用户的角色描述
1. read角色
只读数据库的权限包括:
aggregate,checkShardingIndex,cloneCollectionAsCapped,collStats,count,dataSize,dbHash,dbStats,distinct,filemd5,mapReduce (inline output only.),text (beta feature.)geoNear,geoSearch,geoWalk,group2. readWrite角色
数据库的读写权限包括:
read角色的所有权限
cloneCollection (as the target database.),convertToCapped,create (and to create collections implicitly.),renameCollection (within the same database.)findAndModify,mapReduce (output to a collection.) drop(),dropIndexes,emptycapped,ensureIndex()3. dbAdmin角色
数据库的管理权限包括:
clean,collMod,collStats,compact,convertToCappe create,db.createCollection(),dbStats,drop(),dropIndexes ensureIndex(),indexStats,profile,reIndex renameCollection (within a single database.),validate4. userAdmin角色
数据库的用户管理权限
5. clusterAdmin角色
包括:
addShard,closeAllDatabases,connPoolStats,connPoolSync,_cpuProfilerStart_cpuProfilerStop,cursorInfo,diagLogging,dropDatabase shardingState,shutdown,splitChunk,splitVector,split,top,touchresync serverStatus,setParameter,setShardVersion,shardCollection replSetMaintenance,replSetReconfig,replSetStepDown,replSetSyncFrom repairDatabase,replSetFreeze,replSetGetStatus,replSetInitiate logRotate,moveChunk,movePrimary,netstat,removeShard,unsetSharding hostInfo,db.currentOp(),db.killOp(),listDatabases,listShardsgetCmdLineOpts,getLog,getParameter,getShardMap,getShardVersion enableSharding,flushRouterConfig,fsync,db.fsyncUnlock()6. readAnyDatabase角色
任何数据库的只读权限(和read相似)
7. readWriteAnyDatabase角色
任何数据库的读写权限(和readWrite相似)
8. userAdminAnyDatabase角色
任何数据库用户的管理权限(和userAdmin相似)
9. dbAdminAnyDatabase角色
任何数据库的管理权限(dbAdmin相似)
0×02 MongoDB安装注意事项
1. 安装时需要添加–auth
加了–auth之后MongoDB才需要验证
2. 需要加–nohttpinterface
没有28017年的端口监控,可以通过网页管理mongodb,请不要去掉
3. 可以加–bind_ip
此外,访问可以限制ip
4. 可以加–port
添加后,端口可以重新制定,默认为27017
5. 安装后需要立即安装admin在数据库中添加用户
只有在admin在数据库中添加用户后,认证才能生效
注:安装过程实际上是在指定启动参数时添加一个服务。
0×03 用户授权
1. 2.4以前版本的用户管理模式
1.1、进入admin创建管理账户
use admin db.addUser("test","test")1.2、在需要使用的数据库中创建程序
use test db.addUser("test","test")默认有读写权限 db.addUser("test","test",True)有读取权限2. 2.4版本的用户管理也可以使用以前版本的方式
2.1、进入admin创建一个管理账号
use admin db.addUser("test","test")2.2、进入admin数据库test创建有读写权限的数据库和日志账户
use admin db.addUser({"user": "test","pwd": "test","roles": [ ],"otherDBRoles": {"test": ["readWrite"],"test_log": ["readWrite"]}})0×04 安全配置方案
1. 安装时添加–auth,并立即在admin创建用户的数据库
默认情况下MongoDB不需要验证,所以这是至关重要的一步
2. 安装时可考虑修改端口和指定访问ip
可根据实际情况直接在服务器防火墙上设置
3. 安装时建议添加 –nohttpinterface取消默认的网页管理模式
默认的web一般不使用管理,很多人不知道,***关闭
4. 管理用户处理
因需要在admin在管理中建立管理账户,***是设置强密码,但是不要给其他程序使用
5. MongoDB服务运营账户
windows下可以使用network service 或新用户,默认使用USERS组,然后添加写数据库文件和日志存储目录的权限,建议取消cmd程序执行权限等。
linux下面新建一个账户,给予程序执行权、数据库文件和日志目录的读写权,建议取消sh程序执行权限等。
6.控制网站或其他程序使用的连接用户权限
使用网站或其他程序的用户只给予相应的库权限,不使用admin管理账户在数据库中。
0×05 常用命令
1. 安装
mongod --dbpath d:\mongodb\data --logpath d:\mongodb\log\mongodb.log ----nohttpinterface --auth --install2. 添加用户
use admin db.addUser("test","test")3. 显示所有数据库
show dbs4. 使用数据库
use test5. 连接数据库
mongo test -uroot -p1234566. 添加用户认证
db.auth("username","password")7. 查看用户
db.system.users.find()写几个基本的,其他网上很多,或者用工具连接后操作。
0×06 管理工具
1. MongoVUE
以客户端形式管理工具
2. rockmongo
基于php的web管理
求大牛指正缺点!