לדלג לתוכן

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

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

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

  1. מטרת השיעור (Objective):

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

  1. Discussion (Script):

  2. "ברוכים הבאים לשיעור שבו הכל מתחיל להיות אמיתי."

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

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

  10. פתחו את Terminal:

    • השתמשו ב-Spotlight (Cmd+Space והקלידו Terminal).
  11. הגדילו את הטקסט:
    • לחצו Cmd + כדי שכל הכיתה תראה.
  12. הריצו pwd:
    • הראו היכן מתחילים (תיקיית הבית של המשתמש).
  13. הריצו ls -la:
    • הדגימו הבדל בין קבצים רגילים לנסתרים (מתחילים בנקודה).
  14. הקלידו פקודה ארוכה והדגימו קיצורים:
    • Ctrl + A לקפיצה להתחלה.
    • Ctrl + E לקפיצה לסוף.
  15. הריצו פקודה ש"נתקעת":
    • הריצו ping 1.1.1.1 להדגמת ריצה אינסופית.
  16. עצרו את הפקודה:
    • לחצו Ctrl + C.
    • הסבירו שזהו לחצן ה"ביטול/הצלה" לתהליכים עקשניים בטרמינל.
  17. נקו את המסך:

    • הריצו clear (או לחצו Ctrl + L).
  18. Instructor Deep-Dive:

הרחבה טכנית למדריך (TCC וחסימות טרמינל)

מה קורה אם הטרמינל כותב "Operation not permitted"?

  • זה לא באג של הרשאות (קריאה/כתיבה).
  • זוהי התערבות של מנגנון ה-TCC (Transparency, Consent, and Control).
  • מגבלות הגישה:
    • מ-Mojave (ובעיקר מ-Catalina), אין לטרמינל גישה לתיקיות רגישות (Desktop, Documents, Downloads).
    • זה קורה גם אם מריצים כ-sudo או כמשתמש מנהל.
  • איך פותרים את זה?
    1. פתרון מקומי:
      • היכנסו אל System Settings > Privacy & Security.
      • תנו Full Disk Access לאפליקציית Terminal.
    2. פתרון ארגוני מנוהל (MDM):
      • דוחפים פרופיל PPPC (Privacy Preferences Policy Control).
      • הפרופיל מאשר מראש (Pre-approved) גישה לסקריפטים, לטרמינל ולכלי ה-MDM.
      • מונע הופעת חלונות קופצים מטרידים למשתמש הקצה המבקשים גישה.

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

  1. מטרת השיעור (Objective):

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

  1. Discussion (Script):

  2. "כשמדליקים את המק:"

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

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

  7. פתחו פיינדר והדגימו ניווט:

    • השתמשו בתפריט Go -> Go to Folder (קיצור Cmd+Shift+G).
  8. נווטו אל /System/Library/LaunchDaemons:
    • הסבירו: "אלו שירותי הליבה של אפל".
    • ציינו שהם נעולים תחת ה-SSV ואי אפשר למחוק אותם.
  9. נווטו אל /System/Library/LaunchAngels (במידה ואתם מריצים Tahoe):
    • הראו את הקטגוריה החדשה של שירותי מערכת מנוהלי RunningBoard.
  10. נווטו אל /Library/LaunchDaemons (בלי System):
    • הסבירו: "כאן יושבות חברות צד שלישי (CrowdStrike, Jamf)".
    • ה-Daemons כאן רצים תמיד ברקע ברמת המערכת.
  11. נווטו אל ~/Library/LaunchAgents (עם טילדה):
    • הסבירו: "כאן נשמרים סוכנים אישיים של המשתמש".
  12. הראו את מבנה השמות:

    • הדגימו שימוש ב-Reverse Domain Name.
  13. Instructor Deep-Dive:

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

ניהול שירותים שנתקעו (launchctl):

    • לפרוק (Unload) שירות: sudo launchctl bootout system /Library/LaunchDaemons/com.example.plist

    לפעמים Daemon קורס ולא מתאושש, או שדורש איפוס. במקום ריסטרט למחשב:

    • לטעון מחדש (Load): sudo launchctl bootstrap system /Library/LaunchDaemons/com.example.plist

הערת Background Task Management (BTM):

  • מ-macOS Ventura קיים מנגנון BTM תחת System Settings > General > Login Items & Extensions.
  • הסכנה: אם משתמש כיבה שירות רקע, launchctl bootstrap ייכשל עם Service cannot load in requested session.
  • הפתרון הארגוני: דחיפת פרופיל ServiceManagement דרך ה-MDM הנועל את שירותי הארגון ומונע מהמשתמש לכבות אותם.

אבחון מתקדם ב-Tahoe (פקודת sfltool):

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

3. אבחון עמוק

  1. מטרת השיעור (Objective):

המשתתפים ילמדו כיצד לאבחן תקלות בזמן אמת דרך עומסי זיכרון (Memory Pressure) ב-Activity Monitor, ויכירו את מבנה ודרכי האבחון של קבצי תצורה מסוג Plist.

  1. Discussion (Script):

  2. "שאלה נפוצה בתמיכה: למה המק שלי איטי?"

    • משתמשים וטכנאים רגילים לבדוק "כמה RAM פנוי נשאר".
    • ב-macOS מודרנית זו שאלה שגויה מיסודה.
  3. "למה זיכרון פנוי הוא זיכרון מבוזבז?"
    • המערכת שואפת למלא את ה-RAM במידע (Cache) כדי לרוץ מהר יותר.
  4. "המדד האמיתי: Memory Pressure (עומס זיכרון):"
    • הגרף ב-Activity Monitor אומר לנו איך המק מרגיש.
    • ירוק: הכל מעולה.
    • צהוב: המק מתאמץ, דוחס זיכרון במקום (Memory Compression).
    • אדום: סכנה. המק כותב המון מידע מה-RAM לכונן הקשיח (Swap). פה מתחילות האיטיות והקריסות.
  5. "קצת היסטוריה מאחורי הקלעים:"
    • ה-Activity Monitor המוכר נוצר ב-2003 מאיחוד תוכנות קטנות (Process Viewer ו-CPU Monitor). ה-Plist הגיע מ-NeXTSTEP, והמעבר לפורמט בינארי ב-2002 נועד לשפר ביצועים ולמנוע שגיאות.
  6. "חקירת הגדרות וקריסות (Plists):"

    • כל הגדרה של כל אפליקציה במק נשמרת בקובץ Plist (Property List).
    • הפתרון האמיתי לקריסות ספציפיות: קריאה נכונה של ה-Plist או איפוסו.
  7. הדגמה מעשית (Demonstration):

  8. פתחו את Activity Monitor:

    • עברו ללשונית Memory.
    • הראו בתחתית המסך את גרף ה-Memory Pressure.
  9. הראו את עמודת Swap Used:
    • הסבירו: נתון גבוה + גרף אדום = סכנה ובעיה. לחפש "Memory Leak".
  10. הדגימו קבצי Plist:
    • פתחו Finder ונווטו אל ~/Library/Preferences.
    • פתחו קובץ Plist עם TextEdit (להראות XML).
  11. הדגימו בדיקת תקינות עם plutil:

    • פתחו Terminal והקלידו: plutil -lint /Users/youruser/Library/Preferences/com.apple.finder.plist
    • הסבירו שהפקודה מבצעת "Linting" (בדיקת תקינות תחבירית).
  12. Instructor Deep-Dive:

הרחבה טכנית למדריך (קריאת Plists ו-Cache)

המרת קבצי Plist בינאריים (plutil):

  • לקריאה מהירה למסך: plutil -p /path/to/file.plist
  • להמרה ל-XML עריך: sudo plutil -convert xml1 /path/to/file.plist
  • להמרה חזרה לבינארי: sudo plutil -convert binary1 /path/to/file.plist

סכנת ה-cfprefsd:

  • תהליך cfprefsd מטמין (Caches) קבצי Plist בזיכרון.
  • עריכה ידנית בעורך טקסט עלולה להדרס על ידי המטמון.
  • לכן, מומלץ להשתמש ב-defaults write הפועל מול מערכת המטמון ישירות.

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

  1. מטרת השיעור (Objective):

המשתתפים ילמדו כיצד סוכן ה-MDM משתלב כתהליך שקוף במערכת, ויבינו מה לחפש ב-Activity Monitor וב-Console כאשר פקודות MDM נכשלות.

  1. Discussion (Script):

  2. "איך מתנהל המחשב מול שרת MDM?"

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

    • חומת אש ארגונית (Firewall או Proxy) מיירטת תקשורת SSL.
    • חסימה של חיבור ה-Push של אפל (פורט 5223 או רשת 17.0.0.0/8).
  5. הדגמה מעשית (Demonstration):

  6. פתחו את אפליקציית Console:

    • חפשו את ה-mdmclient.
    • הראו את הפעילות הקשורה לסנכרון הפרופילים.
  7. פתחו Terminal להדגמת לוגים חיים (Streaming):
    • הפקודה: log stream --predicate 'process == "mdmclient"' --info
  8. ייצרו תנועה במערכת:

    • עברו ל-System Settings > Privacy & Security > Profiles והראו את הלוגים החדשים.
  9. Instructor Deep-Dive:

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

כפיית סנכרון מהלקוח:

  • פקודה כוחנית למשיכת פקודות משרת ה-MDM: sudo profiles renew -type enrollment

איתור חסימות ארגוניות ברשת (Certificate Pinning):

  • ה-mdmclient מוודא תעודות מול Apple ושרת ה-MDM. אם ה-Proxy מספק תעודה מזויפת (SSL Inspection), הוא מסרב לתקשר.
  • אינדיקציה בלוגים: שגיאות NSURLErrorDomain (כמו Error -1009, -1004).
  • הפתרון: בקשו מצוות הרשת לבצע Bypass / Whitelist לתקשורת מול Apple וה-MDM ללא SSL Inspection.