לפני כמה ימים קרתה לנו תקלה באחת מהתקנות המוודל בשרת הפיתוח, וכתוצאה מכך לא הצלחתי להיכנס למערכת. קיבלתי כל הזמן את ההודעה: “שם משתמש או סיסמה שהזנתם אינם תקינים”.
לפני שהבנתי שמדובר בתקלה בקוד (כתוצאה מטלאי 63183 שהחלנו) חשבתי שמשהו בסיסמה שלי השתבש ושעליי לאפס אותה. לכאורה נדמה שיכולתי פשוט להתחבר לשרת ה-DB, לעדכן את הסיסמה ע”י פקודת UPDATE פשוטה, ובא לציון גואל. הבעיה היא שמוודל שומר סיסמאות עם הצפנה של MD5 ואיזושהי המלחה (salt) ולכן עדכון הסיסמה הוא קצת פחות אינטואיטיבי. בחיפושיי אחרי דרך לאפס סיסמה בלי להיכנס למערכת מוודל מצאתי את התשובה הזאת שיש בה 3 הצעות לפתרון. כיוון שהן מפוזרות, וכיוון שבאחת מהן יש טעות קטנה, אני מביאה אותן כאן באופן מסודר לרווחת הכלל וגם לשימוש עתידי שלי (בתקווה שלא נצטרך).
- הפתרון הראשון והפלאי ביותר הוא דרך שורת הפקודה (המסך השחור, ויש שיאמרו – המפחיד). זה אומר שצריך גישת putty לשרת שמותקן בו moodle. הוא פלאי כי בניגוד לפתרונות הבאים, הוא לא מצריך אותנו להשתמש בשום הצפנה – מוודל מטפל בזה:
- נכנסים לתיקיית ההתקנה של מוודל וכותבים בשורת הפקודה:
sudo -u apache /usr/bin/php admin/cli/reset_password.php
את המילה apache יתכן שתצטרכו לשנות, לפי מערכת ההפעלה או השרת. למשל בשרת nginx צריך לשנות ל-nginx. בשרת Ubuntu צריך לכתוב www-data ובשרת CentOS כותבים httpd.
- כעת שורת הפקודה תבקש מכם להכניס שם משתמש
- ואז תבקש להכניס סיסמה.
- וזהו! הסיסמה שונתה! קסם!
- נכנסים לתיקיית ההתקנה של מוודל וכותבים בשורת הפקודה:
- פתרון שני מצריך רק גישה לשרת ה-DB של המוודל:
- מעדכנים את הסיסמה באמצעות פונקציית MD5 של Mysql:
UPDATE mdl_user SET password=MD5('NEW_PASSWORD') WHERE username='admin';
- זהו!
- מעדכנים את הסיסמה באמצעות פונקציית MD5 של Mysql:
- הפתרון השלישי גם כן נחמד, ובקישור יש גם צילומי מסך. הוא מצריך גישה לשרת ה-DB של המוודל, ולאיזשהו שרת שמריץ PHP.
במקום להשתמש בפונקציית MD5 כדי להצפין את הסיסמה, מצפינים את הסיסמה ע”י פונקציה של PHP.
** שימו לב שבפתרון המקורי יש טעות בפרמטר השני שמועבר לפונקציהpassword_hash
: בפתרון שמוצע בפורום משתמשים ב-<strong>PASSWORD_BCRYPT</strong>
, אבל המוודל מצפה לפרמטר<strong>PASSWORD_DEFAULT</strong>
. הקוד להלן הוא אחרי תיקון.- מריצים באיזשהו קובץ PHP פקודה שעושה hash לסיסמה שבחרנו (בדוגמה הוא בחר את המילה test. כמו שאמרו חכמינו: אל תנסו את זה בבית), שומרים את התוצאה במשתנה ומדפיסים אותה למסך:
$pass=password_hash("test", PASSWORD_DEFAULT); echo "password: " . $pass;
- את הסיסמה המוצפנת מעתיקים ומכניסים לטבלת היוזר בהתאמה לשם המשתמש הרצוי. למשל, נניח שהסיסמה שנוצרה לנו בסעיף הקודם היא
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
ושם המשתמש הוא admin, זאת הפקודה שאיתה נעדכן את הסיסמה:UPDATE mdl_user SET password='$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a' where username = 'admin'
- זהו!
- מריצים באיזשהו קובץ PHP פקודה שעושה hash לסיסמה שבחרנו (בדוגמה הוא בחר את המילה test. כמו שאמרו חכמינו: אל תנסו את זה בבית), שומרים את התוצאה במשתנה ומדפיסים אותה למסך:
