1查看当前linux信息
查看当前linux是centos还是unbantu,以及对应的版本号,
lsb_release -a #命令存在表示为ubuntu系统
cat /etc/redhat-release #文件存在为centos
需要注意的是Ubuntu 16.04 版本的话,mongo4.2及以下版本是完整支持,4.2开始砍掉了很多扩展功能(主要功能暂时不受影响),这里推荐使用4.0.X版本安装
2安装
sudo apt-get install libcurl3 openssl
从mongo官网选择对应版本合适的下载地址
https://www.mongodb.com/try/download/community
使用命令开始下载:
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-4.0.24.tgz
#或者4.2最新版本
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-4.2.13.tgz
#当前最新版本
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-4.4.4.tgz
解压
tar -zxvf mongodb-linux-x86_64-ubuntu1604-4.0.24.tgz
删除原文件,并将解压文件夹移动到安装目录
rm -f mongodb-linux-x86_64-ubuntu1604-4.0.24.tgz
mv mongodb-linux-x86_64-ubuntu1604-4.0.24 /usr/local/mongodb4
进入安装目录,添加临时环境变量(每次重新启动都要再次配置),命令如下:
export PATH=<mongodb-install-directory>/bin:$PATH
我们这里的路径为:
export PATH=/usr/local/mongodb4/bin:$PATH
安装完毕后,需要创建数据库实例目录和日志所在目录,并且设置权限
sudo mkdir -p /var/lib/mongo
sudo mkdir -p /var/log/mongodb
sudo chown `whoami` /var/lib/mongo # 设置权限
sudo chown `whoami` /var/log/mongodb # 设置权限
接着配置一个mongo的配置文件
vim /etc/mongod.conf
如果存在,修改配置,如果不存在,添加如下内容
dbpath=/var/lib/mongo #数据存储目录
logpath=/var/log/mongodb/mongodb.log #日志文件路径
logappend = true #追加
port=27017 #端口号
fork=true #后台进程
auth=true #开启认证
bind_ip=0.0.0.0 #开启远程访问
配置完毕后,我们可以启动mongo,第一次启动不要指定配置文件,否则默认是开启认证,我们需要先配置账号信息(没有默认超管账号)
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork
查看实时日志,看到如下内容,说明mongo启动成功
tail -10f /var/log/mongodb/mongod.log
内容大致如下:
2020-07-09T12:20:17.391+0800 I NETWORK [listener] Listening on /tmp/mongodb-27017.sock
2020-07-09T12:20:17.392+0800 I NETWORK [listener] Listening on 127.0.0.1
2020-07-09T12:20:17.392+0800 I NETWORK [listener] waiting for connections on port 27017
接着我们启动默认的shell工具访问,进入安装目录下的bin目录
cd /usr/local/mongodb4/bin
启动mongo进程
./mongo
进入后,切换到admin数据库,添加认证用户信息
use admin
先创建一个超管
db.createUser({ user: "root", pwd: "Chinacaring2020", roles: [{ role: "root", db: "admin" }] })
接着配置一个我们服务的用户,这里以问卷系统为例,问卷信息存储在questionnaire数据库中,但是我们需要注意的是,我们当前在哪个数据库,该用户认证授权就需要在哪个数据库中,我们不切换数据库,继续创建问卷数据库管理员,同时这个管理员也拥有所有数据库的读写权限
db.createUser({ user: "zd-question", pwd: "Chinacaring2020", roles: [{ role: "readWriteAnyDatabase", db: "admin" },{ role: "dbOwner", db: "questionnaire" }]})
配置完毕后,退出mongo,关闭mongo服务,重新启动,并且按照我们之前的配置文件的方式启动
exit; #退出
ps -ef|grep 'mongo' #查看mongo服务的进程id
kill -9 14041 #kill mongo
#重新启动mongod,如果启动不了,再次配置一下环境变量后执行当前命令
mongod -f /etc/mongod.conf
3认证测试
接着我们再去进入mongo shell进程,切换到admin数据库,使用我们刚刚配置的问卷用户进行认证
use admin;
db.auth('zd-question','Chinacaring2020'); #显示1说明认证通过
这个时候我们切换到问卷数据库questionnaire,测试插入一条数据(后删除)
use questionnaire;
db.questionnaire.save({"test":"123"}); #可以看到成功插入一条数据
db.questionnaire.findOne();
db.questionnaire.remove({}); #将整个db清空还原
附:mongo内置角色
内建角色:
数据库用户角色:read、readWrite;
数据库管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色: clusterAdmin、clusterManager、clusterMonitor、hostManager;
备份恢复角色: backup、restore;
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色: root; 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
内部角色: __system;
角色说明:
Read: 允许用户读取指定数据库
readWrite: 允许用户读写指定数据库
dbAdmin: 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin: 允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
dbOwner: 允许在当前DB中执行任意操作
readAnyDatabase: 赋予用户所有数据库的读权限,只在admin数据库中可用
readWriteAnyDatabase: 赋予用户所有数据库的读写权限,只在admin数据库中可用
userAdminAnyDatabase:赋予用户所有数据库管理User的权限,只在admin数据库中可用
dbAdminAnyDatabase: 赋予管理所有数据库的权限,只在admin数据库中可用
root: 超级账号,超级权限,只在admin数据库中可用。
集群管理角色:
clusterAdmin: 赋予管理集群的最高权限,只在admin数据库中可用
clusterManager: 赋予管理和监控集群的权限
clusterMonitor: 赋予监控集群的权限,对监控工具具有readonly的权限
hostManager: 赋予管理Server
mongo中文社区
https://docs.mongoing.com/install-mongodb
附:用户权限相关其他操作命令
在admin数据库中,查看当前所有的用户信息:
db.system.users.find().pretty()
如果希望给某个用户添加权限:
db.grantRolesToUser("usertest", [{role:"readWrite", db:"testDB"},{role:"read", db:"testDB"}])
如果希望修改用户权限:
db.updateUser("usertest",{roles:[ {role:"read",db:"testDB"} ]})
删除权限:
db.revokeRolesFromUser("usertest",[{role:"read", db:"testDB"}])
修改密码:
db.changeUserPassword("usertest","changepass");
//或
db.updateUser("usertest",{pwd:"changepass1"});