MongoDB數據庫高并發商業實踐優化·運行優化之不可使用root賬戶進行MongoDB運行-優雅草卓伊凡

MongoDB數據庫高并發商業實踐優化·運行優化之不可使用root賬戶進行MongoDB運行-優雅草卓伊凡

引言

關于最近優雅草卓伊凡發布關于MongoDB的內容是由于我們的甲方上線了一個很老的產品,但是他的用戶量極大,并且還有各種人搞事情,不斷的來GJ,上線剛開始還能勉強撐著,但是隨著用戶量急劇上升,包括他們的收入訂單各方面,以及請求次數的規模及上升,老古董即便是java +spring +redis 配 cdn 加靈活帶寬都抗不住問題,而且上線后出問題后都很復雜,這核心有一點就是數據庫,MongoDB 我們的版本是3.4.0 而云數據庫也就是騰訊云買900多元一月 基礎的云MongoDB數據庫都是需要最低4.4版本的,這個可就難了,我們版本太老 ,升級的復雜度不亞于重構,于是在這個環境下我們測試環境已經安排在重構,但是生產環境頂著壓力做優化,既然是做優化那么在這么老版本的情況下就有很多挑戰,很慶幸在我們技術同事以及技術總監卓伊凡的帶領下在7月23日終于得到了突破進展,中途有特別多的問題,由卓伊凡拆分一一記錄和學習,讓我們對數據的深度理解也非常有幫助,在過程中我們積累了很多知識可以逐步細化消化。

Loaded: loaded (/etc/systemd/system/mongod.service; enabled; preset: disabled)
Active: activating (auto-restart) (Result: exit-code) since Wed 2025-07-23 21:38:10 CST; 1s ago
Docs: What is MongoDB? - Database Manual - MongoDB Docs
Process: 238158 ExecStart=/opt/mongodb-3.4.0/bin/mongod —config /opt/mongodb-3.4.0/mongo.conf (code=exited, status=217/USER)
Main PID: 238158 (code=exited, status=217/USER)
CPU: 690us

在那天我們發現有不正常運行,檢查了MongoDB 的運行狀態。

由于在教科書中有寫到我們不能用root帳號運行也會造成頻繁掉線的問題,這就不得詳細講了

在生產環境中,禁止使用 root 用戶運行 MongoDB 是一項重要的安全最佳實踐。以下從安全風險、權限管理、故障排查和性能影響四個方面詳細闡述原因:

一、安全風險:為什么不能用 root 運行 MongoDB?

1. 權限提升攻擊風險
  • 任意文件讀寫:若 MongoDB 被攻擊(如通過注入漏洞),root 權限的進程可直接訪問/修改系統文件(如 /etc/passwd、SSH 密鑰)。
  • 持久化后門:攻擊者可利用 root 權限在系統啟動腳本中植入后門,實現持久控制。
2. 最小權限原則失效
  • MongoDB 僅需讀寫數據目錄和日志文件的權限,root 權限遠超實際需求。
  • 遵循 最小權限原則(Least Privilege)可降低單點故障的影響范圍。
3. 防御縱深缺失
  • 若 MongoDB 被攻破,普通用戶權限的進程最多只能影響數據目錄,而 root 權限將導致整個系統淪陷。

二、權限管理:為什么需要專用用戶?

1. 文件所有權隔離
  • 專用用戶(如 mongodb)確保數據文件(/data/mongodb)和配置文件(/opt/mongodb-3.4.0)的所有權清晰。
  • 避免與其他服務(如 MySQL、Nginx)的文件權限沖突。
2. 進程隔離
  • systemd 可基于用戶限制資源使用(如 LimitNOFILEMemoryMax):
[Service]
User=mongodb
Group=mongodb
LimitNOFILE=64000
MemoryMax=8G  # 限制 MongoDB 最大內存使用
3. 審計追蹤
  • 專用用戶便于日志審計:
# 查看 mongodb 用戶的所有操作
sudo ausearch -ua mongodb

三、故障排查:為什么 root 會掩蓋問題?

1. 權限錯誤被隱藏
  • root 用戶可繞過文件權限檢查,導致配置錯誤(如錯誤的目錄權限)在測試階段不暴露,上線后普通用戶無法啟動服務。
2. 系統資源競爭
  • root 進程可能無限制占用系統資源(如內存、文件描述符),導致其他服務崩潰。
  • 專用用戶可通過 ulimit 限制資源使用:
# 編輯 /etc/security/limits.conf
mongodb hard nofile 64000
mongodb soft nofile 64000

其實這里 也存在一個文件描述 頻繁導致掉線也解決的一個問題,我們單獨一篇來講。

我們這個地方 也是修改了

四、性能影響:使用專用用戶會變慢嗎?

1. 無直接性能損耗
  • 進程權限本身不影響 MongoDB 性能,但錯誤的權限配置可能間接導致問題:
    • 例如,root 用戶創建的文件可能被 MongoDB 用戶(如 mongodb)拒絕訪問,觸發頻繁的權限檢查。
2. 資源限制優化性能
  • 通過 systemd 限制 MongoDB 內存使用可避免系統 OOM(Out of Memory):
[Service]
MemoryMax=32G  # 適用于 64GB 系統,防止 MongoDB 耗盡內存
3. 權限與磁盤 I/O
  • 專用用戶確保文件權限一致性,避免因權限問題導致的磁盤 I/O 性能下降。

五、最佳實踐:如何正確配置專用用戶?

1. 創建專用用戶和組
sudo groupadd -r mongodb
sudo useradd -r -g mongodb -d /data/mongodb -s /bin/false mongodb
2. 設置正確的文件權限
sudo chown -R mongodb:mongodb /data/mongodb
sudo chown -R mongodb:mongodb /opt/mongodb-3.4.0
3. 配置 systemd 服務文件
[Service]
User=mongodb
Group=mongodb
WorkingDirectory=/data/mongodb
ExecStart=/opt/mongodb-3.4.0/bin/mongod --config /opt/mongodb-3.4.0/mongo.conf

這就不得不提到我之前寫的蜻蜓I即時通訊 水銀版搭建方法中有關于數據庫的啟動,因此這里非常不嚴謹

這個就非常的不對,

六、對比實驗:root vs 專用用戶的差異

指標

root 用戶

專用用戶

文件權限沖突

高(可能覆蓋系統文件)

低(僅訪問數據目錄)

系統安全風險

極高(權限提升攻擊)

低(最小權限原則)

故障排查復雜度

高(權限錯誤被掩蓋)

低(權限問題直接暴露)

資源隔離能力

無(可能耗盡系統資源)

有(可通過 systemd 限制)

審計追蹤可行性

困難(與系統操作混淆)

容易(專用用戶日志清晰)

七、總結:為什么必須使用專用用戶?

  1. 安全層面:降低權限提升攻擊風險,遵循最小權限原則。
  2. 管理層面:實現進程隔離、文件權限清晰和審計追蹤。
  3. 故障排查:避免權限錯誤被隱藏,提高問題定位效率。
  4. 性能影響:正確配置下無負面影響,反而可通過資源限制優化性能。

建議:立即將 MongoDB 服務從 root 用戶遷移至專用用戶,并通過 systemd 確保服務以正確用戶身份運行。

我們做到了最終 是以MongoDB 運行。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/916370.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/916370.shtml
英文地址,請注明出處:http://en.pswp.cn/news/916370.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

戴爾電腦 Linux 安裝與配置指南_導入mysql共享文件夾

本指南將詳細介紹在戴爾電腦上安裝 Linux 操作系統的步驟,以及后續的重要配置,包括系統選擇、安裝流程、MySQL 數據恢復、網絡配置、文件共享和遠程維護等。步驟清晰且配有命令行示例和配置文件示例,適合初中級用戶參考。1、Linux 系統選擇與…

昇思學習營-DeepSeek-R1-Distill-Qwen-1.5B 模型LoRA微調學習心得

LoRA微調:加入參數式微調凍結原始網絡參數,對Attention層中QKV等添加旁支,包含兩個低維度的矩陣A和矩陣B,微調過程中僅更新A、B 矩陣效果:訓練參數被大幅降低,資源消耗較低。對attention的參數加入如下圖所…

彩色轉灰度的核心邏輯:三種經典方法及原理對比

灰度實驗將彩色圖像轉換為灰度圖像的過程稱為灰度化,這種做法在圖像處理和計算機視覺領域非常常見。灰度圖與彩色圖最大的不同就是:彩色圖是由R、G、B三個通道組成,而灰度圖只有一個通道,也稱為單通道圖像,所以彩色圖轉…

Spring Boot 項目啟動自動執行邏輯的最佳實踐:掌握 CommandLineRunner

前言 Spring Boot 啟動階段,總有些操作迫不及待沖在前線:配置要加載,數據要準備,日志要搶首發,仿佛個個爭當“啟動 MVP”。如果你也想讓項目一啟動就自動開工,少寫點手動觸發的“苦力邏輯”,那 CommandLineRunner 就是你的得力助手。它像那個永遠第一個打卡的同事,不喝…

高可用集群KEEPALIVED的詳細部署

一.高可用集群 1.1 集群類型 LB:Load Balance 負載均衡 LVS/HAProxy/nginx(http/upstream, stream/upstream) HA:High Availability 高可用集群 數據庫、Redis SPoF: Single Point of Failure,解決單點故障 HPC&#x…

[論文閱讀] 人工智能 + 軟件工程 | NoCode-bench:評估LLM無代碼功能添加能力的新基準

NoCode-bench:評估LLM無代碼功能添加能力的新基準 論文:NoCode-bench: A Benchmark for Evaluating Natural Language-Driven Feature Addition 研究背景:當AI嘗試給軟件"加新功能",我們需要一張靠譜的"考卷"…

【Git知識】Git 常用知識集合之基礎--分支系統與 Tag 標簽機制

🧰 Git 常用知識集合Git 是程序員的“時間機器”。這份手冊幫你從入門到精通,把 Git 玩明白。1?? Git 基礎操作流程 📌 三步走流程:添加 → 提交 → 推送 git add . # 把所有修改加入暫存區 git commit -m …

深入解析 Spark:關鍵問題與答案匯總

在大數據處理領域,Spark 憑借其高效的計算能力和豐富的功能,成為了眾多開發者和企業的首選框架。然而,在使用 Spark 的過程中,我們會遇到各種各樣的問題,從性能優化到算子使用等。本文將圍繞 Spark 的一些核心問題進行…

Python-初學openCV——對openCV的簡單使用

一、概述1、簡單介紹OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺庫,旨在為實時圖像處理提供強大的功能。它由Intel開發,現由開源社區維護。OpenCV 提供了跨平臺的解決方案,支持 Windows、Linu…

去中心化時代的通信革命:briefing與cpolar技術融合帶來的安全范式革新

文章目錄前言1.關于briefing2.本地部署briefing3.使用briefing4.cpolar內網穿透工具安裝5.創建遠程連接公網地址6.固定briefing公網地址前言 數字協作本該是提升效率的過程,卻被這些數據管理問題不斷困擾:平臺條款中的監控聲明、跨網絡環境的接入障礙、…

GitHub新手生存指南:AI項目版本控制與協作實戰

點擊 “AladdinEdu,同學們用得起的【H卡】算力平臺”,H卡級別算力,按量計費,靈活彈性,頂級配置,學生專屬優惠。 代碼倉庫創建 分支管理 PR提交 開源項目復現 讀者收獲:掌握團隊開發必備技能…

Axios封裝以及添加攔截器

在前端開發中,http請求層的封裝可以極大提升代碼的復用性和可維護性,本文將完整的用axios封裝接口請求,配置請求與響應攔截器,封裝統一的請求方法全過程。封裝的目的和思路在項目直接用axios發送請求當然沒問題,但是如…

C語言中奇技淫巧04-僅對指定函數啟用編譯優化

相信很多人使用GCC編譯代碼時,都會接觸到gcc -O0/1/2/3/s,知道它可以對工程進行全局優化。 事實上,除了全局優化外,使用GCC擴展方式,我們還可以僅對部分關鍵函數實施差異化編譯優化。 在GCC編譯器中,attrib…

HTML Style 對象深度解析:從基礎到高級應用

一、Style 對象的核心概念定義與作用 Style 對象是 HTML DOM 中用于操作元素內聯樣式的接口,通過 element.style 訪問。它允許動態修改元素的 CSS 屬性,但僅能直接影響內聯樣式(即通過 style 屬性直接寫在標簽中的樣式)。與外部樣…

【C++】定義常量

在 C 中&#xff0c;有兩種簡單的定義常量的方式&#xff1a; 使用 #define 預處理器。使用 const 關鍵字。 #define 預處理器 #include <iostream> using namespace std;#define LENGTH 10 #define WIDTH 5 #define NEWLINE \nint main() {int area; area LENGTH …

基于遺傳算法的多無人車協同偵察與安全保護策略優化

基于遺傳算法的多無人車協同偵察與安全保護策略優化 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家&#xff0c;覺得好請收藏。點擊跳轉到網站。 1. 引言 1.1 研究背景與意義 隨著無人系統技術的快速發…

python面向對象編程詳解

面向對象編程&#xff08;OOP&#xff09;是一種以對象為核心的編程范式。Python全面支持OOP&#xff0c;主要包含以下核心概念&#xff1a;一、類與對象1.類(Class)類是創建對象的模板或藍圖&#xff0c;它定義了對象的屬性和方法。class Dog:# 類屬性&#xff08;所有實例共享…

快速入門Socket編程——封裝一套便捷的Socket編程——導論

快速入門Socket編程——封裝一套便捷的Socket編程——導論 前言 ? 這里是筆者打算做的Socket編程的第二部分&#xff0c;也就是核心的討論我們Socket編程本身。 導論 ? 我們知道&#xff0c;一個經典的服務器套接字的處理流程是如下的&#xff1a; 創建一個指定傳輸層和網絡層…

【Mermaid 離線工具】Mermaid 流程圖生成器 - 高清PNG輸出,一鍵生成專業級流程圖!

文章目錄 Mermaid 流程圖生成器(離線版本):高效繪圖,離線也能玩轉專業可視化 一、Mermaid:文本繪圖的 “魔法語法” 二、離線版生成器:功能與優勢解析 (一)離線可用,場景更靈活 (二)操作流程:簡單五步,產出專業圖表 (三)界面設計:簡潔直觀,降低使用門檻 三、應…

haproxy原理及實戰部署

一、負載均衡 負載均衡是網絡架構和分布式系統中至關重要的技術&#xff0c;其核心作用是將大量的并發請求或數據流量合理分配到多個服務器&#xff08;或其他資源節點&#xff09;上&#xff0c;從而解決單節點壓力過大、資源利用率低、系統穩定性差等問題。 作用1. 提高系統吞…