איך לשלוט על בטיחות ה-MongoDB שלך

האקרים מתקדמים יותר, והם יודעים איך לנצל פגיעויות. אם יש לך נתונים רגישים במסד הנתונים של MongoDB שלך, חשוב לקחת את האבטחה ברצינות. אבל איך? אל תדאג! המדריך הזה יכול לעזור לך!

במדריך הזה, תלמד להגן על מסדי הנתונים שלך ב-MongoDB ולהרחיב קרינת האקרים על ידי הגדרת צעדים אבטחה.

קרא והתחל לשלוט באבטחת ה-MongoDB שלך!

דרישות מוקדמות

  • המדריך הזה יהיה הדגמה מעשית. כדי לעקוב, הקפד לוודא שיש לך את הפריטים הבאים:
  • A non-root user with sudo privileges.

יצירת משתמש מנהל מוקדם

MongoDB אין לו מערכת אימות מובנית. לפי ברירת מחדל, כל אחד שיש לו גישה למסד הנתונים יש פריבילגיות מנהל מלאות – זה סכני מדי! כיצד לאבטח את מסד הנתונים שלך? תיצור משתמש עם פריבילגיות מנהל ותנעל את מסדי הנתונים למשתמש המנהל הזה.

ההגדרה הזו מאפשרת לך לספק נקודת גישה יחידה עם הרשאות מנהל כלליות בעוד מגבילה את מה שכל משתמש יכול לעשות בתוך מסד הנתונים. לדוגמה, מפתחים יכולים לקבל גישה רק לקריאה במסדי הנתונים, בעוד מנהלים יכולים ליצור ולערוך נתונים.

1. פתח את הטרמינל שלך והפעל את הפקודה mongo ללא שום ארגומנטים. פקודה זו מאפשרת לך להתחבר למסד הנתונים של MongoDB שלך כמשתמש המנהל המוגדר כברירת מחדל.

משתמש זה מנהלי מאוד מאחר ויש לו גישה קריאה/כתיבה מלאה לכל המסדים בשרת, ומומלץ להימנע משימוש במשתמש זה לעבודה יומיומית.

mongo

תקבל אזהרה שאומרת פקודת בקרת גישה אינה מאופשרת…, כפי שמוצג למטה.

האזהרה הזו מציינת שכל אדם שיכול לגשת לשרת MongoDB יכול לבצע את הפעולות שהוא רוצה עם מסדי הנתונים. פעולות אלו כוללות אך אינן מוגבלות למחיקה, השלכת, עדכון מסדי הנתונים.

האזהרה הזו מופיעה משום שלא הפעלת בקרת גישה עדיין. אין צורך לדאוג מזה, לפחות לעכשיו. בהמשך תלמד כיצד להפעיל בקרת גישה בקטע הבא.

Connecting to your MongoDB shell

2. לאחר מכן, הפעל את הפקודה show dbs כדי להציג את כל מסדי הנתונים בשרת, כולל המסדי admin שאין משתמש רגיל מורשה לראות.

show dbs
Showing all databases on the server

3. הרץ את הפקודה use admin למטה כדי להחליף למסד הנתונים של מנהל המערכת מאחר והמוקד שלך הוא ביצירת משתמש מנהל מיוחד. הפקודה הזו משנה את ההקשר הנוכחי שלך במסד הנתונים לשימוש במסד הנתונים של מנהל המערכת, כפי שמוצג למטה.

MongoDB משתמשת במסד הנתונים של מנהל המערכת כדי לאחסן כללי בקרת גישה ולספק אימות מובנה, שמות משתמש וסיסמאות עבור משתמשים והתפקידים שלהם. אין באפשרותך למחוק או לשנות את מסד הנתונים של מנהל המערכת מאחר והוא חיוני לפעילות המסד הנתונים.

use admin
Switching to the admin database

4. כעת, העתק והדבק את הקוד למטה למסד הנתונים של Mongo ולחץ על Enter. קוד זה יוצר משתמש בשם AdminATA, עם סיסמה של LDWbPf6Fy9Ezs3Mv, אך תוכל להשתמש בפרטי הכניסה שאתה מעדיף.

משתמש זה יש גישה קריאה/כתיבה (readWriteAnyDatabase) לכל מסדי הנתונים וגישה למנהל לכל האוספים. אך למשתמש זה אין הרשאות למחוק או לשנות מסדי נתונים אחרים או לשנות את ההרשאות של משתמשים אחרים.

לאחר ביצוע הפקודה וקבלת הודעת שגיאה, אנא בדוק שוב את הקוד שלך ונסה שוב.

# השיטה db.createUser() יוצרת משתמש חדש במסד הנתונים הנוכחי עם ההרשאות שצוינו על ידי תפקידים.
db.createUser(
{
# ציון שם המשתמש AdminATA, אך תוכל להזין כל שם משתמש שתבחר
user: "AdminATA",
# השיטה passwordPrompt() היא פונקציה ייחודית המסייעת
# בספריית MongoDB לבקש ממך להזין סיסמה עבור משתמש AdminATA.
pwd: passwordPrompt(),
# ציון התפקידים שברצונך שהמשתמש AdminATA יכיל.
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)

5. ספק סיסמה מאובטחת כשיש לך בקשה, כפי שמוצג למטה, ולחץ על Enter.

Providing a secure password

למטה, ניתן לראות הודעת הוספת משתמש בהצלחה. הפלט הזה מאשר שיצרת משתמש בהצלחה עם הרשאות מנהל והגבלתם למינימום ההרשאות הדרושות.

בנקודה זו, כבר יש לך משתמש מנהל בשם AdminATA שיכול לעשות הכל שנדרש במסד הנתונים מבלי לתת גישה לכולם.

Verifying Successful Admin User Creation in MongoDB

6. לבסוף, הפעל את הפקודה exit כדי לצאת ממסד הנתונים של MongoDB.

exit
Leaving the mongo shell

הוספת אבטחה על ידי הפעלת אימות

עכשיו שיש לך משתמש מנהל, תוסיף שכבת אבטחה נוספת על ידי הפעלת אימות. בעזרת כך, תאפשר גישה למסד הנתונים רק למשתמשים עם פרטי כניסה נכונים.

אימות מתייחס לתהליך של אימות החיבור, בדרך כלל על ידי ספק שם משתמש וסיסמה או באמצעות טוקן אימות. אימות מבטיח כי אתה אדם מזהה את עצמך ולא מתחזה שמנסה לגשת למשאבים.

1. הפעל אימות על ידי עריכת קובץ התצורה של MongoDB עם ההגדרות הבאות ושמור את השינויים:

  • פתח את קובץ /etc/mongod.conf בעורך טקסט לבחירתך. קובץ /etc/mongod.conf מכיל הגדרות של קבוצת ה-MongoDB שלך.
  • חפש ובטל את ההערה של #security על ידי הסרת הסמל # מתחילת ההוראה, כפי שמוצג למטה. ההוראה הזו אומרת ל-MongoDB לחפש את הגדרת האבטחה בקובץ התצורה.
  • הוסף שורה חדשה מתחת להוראה של security שאומרת authorization: enabled. שים לב שהשורה authorization: enabled מוזחת (יש לה שני רווחים בתחילתה), כפי שמוצג למטה.
Adding the authorization parameter

2. לבסוף, הפעל את הפקודה הבאה של systemctl כדי לאתחל את שרת ה-MongoDB כדי שהשינויים ייכנסו לתוקף.

sudo systemctl restart mongod

3. לבסוף, הפעל את הפקודה הבאה כדי לראות את מצב השירות של MongoDB שלך.

sudo systemctl status mongod

הנה, תוכל לראות שורה שאומרת פעיל: פעיל (פועל) בטקסט ירוק, שמציינת שהשרת שלך MongoDB פועל ומוכן לקבל חיבורים.

Viewing MongoDB Service Status

בדיקת עבודת האימות

אתה כעת הפעלת אימות, אך איך תדע שזה עובד? תתחבר כמשתמש מנהל לבדוק ולוודא שהאימות שלך עובד על ידי צפייה במסדי נתונים.

1. הפעל את הפקודות הבאות כדי לגשת לקושחה של mongo כפי שעשית בקטע "יצירת משתמש מנהל מיועד" (שלב אחד).

mongo

כפי שאתה יכול לראות למטה, אתה לא מקבל יותר את האזהרה בקרת גישה אינה מופעלת… בנוגע להפעלת האימות. במקום זאת, תקבל הודעה שאומרת לך את גרסת השרת שלך ואת המקור של MongoDB.

Connecting to the MongoDB Shell

2. לאחר מכן, הפעל מחדש את הפקודה show dbs כדי לבדוק האם עדיין ניתן לגשת למסד הנתונים.

show dbs

הפקודה צריכה להציג לך את כל מסדי הנתונים, כולל מסד הנתונים המנהלי. אך כפי שאתה רואה למטה, אין דברים המוצגים. למה? צפייה ברשימת מסדי הנתונים היא הרשאה שמותרת רק למשתמשים מנהלים.

אתה לא אימתת את המסד שלך לשימוש בתפקיד המנהל, ולכן אין לך הרשאה להציג את רשימת מסדי הנתונים.

Listing All Databases (empty)

עם האימות מופעל, החיבור יכשל אם מישהו ינסה לגשת למסד הנתונים באמצעות מחרוזת חיבור שאין לה את פרטי הכניסה הנכונים.

אימות מחרוזות החיבור הוא חלק מרכזי באבטחת MongoDB, ועליך ליישם אימות בכל שכבות היישום. כל החיבורים ל־MongoDB חייבים להשתמש במחרוזת אימות הכוללת פרטי כניסה. פרטי הכניסה אלו כוללים את שם המשתמש והסיסמה הנכונים.

3. הפעל את הפקודה exit כדי לצאת ממסד הנתונים של MongoDB.

exit

4. כעת, הרץ את הפקודה למטה כדי להתחבר למסד הנתונים של MongoDB עם שם המשתמש של המשתמש הניהולי שנוצר עם הסיסמה (-u) והסיסמה (-p) שנוצרה. החלף AdminATA בשם המשתמש שיצרת בסעיף "יצירת משתמש ניהולי מיוחד" (שלב ארבעה).

הפרמטר --authenticationDatabase מגיד למסד הנתונים של MongoDB לאמת נגד מסד הנתונים admin.

mongo -u AdminATA -p --authenticationDatabase admin

5. ספק את הסיסמה שלך עבור המשתמש הניהולי שלך כאשר מתבקש.

Providing administrative password
logging into the MongoDB shell as an administrator

6. לבסוף, הפעל מחדש את הפקודה show dbs כדי לנסות ולראות האם אפשר לצפות בכל מסדי הנתונים.

show dbs

הפעם, כפי שאתה רואה למטה, רשימת מסדי הנתונים מופיעה מאחר ואתה משתמש מנהל.

Listing all databases as admin user

מסקנה

במדריך זה, למדת כיצד להתחבר ליצור משתמש ניהולי ולהפעיל אימות. למדת לשלוט באבטחת MongoDB שלך ולהטיל מגבלות על מי יכול לגשת למסדי נתונים בשרת שלך.

בנקודה זו, אתה יכול להחליט מי יכול לגשת למה. אז מה הלאה עבורך? אולי ללמוד איך להשתמש במכלול MongoDB בצורה מאובטחת?

Source:
https://adamtheautomator.com/mongodb-security/