לדלג לתוכן

שיעור 08: טרמינל ושירותי רקע

חלק ב': מדריך העברה למרצה (גרסת vEXP מורחבת)

הערה למדריך: מסמך זה משמש כעריכת השיעור (Lesson Plan) וכולל את התסריט להעברת החומר מול הכיתה, תרחישי הדגמה, ומידע טכני מורחב שיעזור לך להתמודד עם שאלות קשות. שמור על טון שיחתי (Conversational), נגיש ומעשי, כפי שהוגדר בפרוטוקול הקורס. ההדגמות מבוססות על ממשק המשתמש הגרפי (GUI), בעוד פקודות ה-Terminal שמורות להעמקה מאחורי הקלעים.


1. מבוא לטרמינל (Terminal)

כיוון: המטרה כאן היא להפיל את חומת הפחד מהטרמינל. הסטודנטים חייבים להבין ש-Terminal הוא לא "האקרים בסרטים" אלא כלי העבודה הבסיסי והאמין ביותר של איש ה-IT, במיוחד כשדוחפים סקריפטים דרך כלי ניהול (MDM) למאות מחשבים. שאלת פתיחה טובה: "מי פה פעם כתב פקודה בטרמינל ונגעלת ממנה?"

  1. מטרת השיעור (Objective): המשתתפים יבינו מדוע ה-Terminal הוא כלי העבודה החשוב ביותר של איש ה-IT, וישרו קו על פקודות וקיצורי מקלדת בסיסיים לפני הצלילה לעומק המערכת.

  2. Discussion (Script):

  3. ברוכים הבאים לשיעור שבו הכל מתחיל להיות אמיתי:
    • עד עכשיו התעסקנו בעיקר בממשק הגרפי.
    • הממשק של המק יפה וחלק, נועד להחביא מורכבות.
    • כאנשי IT, אסור לנו להסתתר מאחורי תפריטים נוצצים.
  4. מתי הממשק הגרפי לא יעזור לנו?
    • כשיש תקלה, כשהמחשב קופא, כשהמשתמש חסר אונים.
  5. ומה לגבי ניהול ארגוני?
    • במערכות כמו Jamf או Intune, שולחים פקודות למאות מחשבים במקביל.
    • הכל מתבצע דרך סקריפטים בטרמינל, ולא עכבר.
  6. טריוויה היסטורית:
    • הטרמינל בירושה ממערכת NeXTSTEP (החל מ-Mac OS X Cheetah, 2001).
  7. מעבר ל-Zsh:
    • ברירת המחדל מ-macOS Catalina. מודרנית מ-Bash ומתאימה לאוטומציות.
  8. יישור קו בסיסי:

    • נלמד איך לנווט, לבטל פקודה שנתקעה ולקרוא מסך בלי להסתחרר.
  9. הדגמה מעשית (Demonstration):

  10. פתיחת טרמינל: Cmd+Space -> Terminal.
  11. הגדלת טקסט: Cmd + שכל הכיתה תראה.
  12. ניווט בסיסי:
    • pwd (איפה אנחנו?).
    • ls -la (מה יש כאן, כולל נסתרים).
    • cd ~, cd .., cd -.
  13. קיצורים קריטיים וטיפים "וואו":
    • גרירת קובץ (Drag & Drop): גררו קובץ מחלון Finder ישר לטרמינל כדי להראות איך הנתיב המלא מודבק אוטומטית ללא טעויות הקלדה.
    • הגשר ההפוך ל-Finder (open .): הריצו open . מתוך הטרמינל והראו איך נפתח חלון Finder בדיוק בתיקייה שבה עומדים!
    • Ctrl + A (התחלה), Ctrl + E (סוף).
  14. הצלת המצב (ביטול פקודה):
    • הריצו ping 1.1.1.1 (רץ לנצח).
    • הקישו Ctrl + C (עצירה כפויה).
  15. ניקוי מסך: clear (או Ctrl + L).

← זוכרים את TCC משיעור 03? זה בדיוק המנגנון שחוסם פקודות טרמינל גם כשאנחנו Admin. מכאן נדע איך לפתוח אותו.

  1. Instructor Deep-Dive:
הרחבה טכנית למדריך (TCC וחסימות טרמינל)

מה קורה אם הטרמינל כותב "Operation not permitted"? * זה לא באג של הרשאות (קריאה/כתיבה) - אלא חסימה של TCC! * מגבלות הגישה: מ-Mojave (ובעיקר Catalina), לטרמינל אין גישה לתיקיות רגישות (Desktop, Documents, Downloads) גם תחת sudo. * פתרון מקומי: תנו ל-Terminal הרשאת Full Disk Access ב-Privacy & Security. * פתרון ארגוני (MDM): דוחפים פרופיל PPPC (Privacy Preferences Policy Control) שמאשר מראש גישה לכלי ה-MDM והטרמינל ללא חלונות קופצים.


2. הלב של המערכת: launchd, DAS, ו-CTS

כיוון: החלק הזה עושה סדר ב"מי מריץ מה". כשטכנאי רואה תהליך ארגוני (כמו AV) הוא צריך לדעת איפה לחפש את ה"מנוע" שלו. ההבחנה בין Agent (משתמש) ל-Daemon (מערכת) היא הליבה של פתרון תקלות בשירותי רקע. שאלה לכיתה: "אם CrowdStrike מותקן על המק — זה Agent או Daemon?"

  1. מטרת השיעור (Objective): המשתתפים יכירו את תהליך ה-launchd, ה"אבא" של כל התהליכים במק, ויבינו את ההבדל הקריטי בין LaunchAgents, LaunchDaemons והשחקן החדש ב-Tahoe: ה-LaunchAngels.

  2. Discussion (Script):

  3. כשמדליקים את המק:
    • אחרי ה-Kernel, השליטה עוברת ל-launchd (PID 1). התוכנה הראשונה שקמה והאחרונה שיורדת.
  4. על מה הוא אחראי?
    • העלאת תהליכים, התנעה מחדש מקריסות, וסגירה מסודרת.
    • החליף מנגנוני cron היסטוריים, ועובד בשילוב עם DAS ו-CTS לתזמון חכם.
  5. השילוש הקדוש לאנשי תמיכה:

    1. LaunchDaemon (שד מערכתי): רץ תמיד ברקע כ-root מחוץ ללוגין (למשל סוכן MDM).
    2. LaunchAgent (סוכן אישי): נטען רק אחרי Login ורץ עם הרשאות המשתמש (למשל אייקונים בשורת התפריטים).
    3. LaunchAngels (מ-Tahoe 26): שירותי אפל פנימיים (RunningBoard) הנעולים תחת ה-SSV.
  6. הדגמה מעשית (Demonstration):

  7. ניווט ב-Finder (Cmd+Shift+G):

    • /System/Library/LaunchDaemons: שירותי אפל (SSV, נעול).
    • /System/Library/LaunchAngels (ב-Tahoe): הדור החדש של הליבה.
    • /Library/LaunchDaemons: כלי אבטחה של הארגון וצד שלישי (CrowdStrike, Jamf). ה-Daemons שכאן רצים תמיד ברקע ברמת המערכת.
    • ~/Library/LaunchAgents: שירותים של המשתמש בלבד.
  8. Instructor Deep-Dive:

הרחבה טכנית למדריך (BTM, sfltool ו-launchctl)

ניהול שירותים שנתקעו (launchctl): * במקום ריסטרט, אפשר לאתחל Daemon ספציפי: * Unload: sudo launchctl bootout system /Library/LaunchDaemons/com.example.plist * Load: sudo launchctl bootstrap system /Library/LaunchDaemons/com.example.plist

הסכנה ב-BTM (Background Task Management): * החל מ-Ventura, משתמשים יכולים לכבות שירותים דרך Login Items. * אם משתמש כיבה Daemon, פקודת ה-bootstrap תיכשל. * פתרון ארגוני: פרופיל ServiceManagement ב-MDM נועל את השירות.

אבחון קיצון ב-Tahoe (sfltool): * שליפת מאגר ה-BTM למסמך: sudo sfltool dumpbtm > ~/Documents/btmdump.txt * איפוס מלא (אופציה גרעינית): sudo sfltool resetbtm

← הקשר של launchd לתהליך האתחול (Boot Sequence) נלמד לעומק בשיעור 13 (Boot Process) — כאן launchd הוא PID 1 שקם אחרי ה-Kernel ומעלה את כל השאר. ← sfltool ו-BTM הם גם כלי Diagnostics — נחזור אליהם בשיעור 15 (Diagnostics) כחלק מאבחון תקלות Login Items.


3. אבחון עמוק

כיוון: המיקוד כאן הוא בשינוי התפיסה: שבירת המיתוס של "כמה ראם פנוי נשאר לי?". אנחנו מלמדים אותם לחפש צווארי בקבוק אמיתיים בעזרת לחץ הזיכרון, ואז להכיר את קבצי ה-Plist שמנהלים את ההגדרות מאחורי הקלעים. כדאי להגיד בפתח: "ה-RAM הפנוי הוא ה-RAM המבוזבז — המק אוהב למלא את הזיכרון."

  1. מטרת השיעור (Objective): המשתתפים ילמדו לאבחן תקלות בזמן אמת דרך עומסי זיכרון (Memory Pressure), ויכירו את המבנה של קבצי Plist.

  2. Discussion (Script):

  3. למה המק שלי איטי?
    • רוב האנשים שואלים "כמה RAM פנוי יש?". זו שאלה שגויה. זיכרון פנוי הוא זיכרון מבוזבז. המק רוצה למלא אותו ב-Cache.
  4. המדד האמיתי: Memory Pressure:
    • ירוק: הכל מעולה. צהוב: המק דוחס. אדום: המק משתמש ב-Swap. פה מתחילה האיטיות הדרסטית.
  5. חקירת תצורות (Plists):

    • כל הגדרה נשמרת ב-Plist. כדי לאבחן קריסה ספציפית, מאפסים או קוראים את ה-Plist הזה במקום לפרמט.
  6. הדגמה מעשית (Demonstration):

  7. Activity Monitor -> Memory:
    • הציגו את ה-Memory Pressure.
    • הראו את עמודת Swap Used - נתון גבוה פה שווה סכנה וייתכן דולף זיכרון (Memory Leak).
  8. חקירת Plists:
    • נווטו אל ~/Library/Preferences/.
    • פתחו Plist אקראי עם TextEdit (להמחשת ה-XML).
  9. בדיקת תקינות (Linting):
    • בטרמינל: plutil -lint ~/Library/Preferences/com.apple.finder.plist (תקין = OK).

← החלק הבא (MDM) בנוי על אותה תשתית Plist — ה-MDM בסך הכל שולח Plists שמעדכנים הגדרות במק.

  1. Instructor Deep-Dive:
הרחבה טכנית למדריך (קריאת Plists ו-Cache)

המרת קבצי Plist בינאריים (plutil): * קריאה מהירה: plutil -p /path/to/file.plist * המרה לטקסט: sudo plutil -convert xml1 /path/to/file.plist * המרה חזרה: sudo plutil -convert binary1 /path/to/file.plist

סכנת המטמון (cfprefsd): * תהליך cfprefsd שומר Plists בזיכרון. עריכה ידנית דרך Finder עשויה להידרס. * פתרון: תמיד עדיף להשתמש בפקודת defaults write שמתקשרת ישירות מול המטמון.


4. תיבול ארגוני (MDM)

כיוון: חשוב להראות לתלמידים שה-MDM אינו "קסם". הוא תהליך רגיל שרץ במק — mdmclient — ואפשר לעקוב אחריו, לדבג אותו, ולראות מתי הוא קורס. Console הוא החבר הכי טוב שלהם כאן. נקודה שחשוב להדגיש: MDM שלא עובד הוא לרוב בעיית רשת, לא בעיית macOS.

  1. מטרת השיעור (Objective): המשתתפים ילמדו כיצד סוכן ה-MDM משתלב כתהליך שקוף במערכת, ויבינו מה לחפש כשהפקודות מהשרת נכשלות.

  2. Discussion (Script):

  3. איך המק מתקשר עם ה-MDM?
    • יש לו סוכן רקע: mdmclient. הוא מקבל את הפקודות ומעביר ל-profiled להתקנה.
  4. איך זרימת העבודה נראית?
    • המק מאזין לשרתי ה-Push של אפל (APNs).
    • מקבל "Wake Up" ואז פונה לשרת ה-MDM (Polling) ומושך את הפרופילים המעודכנים.
  5. למה זה לפעמים נכשל?

    • רשתות ארגוניות (Firewall) חוסמות את שרתי אפל או מיירטות SSL, ו"שוברות" את החיבור.
  6. הדגמה מעשית (Demonstration):

  7. הדגמת Plist מקומי בטרמינל (קריאת הגדרות חיה):
    • הריצו: defaults read com.apple.dock autohide (הערך יהיה לרוב 0).
    • עברו ל-System Settings > Desktop & Dock והפעילו את המתג Automatically hide and show the Dock.
    • הריצו שוב את הפקודה בטרמינל והראו לכיתה שהערך השתנה ל-1!
    • הסבר לכיתה: "כך בדיוק פועל MDM — במקום שאנחנו נזיז מתג ב-GUI, ה-MDM שולח קובץ Plist מנוהל (Managed Preferences) שנאכף ברמת המערכת".
  8. המלצה פדגוגית למרצה: מאחר ומחשב ההדרכה אינו מנוהל ב-MDM, הציגו את צילום המסך של פרופיל MDM מתוך העזרים הוויזואליים להמחשת הממשק הארגוני.

  9. Instructor Deep-Dive:

הרחבה טכנית למדריך (כפיית סנכרון ושגיאות רשת)

כפיית סנכרון (MDM Sync): * פקודה למשיכת פקודות מיידית: sudo profiles renew -type enrollment

איתור חסימות ארגוניות ברשת (SSL Inspection): * ה-mdmclient מבצע Certificate Pinning. אם ארגון שם פרוקסי שחותך את התעודה, המק מסרב לדבר איתו. * סימן אזהרה בלוגים: שגיאות NSURLErrorDomain (Error -1009, -1004). * הפתרון: יש להגדיר ב-Firewall של החברה שכל תקשורת ל-17.0.0.0/8 (שרתי אפל) עוברת Whitelist מלא ללא סריקה.