如何在 Ubuntu 上安装 MongoDB 并确保其安全性

简介

MongoDB是一个开源的、跨平台的、分布式的NoSQL(非SQL或非关系型)数据库系统。与传统SQL数据库不同,MongoDB不使用表格存储数据,而是使用灵活的文档来存储各种数据形式。MongoDB使用二进制JSON格式BSON来存储数据。

MongoDB是一个具有内置高可用性、自动故障转移和数据冗余的分布式NoSQL数据库,通过在分布式集群中进行分片来实现水平扩展。它支持多区域地理部署,并提供支持CRUD操作(读写)、数据聚合管道、文本搜索和地理空间查询的查询API。

在本指南中,我们将向你展示如何在Ubuntu 22.04服务器上安装MongoDB。你将准备你的Ubuntu服务器,添加MongoDB仓库,安装MongoDB服务器,为MongoDB创建管理员,并启用MongoDB认证。最后,你将学习如何使用'mongosh' shell在MongoDB中创建用户和数据库。

接下来,我将一步一步教大家如何进行安装和部署!!

准备工作

服务器准备

必要前提:

  • 一个充满求知欲的大脑。
  • 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。

我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。

注册链接: https://rainyun.ivwv.site

创建雨云服务器

以下步骤仅供参考,请根据实际需求选择配置。

  • 点击 云产品云服务器立即购买
  • 选择距离你较近的区域,以保证低延迟。
  • 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
  • 最后按照提示进行购买。
  • 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。
  • 我们使用 PowerShell 进行 SSH 远程连接到服务器,Win+R 打开运行窗口,输入 powershell 后点击确定。
  • 输入 ssh root@你的服务器IP 例如 ssh [email protected] 回车后,首次需要输入 yes,再次回车后即可登录服务器。
  • 到此为止,我们的云服务器就远程连接上了。

开始部署

准备系统

在你的Ubuntu系统上安装MongoDB之前,请确保你已配置系统。在这种情况下,你将使用以下配置Ubuntu服务器:

  • 通过systemd禁用透明大页面 (THP)
  • 增加默认MongoDB mongod用户的上限
  • 通过/etc/sysctl.conf文件设置最大fs.file-max和启用swappiness

禁用透明大页面 (THP)

要在系统上禁用THP,你将创建一个新的systemd服务文件,该文件将在每次启动时自动执行。

使用nano编辑器创建一个新的服务文件/etc/systemd/system/disable-thp.service

bash 复制代码
sudo nano /etc/systemd/system/disable-thp.service

插入以下配置以通过服务禁用THP。

复制代码
[Unit]
Description=Disable Transparent Huge Pages (THP)

[Service]
Type=simple
ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag"

[Install]
WantedBy=multi-user.target

保存文件并退出编辑器。

现在运行以下systemctl命令重新加载systemd管理器,启动并启用disable-thp服务。这样,THP将在系统启动时被禁用。

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl enable --now disable-thp.service

设置Ulimits

禁用THP后,你需要将用户mongod的默认最大文件和进程数增加到至少64000

使用以下nano编辑器命令创建新文件/etc/security/limits.d/mongodb.conf

bash 复制代码
sudo nano /etc/security/limits.d/mongodb.conf

插入以下配置将最大文件打开和进程数增加到64000

复制代码
mongod soft nproc 64000
mongod hard nproc 64000
mongod soft nofile 64000
mongod hard nofile 64000

保存文件并退出编辑器。

设置swappiness和fs.file-max

最后,你需要增加默认fs.file-max并为MongoDB启用swappiness。为此,你将编辑/etc/sysctl.conf文件。

使用nano编辑器命令打开文件/etc/sysctl.conf

bash 复制代码
sudo nano /etc/sysctl.conf

插入以下配置设置fs.file-max并启用swappiness。

复制代码
fs.file-max = 2097152
vm.max_map_count = 262144
vm.swappiness = 1

完成后,保存文件并退出编辑器。

现在运行以下sysctl命令应用更改而不重启。

bash 复制代码
sudo sysctl -p

使用APT包管理器安装MongoDB

现在你已经配置了Ubuntu系统,准备安装MongoDB。在本节中,你将从官方MongoDB仓库安装最新版本的MongoDB 8.0。

首先,运行以下apt命令更新你的Ubuntu包索引并安装gnupgcurl包。输入'Y'确认安装。

bash 复制代码
sudo apt update && sudo apt install gnupg curl

现在运行以下命令添加MongoDB的GPG密钥和仓库。在这个例子中,你将在Ubuntu 22.04服务器上安装MongoDB 8。

bash 复制代码
curl -fsSL <https://www.mongodb.org/static/pgp/server-8.0.asc> | \\
sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg \\
--dearmor
bash 复制代码
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] <https://repo.mongodb.org/apt/ubuntu> noble/mongodb-org/8.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list

接下来,运行以下apt命令更新你的包索引并安装mongodb-org包到你的系统。输入'Y'继续安装。

bash 复制代码
sudo apt update && sudo apt install mongodb-org

安装完成后,执行以下systemctl命令重新加载systemd管理器。mongod服务已添加到你的Ubuntu系统。

bash 复制代码
sudo systemctl daemon-reload

最后,运行以下命令启动、启用并验证MongoDB mongod服务。你将看到MongoDB在你的系统上运行。

bash 复制代码
sudo systemctl enable --now mongod
sudo systemctl status mongod

保护MongoDB服务器

安装MongoDB后,你将通过以下步骤保护MongoDB服务器安装:

  • 使用mongosh shell为MongoDB创建一个新的管理员用户
  • 通过编辑配置/etc/mongod.conf文件启用MongoDB认证

创建MongoDB管理员用户

在本节中,你将通过mongosh shell为MongoDB创建一个新的管理员用户。mongosh shell是一个客户端命令行,用于与MongoDB服务器交互,它类似于MySQL/MariaDB的mysql和PostgreSQL的psql

要创建管理员用户,请使用以下mongosh shell命令登录到MongoDB服务器。

bash 复制代码
mongosh

现在运行以下查询禁用MongoDB遥测。

jsx 复制代码
disableTelemetry()

接下来,转到数据库admin并运行以下查询为MongoDB创建一个新的管理员用户。在这个例子中,你将创建一个新用户myAdmin,然后系统会提示你输入新密码。

jsx 复制代码
use admin
jsx 复制代码
db.createUser(
{
    user: "myAdmin",
    pwd: passwordPrompt(),
    roles: [
        { role: "userAdminAnyDatabase", db: "admin" },
        { role: "readWriteAnyDatabase", db: "admin" }
    ]
}
)

现在输入quit()退出MongoDB shell。

启用MongoDB认证

现在你已经创建了MongoDB管理员用户,你可以通过/etc/mongod.conf文件启用MongoDB认证。

使用以下nano编辑器命令打开默认的MongoDB服务器配置/etc/mongod.conf

bash 复制代码
sudo nano /etc/mongod.conf

添加以下行以在MongoDB中启用认证。

复制代码
security:
    authorization: enabled

完成后,保存文件并退出编辑器。

现在运行以下systemctl命令重启MongoDB服务器并应用更改。这样,MongoDB认证将被启用。

bash 复制代码
sudo systemctl restart mongod

测试MongoDB认证

现在你已经保护了MongoDB服务器安装,让我们通过使用mongosh shell和新管理员用户及密码登录到MongoDB来验证你的配置。

使用以下mongosh命令以用户myAdmin登录到MongoDB服务器。系统会提示你输入密码。

bash 复制代码
mongosh --port 27017 --authenticationDatabase \\
"admin" -u "myAdmin" -p

登录后,运行以下查询检查你的连接状态。你应该已经使用myAdmin用户登录到MongoDB服务器。

jsx 复制代码
db.runCommand({connectionStatus : 1})

现在输入quit()退出MongoDB服务器。

在MongoDB中创建数据库和用户

在本节中,你将学习如何使用mongosh shell在MongoDB中创建新的数据库和用户。因此,请确保你已经以管理员用户登录到MongoDB。

首先,运行以下查询转到数据库mydb

jsx 复制代码
use mydb

现在运行以下查询创建一个新用户myUser,并允许对数据库mydb进行读写访问。系统会提示你输入密码。

jsx 复制代码
db.createUser(
{
    user: "myUser",
    pwd: passwordPrompt(), // or cleartext password
    roles: [ { role: "readWrite", db: "mydb" },
             { role: "read", db: "reporting" } ]
}
)

输入quit()退出MongoDB服务器。

现在运行以下mongosh命令以myUser身份登录到数据库mydb。系统会提示你输入密码。

bash 复制代码
mongosh --port 27017 --authenticationDatabase \\
"mydb" -u "myUser" -p

登录后,使用以下查询检查你的连接状态。

jsx 复制代码
db.runCommand({connectionStatus : 1})

你可以看到你已经使用用户myUser和对数据库mydb的权限连接到了MongoDB服务器。

相关链接

雨云 - 新一代云服务提供商: https://rainyun.ivwv.site

我的博客:https://blog.ivwv.site

相关推荐
江沉晚呤时27 分钟前
C#中观察者模式(Observer Pattern)深入解析
java·服务器·数据库
愚润求学1 小时前
Linux开发工具——gcc
linux·服务器·开发语言
科创未来1 小时前
自动化备份全网服务器数据平台
服务器·自动化·github
照书抄代码1 小时前
Linux中用gdb查看coredump文件
linux·运维·服务器
czhc11400756631 小时前
Linux2 CD LL hostnamectl type mkdir dudo
运维·服务器
一大Cpp1 小时前
随笔1 认识编译命令
linux·opencv·ubuntu
ℳℓ白ℳℓ夜ℳℓ1 小时前
Linux网络应用层自定义协议与序列化
linux·运维·服务器
江沉晚呤时1 小时前
如何深入理解C#中的备忘录模式(Memento Pattern)设计模式
运维·服务器·数据库·c#·.netcore
23zhgjx-hyh1 小时前
IS-IS认证
运维·服务器·网络
JohnYan2 小时前
工作笔记 - PHP系统升级到7.4
linux·后端·php