文章目录
- 1.1 准备服务器的基本信息
- 1.2 操作系统上创建其用户
- 1.3 部署MongoDB服务端
- 1.4 部署MongoDB客户端
- 1.5 部署MongoDB 27017实例
- 1.5.1 创建相关目录
- 1.5.2 准备配置文件
- 1.5.3 准备启停脚本
- 1.5.4 进行启停测试
- 1.5.5 加入开机自启动
- 1.6 创建超级管理员用户
- 1.6.1 创建本地的超级用户
- 1.6.2 创建远端的超级用户
- 1.7 创建web(业务)帐号
- 1.7.1 创建某业务库
- 1.7.2 创建web帐户
1.1 准备服务器的基本信息
1.2 操作系统上创建其用户
创建超级用户admin
#### 用途:相当于root用户,因为root用户我们会禁止远程登录
01:用来充当root用户的角色。
02:它不会用来运行任何的应用。#### 用户的基本要求
01:用户要能够远程登录,要有家目录。
02:用户不能过期、密码得复杂化,密码是否过期是另外一回事。
03:用户的主组为admin,用户的辅组为wheel。
04:用户得被visudo授权为:admin ALL=(ALL:ALL) NOPASSWD: ALL#### 创建用户的命令
chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow
groupadd -g 91 wheel
groupadd -g 1000 admin
useradd admin -u 1000 -g admin -G wheel -m -s /bin/bash
echo "admin:123456\!@#"|chpasswd
echo "admin ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers
visudo -c
创建普通用户app
#### 用途:用来运行1024端口以上的应用
01:用来运行1024端口及以上的应用,即ps -ef | grep "服务名" 结果中的第一列的内容得是app。
02:所有服务的启停、开机自启动都用systemctl来管理。
03:这个app用户要能够使用systemctl来启停服务、开机自启动管理。#### 用户的基本要求
01:用户要能够远程登录,要有家目录。
02:用户不能过期、密码得复杂化,密码是否过期是另外一回事。#### 创建普通用户app的命令
sudo chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow
sudo groupadd -g 1001 app
sudo useradd app -u 1001 -g app -m -s /bin/bash
echo "app:Chenliang\!@#" | sudo chpasswd
1.3 部署MongoDB服务端
软件下载地址
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-6.0.4.tgz
创建相关的目录
sudo mkdir -p /data/soft
sudo ls -ld /data/soft
安装mongodb服务端软件
#### 安装mongodb服务端软件
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-6.0.4.tgz
ls -l mongodb-linux-x86_64-ubuntu2004-6.0.4.tgz
sudo tar xf mongodb-linux-x86_64-ubuntu2004-6.0.4.tgz -C /data/soft/
sudo ln -svf /data/soft/mongodb-linux-x86_64-ubuntu2004-6.0.4 /data/soft/mongodb
sudo chown -R app:app /data/soft/
ls -l /data/soft/mongodb/bin# 里面只有mongod mongos install_compass 这三个命令# 没有mongo命令了#### 配置环境变量
ls -ld /data/soft/mongodb/binsudo bash -c "cat >>/etc/profile" <<'EOF'
export PATH=/data/soft/mongodb/bin:$PATH
EOFsource /etc/profile
which mongod mongos
1.4 部署MongoDB客户端
安装mongosh客户端工具,因为6.0版本默认没有mongo命令了,所以这里安装mongosh
#### 软件下载地址,这个得根据自己的操作系统版本,及系统上Openssl的版本
wget https://downloads.mongodb.com/compass/mongodb-mongosh-shared-openssl11_1.8.0_amd64.deb#### 安装
ls -l mongodb-mongosh-shared-openssl11_1.8.0_amd64.deb
sudo dpkg -i mongodb-mongosh-shared-openssl11_1.8.0_amd64.deb
which mongoshsudo ln -svf $(which mongosh) /data/soft/mongodb/bin/mongosh
sudo ls -l /data/soft/mongodb/bin/mongosh
1.5 部署MongoDB 27017实例
1.5.1 创建相关目录
sudo mkdir -p /data/apps/mongodb/27017/{data,conf,logs,run,keys,scripts}
sudo tree /data/apps/mongodb/27017
1.5.2 准备配置文件
sudo bash -c "cat >/data/apps/mongodb/27017/conf/mongod.conf" <<'EOF'
## network
net:port: 27017ipv6: falsebindIpAll: falsebindIp: 0.0.0.0maxIncomingConnections: 3000wireObjectCheck: trueunixDomainSocket:enabled: truepathPrefix: /data/apps/mongodb/27017/runfilePermissions: 0700## storage
storage:dbPath: /data/apps/mongodb/27017/datajournal:enabled: trueengine: wiredTigerwiredTiger:engineConfig:cacheSizeGB: 2## log
systemLog:destination: filelogAppend: falsepath: /data/apps/mongodb/27017/logs/mongod.logquiet: false## process
processManagement:fork: truepidFilePath: /data/apps/mongodb/27017/run/mongod.pidtimeZoneInfo: /usr/share/zoneinfo/Asia## security
security:authorization: enabledjavascriptEnabled: false
EOF
1.5.3 准备启停脚本
准备启停脚本
sudo bash -c 'cat >/data/apps/mongodb/27017/scripts/mongod.sh' <<'EOF'
#!/bin/bash
#
# Explain: MongoDB start、stop scripts
#
# Define variables
RETVAL=0
MonPort="27017"
MonConf="/data/apps/mongodb/$MonPort/conf/mongod.conf"
MonCommPath="/data/soft/mongodb/bin"# Define functions
start(){
MonStatusCheck="$(ss -lntup|grep -w "$MonPort"|wc -l)"
if [ "$MonStatusCheck" -eq 0 ];then$MonCommPath/mongod -f $MonConf --fork >/dev/null 2>&1RETVAL=$?if [ $RETVAL -eq 0 ];thenecho "Start mongodb service[$MonPort] success"elseecho "Start mongodb service[$MonPort] fail"fielseecho "mongodb service[$MonPort] is running"
fi
return $RETVAL
}stop(){
MonStatusCheck="$(ss -lntup|grep -w "$MonPort"|wc -l)"
if [ "$MonStatusCheck" -ne 0 ];then$MonCommPath/mongod --shutdown -f $MonConf >/dev/null 2>&1RETVAL=$?if [ $RETVAL -eq 0 ];thenecho "Start mongodb service[$MonPort] success"elseecho "Start mongodb service[$MonPort] fail" fielseecho "mongodb service[$MonPort] is not running"
fi
return $RETVAL
}status(){
MonStatusCheck="$(ss -lntup|grep -w "$MonPort"|wc -l)"
if [ "$MonStatusCheck" -ne 0 ];thenecho "mongodb service[$MonPort] is running"elseecho "mongodb service[$MonPort] is not running"
fi
return $RETVAL
}# case call define functiosn
case "$1" in
start)
start
RETVAL=$?
;;
stop)
stop
RETVAL=$?
;;
restart)
stop
sleep 5
start
RETVAL=$?
;;
status)
status
RETVAL=$?
;;
*)
echo "USAGE:$0{start|stop|restart|status}"
exit 1
esac
EOF
给脚本加可执行权限
sudo chmod 700 /data/apps/mongodb/27017/scripts/mongod.sh
ls -l /data/apps/mongodb/27017/scripts/mongod.sh
更改属主/组为app
sudo chown -R app:app /data/apps/mongodb/
将脚本加入systemctl中
#### 编写/etc/systemd/system/mongod27017.service文件
sudo bash -c "cat >/etc/systemd/system/mongod27017.service" <<'EOF'
[Unit]
Description=mongod instance
After=network.target[Service]
Type=forking
User=app
Group=app
ExecStart=/bin/bash /data/apps/mongodb/27017/scripts/mongod.sh start
ExecStop=/bin/bash /data/apps/mongodb/27017/scripts/mongod.sh stop
LimitNOFILE=65535
Restart=on-failure
RestartSec=10
RestartPreventExitStatus=1
PrivateTmp=false[Install]
WantedBy=multi-user.target
EOF#### 加载
sudo systemctl daemon-reload#### 授权
sudo chown -R app:app /etc/systemd/system/mongod27017.service
让普通用户app在可执行sudo systemctl stop mongod27017.service这样的命令,但我们这里的app用户是不能远程登录的。你就想想app若是可以登录的呢?
#### 进行visudo授权
sudo bash -c "cat >/etc/sudoers.d/mongod27017_systemctl" <<'EOF'
## Cmnd Alias
Cmnd_Alias MONGOD27017_SYSTEMCTL = /usr/bin/systemctl daemon-reload, \/usr/bin/systemctl start mongod27017.service, \/usr/bin/systemctl stop mongod27017.service, \/usr/bin/systemctl restart mongod27017.service, \/usr/bin/systemctl status mongod27017.service, \/usr/bin/systemctl enable mongod27017.service, \/usr/bin/systemctl disable mongod27017.service, \/usr/bin/systemctl is-enabled mongod27017.service ## auth
app ALL=(ALL:ALL) NOPASSWD: MONGOD27017_SYSTEMCTL
EOF#### 更改visudo授权时文件的权限,并visudo -c
sudo chmod 0440 /etc/sudoers.d/mongod27017_systemctl
sudo visudo -c
1.5.4 进行启停测试
#### 先看一看
sudo -u app sudo -l#### 启动mongodb27017实例
sudo -u app sudo systemctl start mongod27017.service
sudo ps -aux | grep mongod
ss -lntup | grep 27017#### 停止mongodb27017实例
sudo -u app sudo systemctl stop mongod27017.service
sudo ps -aux | grep mongod
ss -lntup | grep 27017#### 再次启动
sudo -u app sudo systemctl start mongod27017.service
sudo ps -aux | grep mongod
ss -lntup | grep 27017
1.5.5 加入开机自启动
sudo systemctl enable mongod27017.service
sudo systemctl is-enabled mongod27017.service
1.6 创建超级管理员用户
1.6.1 创建本地的超级用户
我这里创建一个root用户,角色为root,因为角色为root,其库必须得为admin库。且我会开启root用户的身份验证(只允许client地址为127.0.0.1的登录,这样一来这个root用户就是个本地用户,只能在mongodb实例所在服务器上用mongosh 127.0.0.1:27017这样的方式去登录,然后到admin库下去认证。)
// 连接mongodb实例,进入到admin库,我mongodb实例才部署好,哪来的认证
// 连接的时候只能是127.0.0.1,因为我的配置文件中有开启安全认证
mongosh 127.0.0.1:27017
use admin; // 这里创建用户并且同时(这里是必须)授于角色为root,db只能是admin
db.createUser({user:"root",pwd:"root123456",roles: [ { role:"root",db:"admin" }]}
);// 进行认证
db.auth("root","root123456")// 开启其身份验证,其实在创建用户时就可以,但我们这里是才部署好,都没有
// 超级用户。
db.updateUser("root",{authenticationRestrictions:[{ clientSource: ["127.0.0.1"] }]}
);// 查看root用户
db.getUser("root"); // 看不到身份验证的相关信息
db.system.users.find( {user:"root"} ); // 就可看到身份验证// 退出连接
exit;// 连接,这里使用mongosh 172.31.7.111:27017 来进行连接
// 认证时使用root用户,会报错,因为root用户开启了身份验证的
// 再用mongosh 127.0.0.1:27017去连接,然后认证时使用root用户
// 是可以成功的
1.6.2 创建远端的超级用户
这里创建一个远端的超级用户,这个超级用户的名称可以以你公司的名称来命名,所以它并不是一个人类用户。就不对该用户开启身份验证了,这个用户我们就可以结navicat这样的工具来连接mongodb实例了。
// 本地以root用户登录并认证
mongosh 127.0.0.1:27017
use admin;
db.auth("root","root123456");// 创建aliang用户,角色为root,认证库必须为admin(得在admin库下创建用
// 户),库也得为admin。
use admin;
db.createUser({user: "aliang",pwd: "aliang123456",roles: [{ role:"root",db:"admin" }]}
);// 查看用户
use admin;
db.system.users.find( {user:"aliang"} );
db.getUser("aliang");// 进行认证
db.auth("aliang","aliang123456");// 退出登录
exit;
1.7 创建web(业务)帐号
1.7.1 创建某业务库
以本地管理员用户登录
mongosh 127.0.0.1
use admin;
db.auth("root","root123456");
创建wyc业务库
// 进入并创建wyc库,并创建test集群
use wyc; db.createCollection("test"); // 往test集合中插入两条数据
db.test.insertMany( [ {name:"chenliang01",age:"11"},{name:"chenliang02",age:"12"} ]
);// 查看test集合中的前10条文档(记录)
db.test.find().limit(10);
1.7.2 创建web帐户
创建一个名为wyc的用户并进行授于相关角色
// 我是进入到admin库的哈
use admin; // 创建用户,设置密码,没有授于角色(后面会授予的)
db.createUser({user:"wyc",pwd:"wyc123456",roles: [] }
); // 查看wyc用户
db.getUser("wyc"); // 对wyc用户授于readWrite角色
db.grantRolesToUser("wyc",[ {role:"readWrite",db:"wyc"} ]
); // 查看wyc用户
db.getUser("wyc");
对wyc这个web帐户进行认证
// 进入到admin库后,认证wyc用户
use admin;
db.auth("wyc","wyc123456"); // 查看有哪些库,只能看到wyc库,进入wyc库,查看test集群
show dbs;
use wyc;
show tables;
db.test.find().limit(10);// 退出连接
exit;