שיעור 08: טרמינל ושירותי רקע¶
חלק ב': מדריך העברה למרצה (גרסת vEXP מורחבת)
1. מבוא לטרמינל (Terminal)¶
- מטרת השיעור (Objective):
המשתתפים יבינו מדוע ה-Terminal הוא כלי העבודה החשוב ביותר של איש ה-IT, וישרו קו על פקודות וקיצורי מקלדת בסיסיים לפני הצלילה לעומק המערכת.
-
Discussion (Script):
-
"ברוכים הבאים לשיעור שבו הכל מתחיל להיות אמיתי."
- "עד עכשיו התעסקנו בעיקר בממשק הגרפי:"
- הממשק של המק יפה וחלק.
- נועד להחביא מורכבות מהמשתמש.
- אבל כאנשי IT, אסור לנו להסתתר מאחורי תפריטים נוצצים.
- "מתי הממשק הגרפי לא יעזור לנו?"
- כשיש תקלה.
- כשהמחשב קופא.
- כשהמשתמש לא מצליח לעשות כלום.
- "ומה לגבי ניהול ארגוני?"
- במערכות כמו Jamf או Intune, שולחים פקודות למאות מחשבים במקביל.
- עושים זאת עם סקריפט בטרמינל, לא על ידי לחיצה על עכבר.
- "עובדת בונוס היסטורית:"
- הטרמינל והסקריפטים שאנחנו מריצים הגיעו בירושה ממערכת NeXTSTEP עם השקת Mac OS X Cheetah ב-2001.
- "מעבר ל-Zsh:"
- החל מ-macOS Catalina, זוהי שפת ברירת המחדל בטרמינל.
- מודרנית יותר מ-Bash.
- מתאימה יותר לאוטומציות של היום.
-
"לפני שנצלול פנימה, נעשה יישור קו:"
- נלמד איך לנווט.
- נראה איך לבטל פקודה שנתקעה.
- נלמד לקרוא את המסך בלי סחרחורת.
-
הדגמה מעשית (Demonstration):
-
פתחו את Terminal:
- השתמשו ב-Spotlight (
Cmd+Spaceוהקלידו Terminal).
- השתמשו ב-Spotlight (
- הגדילו את הטקסט:
- לחצו
Cmd +כדי שכל הכיתה תראה.
- לחצו
- הריצו
pwd:- הראו היכן מתחילים (תיקיית הבית של המשתמש).
- הריצו
ls -la:- הדגימו הבדל בין קבצים רגילים לנסתרים (מתחילים בנקודה).
- הקלידו פקודה ארוכה והדגימו קיצורים:
Ctrl + Aלקפיצה להתחלה.Ctrl + Eלקפיצה לסוף.
- הריצו פקודה ש"נתקעת":
- הריצו
ping 1.1.1.1להדגמת ריצה אינסופית.
- הריצו
- עצרו את הפקודה:
- לחצו
Ctrl + C. - הסבירו שזהו לחצן ה"ביטול/הצלה" לתהליכים עקשניים בטרמינל.
- לחצו
-
נקו את המסך:
- הריצו
clear(או לחצוCtrl + L).
- הריצו
-
Instructor Deep-Dive:
הרחבה טכנית למדריך (TCC וחסימות טרמינל)
מה קורה אם הטרמינל כותב "Operation not permitted"?
- זה לא באג של הרשאות (קריאה/כתיבה).
- זוהי התערבות של מנגנון ה-TCC (Transparency, Consent, and Control).
- מגבלות הגישה:
- מ-Mojave (ובעיקר מ-Catalina), אין לטרמינל גישה לתיקיות רגישות (Desktop, Documents, Downloads).
- זה קורה גם אם מריצים כ-
sudoאו כמשתמש מנהל.
- איך פותרים את זה?
- פתרון מקומי:
- היכנסו אל
System Settings > Privacy & Security. - תנו Full Disk Access לאפליקציית Terminal.
- היכנסו אל
- פתרון ארגוני מנוהל (MDM):
- דוחפים פרופיל PPPC (Privacy Preferences Policy Control).
- הפרופיל מאשר מראש (Pre-approved) גישה לסקריפטים, לטרמינל ולכלי ה-MDM.
- מונע הופעת חלונות קופצים מטרידים למשתמש הקצה המבקשים גישה.
- פתרון מקומי:
2. הלב של המערכת: launchd, DAS, ו-CTS¶
- מטרת השיעור (Objective):
המשתתפים יכירו את תהליך ה-launchd, ה"אבא" של כל התהליכים במק, ויבינו את ההבדל הקריטי בין LaunchAgents, LaunchDaemons והשחקן החדש ב-Tahoe: ה-LaunchAngels.
-
Discussion (Script):
-
"כשמדליקים את המק:"
- לאחר טעינת הליבה (Kernel), השליטה עוברת לתוכנה המנצחת על התזמורת:
launchd. - ל-
launchdתמיד יש PID מספר 1 ב-Activity Monitor. - התוכנה הראשונה לקום, והאחרונה לרדת בכיבוי.
- לאחר טעינת הליבה (Kernel), השליטה עוברת לתוכנה המנצחת על התזמורת:
- "על מה
launchdאחראי?"- טעינה וניהול תהליכים.
- התנעה מחדש אם משהו קרס.
- סגירה מסודרת של אפליקציות.
- "פרט טריוויה מעניין על launchd:"
- פותח על ידי Dave Zarzycki בשנת 2005 כדי להחליף מנגנונים ישנים כמו cron במנהל תהליכים אחד מרכזי. מאוחר יותר אפל הוסיפה מערכות כמו DAS ו-CTS לתזמון משימות גמיש לפי עומס המחשב.
-
"עבור אנשי תמיכה - סוגי סוכנים חשובים:"
- LaunchDaemon (שד מערכתי):
- רץ ברקע כמשתמש
root. - עובד גם אם לא בוצע Login למחשב.
- דוגמאות: אנטיווירוס ארגוני, סוכן MDM.
- רץ ברקע כמשתמש
- LaunchAgent (סוכן אישי):
- נטען רק אחרי שמשתמש עושה Login.
- רץ עם הרשאות המשתמש הנוכחי.
- דוגמאות: אלמנטים בתפריט העליון.
- LaunchAngels (החל מ-macOS Tahoe 26):
- שירותים פנימיים חדשים של אפל (למשל
AccessibilityUIServer) המנוהלים ישירות דרךRunningBoard. אלו נעולים על ה-SSV ולא ניתנים לשינוי כלל.
- שירותים פנימיים חדשים של אפל (למשל
- LaunchDaemon (שד מערכתי):
-
הדגמה מעשית (Demonstration):
-
פתחו פיינדר והדגימו ניווט:
- השתמשו בתפריט
Go -> Go to Folder(קיצורCmd+Shift+G).
- השתמשו בתפריט
- נווטו אל
/System/Library/LaunchDaemons:- הסבירו: "אלו שירותי הליבה של אפל".
- ציינו שהם נעולים תחת ה-SSV ואי אפשר למחוק אותם.
- נווטו אל
/System/Library/LaunchAngels(במידה ואתם מריצים Tahoe):- הראו את הקטגוריה החדשה של שירותי מערכת מנוהלי RunningBoard.
- נווטו אל
/Library/LaunchDaemons(בלי System):- הסבירו: "כאן יושבות חברות צד שלישי (CrowdStrike, Jamf)".
- ה-Daemons כאן רצים תמיד ברקע ברמת המערכת.
- נווטו אל
~/Library/LaunchAgents(עם טילדה):- הסבירו: "כאן נשמרים סוכנים אישיים של המשתמש".
-
הראו את מבנה השמות:
- הדגימו שימוש ב-Reverse Domain Name.
-
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
- לפרוק (Unload) שירות:
הערת 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. אבחון עמוק¶
- מטרת השיעור (Objective):
המשתתפים ילמדו כיצד לאבחן תקלות בזמן אמת דרך עומסי זיכרון (Memory Pressure) ב-Activity Monitor, ויכירו את מבנה ודרכי האבחון של קבצי תצורה מסוג Plist.
-
Discussion (Script):
-
"שאלה נפוצה בתמיכה: למה המק שלי איטי?"
- משתמשים וטכנאים רגילים לבדוק "כמה RAM פנוי נשאר".
- ב-macOS מודרנית זו שאלה שגויה מיסודה.
- "למה זיכרון פנוי הוא זיכרון מבוזבז?"
- המערכת שואפת למלא את ה-RAM במידע (Cache) כדי לרוץ מהר יותר.
- "המדד האמיתי: Memory Pressure (עומס זיכרון):"
- הגרף ב-Activity Monitor אומר לנו איך המק מרגיש.
- ירוק: הכל מעולה.
- צהוב: המק מתאמץ, דוחס זיכרון במקום (Memory Compression).
- אדום: סכנה. המק כותב המון מידע מה-RAM לכונן הקשיח (Swap). פה מתחילות האיטיות והקריסות.
- "קצת היסטוריה מאחורי הקלעים:"
- ה-Activity Monitor המוכר נוצר ב-2003 מאיחוד תוכנות קטנות (Process Viewer ו-CPU Monitor). ה-Plist הגיע מ-NeXTSTEP, והמעבר לפורמט בינארי ב-2002 נועד לשפר ביצועים ולמנוע שגיאות.
-
"חקירת הגדרות וקריסות (Plists):"
- כל הגדרה של כל אפליקציה במק נשמרת בקובץ Plist (Property List).
- הפתרון האמיתי לקריסות ספציפיות: קריאה נכונה של ה-Plist או איפוסו.
-
הדגמה מעשית (Demonstration):
-
פתחו את Activity Monitor:
- עברו ללשונית Memory.
- הראו בתחתית המסך את גרף ה-Memory Pressure.
- הראו את עמודת
Swap Used:- הסבירו: נתון גבוה + גרף אדום = סכנה ובעיה. לחפש "Memory Leak".
- הדגימו קבצי Plist:
- פתחו Finder ונווטו אל
~/Library/Preferences. - פתחו קובץ Plist עם TextEdit (להראות XML).
- פתחו Finder ונווטו אל
-
הדגימו בדיקת תקינות עם
plutil:- פתחו Terminal והקלידו:
plutil -lint /Users/youruser/Library/Preferences/com.apple.finder.plist - הסבירו שהפקודה מבצעת "Linting" (בדיקת תקינות תחבירית).
- פתחו Terminal והקלידו:
-
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)¶
- מטרת השיעור (Objective):
המשתתפים ילמדו כיצד סוכן ה-MDM משתלב כתהליך שקוף במערכת, ויבינו מה לחפש ב-Activity Monitor וב-Console כאשר פקודות MDM נכשלות.
-
Discussion (Script):
-
"איך מתנהל המחשב מול שרת MDM?"
- נדרש סוכן מאחורי הקלעים שיקבל פקודות:
mdmclient. - מובנה במערכת כ-Daemon.
- נדרש סוכן מאחורי הקלעים שיקבל פקודות:
- "איך התהליך עובד בפועל?"
- ה-
mdmclientמאזין לשירותי ה-Push של אפל (APNs). - מקבל הודעת "Wake Up" ואז מושך פקודות (Polling) מה-MDM ב-HTTPS.
- מעביר הוראות למנוע
profiledלהתקנת פרופילים.
- ה-
-
"למה מחשב לא מגיב לפקודות MDM?"
- חומת אש ארגונית (Firewall או Proxy) מיירטת תקשורת SSL.
- חסימה של חיבור ה-Push של אפל (פורט 5223 או רשת 17.0.0.0/8).
-
הדגמה מעשית (Demonstration):
-
פתחו את אפליקציית Console:
- חפשו את ה-
mdmclient. - הראו את הפעילות הקשורה לסנכרון הפרופילים.
- חפשו את ה-
- פתחו Terminal להדגמת לוגים חיים (Streaming):
- הפקודה:
log stream --predicate 'process == "mdmclient"' --info
- הפקודה:
-
ייצרו תנועה במערכת:
- עברו ל-
System Settings > Privacy & Security > Profilesוהראו את הלוגים החדשים.
- עברו ל-
-
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.