当前位置: 首页 > 科技观察

解决mongoDB的各种安全隐患

时间:2023-03-18 17:08:29 科技观察

默认安装Mongo经常会导致各种安全问题,比如非授权访问系统和凤凰网的mongodb。今天我们就来说说MongoDB的安全配置。1、安装MongoDB时不加任何参数。默认情况下,没有授权验证。登录用户可以随意操作数据库,远程访问数据库。需要用-auth参数启动。2、刚安装MongoDB时,默认有一个admin数据库。此时admin数据库是空的,没有权限相关信息的记录。当admin.system.users中没有用户时,即使mongod启动时添加了-auth参数,如果admin数据库中没有添加用户,此时可以进行任何操作,无需任何认证(无论是否--auth参数是否使用)start)直到在admin.system.users中添加了一个用户。3、MongoDB访问分为连接和授权验证。即使以-auth参数启动,仍然可以不使用用户名连接数据库,但不会有任何操作的授权。4.admin数据库中的用户名可以管理所有数据库。其他数据库的用户只能管理自己的数据库。5、2.4之前的版本,用户权限分为只读和所有权限;2.4版本权限管理主要分为:数据库操作权限、数据库用户管理权限、集群管理权限。这些用户在管理数据库中进行管理。但是仍然兼容2.4版本之前的用户管理方式。0×01MongoDB中用户角色描述1.角色数据库的只读权限,包括:aggregate,checkShardingIndex,cloneCollectionAsCapped,collStats,count,dataSize,dbHash,dbStats,distinct,filemd5,mapReduce(inlineoutputonly.),text(betafeature.)geoNear,geoSearch,geoWalk,group2.readWrite角色数据库的读写权限,包括:read角色cloneCollection的所有权限(作为目标数据库。),convertToCapped,create(和创建集合implicitly.),renameCollection(withinthesamedatabase.)findAndModify,mapReduce(outputtoacollection.)drop(),dropIndexes,emptycapped,ensureIndex()3.dbAdmin角色数据库的管理权限,包括:clean,collMod,collStats,compact,convertToCappecreate,db.createCollection(),dbStats,drop(),dropIndexesensureIndex(),indexStats,profile,reIndexrenameCollection(withinasingledatabase.),validate4.userAdmin角色数据库用户管理权限5.clusterAdm在角色集群管理权限(副本集、分片、主从等相关管理),包括:addShard、closeAllDatabases、connPoolStats、connPoolSync、_cpuProfilerStart_cpuProfilerStop、cursorInfo、diagLogging、dropDatabaseshardingState、shutdown、splitChunk,splitVector,split,top,touchresyncserverStatus,setParameter,setShardVersion,shardCollectionreplSetMaintenance,replSetReconfig,replSetStepDown,replSetSyncFromrepairDatabase,replSetFreeze,replSetGetStatus,replSetInitiatelogRotate,moveChunk,movePrimary,netstat,removeShardinghost.OpInfodb,unset.killOp(),listDatabases,listShardsgetCmdLineOpts,getLog,getParameter,getShardMap,getShardVersionenableSharding,flushRouterConfig,fsync,db.fsyncUnlock()6.readAnyDatabase角色对任何数据库的只读权限(类似于read)7.readWriteAnyDatabase角色对任何数据库读取写权限(类似readWrite)8.UserAdminAnyDatabase角色任意数据库用户管理权限(类似userAdmin)9.dbAdminAnyDatabase角色任意数据库管理权限(类似dbAdmin)0×02MongoDB安装注意事项1.安装时,需要添加-添加–auth后,MongoDB需要进行验证。2、如果需要加–nohttpinterface,会有28017端口监听,可以通过网页管理mongodb。如果您不需要它,请将其删除。3.可以加–bind_ip限制访问ip4。可以加–port,添加后可以重新指定端口,默认为270175。安装完成后,需要马上在admin数据库中添加一个用户。只有在admin数据库中添加用户后认证才能生效注:安装过程实际上是添加1个服务,启动时指定参数0×03用户授权1.2.4之前版本的用户管理方式1.1.输入admin创建管理账号useadmindb.addUser("test","test")1.2。输入要使用的数据库,创建程序使用用户usetestdb.addUser("test","test")默认有读写权限db.addUser("test","test",True)有读权限2、2.4版本的用户管理也可以使用之前版本的方法2.1。输入admin创建管理账号useadmindb.addUser("test","test")2.2。输入admin创建一个账户,对数据库test有读写权限admindb.addUser({"user":"test","pwd":"test","roles":[],"otherDBRoles":{"test":["readWrite"],"test_log":["readWrite"]}})0×04安全配置方案1、安装时添加--auth,立即在admin数据库中创建用户.默认情况下,MongoDB不需要身份验证,因此这是至关重要的一步。2.安装时可以考虑修改端口指定的访问ip可以根据实际情况设置,也可以直接在服务器防火墙上设置。3、建议添加–nohttpinterface,取消安装时默认的网页管理方式。是的,***关闭4.管理用户处理需要在admin中创建一个管理账户进行管理,最好设置一个强密码,但不要用于其他程序5.MongoDB服务运行账户可以使用网络服务下windows或者新建一个用户,使用默认的USERS组,添加增加数据库文件和日志存放目录的写权限,建议取消cmd等程序的执行权限在linux下新建一个账号,赋予程序执行权限和数据库文件和日志目录的读写权限,建议取消sh的权限等程序执行权限。6.控制网站或其他程序使用的连接用户权限。网站或其他程序使用的用户只授予对应库的权限,不使用admin数据库中的管理账号。0×05常用命令1、安装mongod--dbpathd:\mongodb\data--logpathd:\mongodb\log\mongodb.log----nohttpinterface--auth--install2。添加用户useadmindb.addUser("test","test")3.显示所有数据库showdbs4。使用某个数据库使用test5。连接到数据库mongotest-uroot-p1234566。添加用户认证db.auth("username","password")7.检查用户db.system.users.find()并写一些基本的。网上还有很多,或者用工具连接起来再操作。0×06管理工具1.MongoVUE客户端管理工具2.Rockmongo基于php的web管理不足之处请指正!