اختبار سياسات Jamf Pro على macOS: السكربت يعمل كـ root، لكن من يملك المحتوى والـ Scope والـ Trigger؟
تشوف سكربتًا صغيرًا في Jamf Pro يضبط طابعة على أجهزة Mac. النص نفسه بسيط، لكن المستخدم الذي يحرره يقدر يربطه بسياسة تستهدف مجموعة واسعة. هنا الاختبار ما عاد عن الطابعة فقط؛ صار عن قناة إدارة تنقل محتوى إلى جهاز وتنفذه بهوية مرتفعة.
توثيق تدريب Jamf يذكر تشغيل السكربتات المنشورة من Jamf Pro كـ root. هذه قدرة مقصودة للإدارة، وليست ثغرة بحد ذاتها. السؤال الأمني: من يستطيع تغيير ما ينفذ، ومن يحدد الأجهزة والتوقيت، وهل هذا التفويض مناسب لدوره؟ خلنا نقرأ Policy كاملة، ونستخدم Mac مختبر لإثبات المسار بقراءة هوية فقط، بدون تعطيل حماية أو لمس بيانات مستخدم.
Policy أكثر من النص الموجود في Scripts
السياسة في Jamf تجمع مهام Payloads، وTrigger يحدد حدث التشغيل، وExecution Frequency يحدد التكرار، وScope يحدد الجمهور. قد تكون السكربتات جزءًا من هذه السياسة، وقد تجتمع معها حزم أو أعمال أخرى. لذلك مراجعة نص سكربت وحده ما تعطيك نتيجة عن كل ما ستفعله السياسة.
في مثال الطابعة اكتب معرف السياسة، السكربت المرتبط بها، معلمات السكربت، الهدف، والحدث والتكرار. ثم اقرأ الحقوق التي يحتاجها كل تعديل. حساب يستطيع تعديل نص في مكتبة Scripts قد يختلف عن حساب يستطيع تعديل Policy أو تغيير استهدافها. لا تفترض أن اسم Administrator واحد يحكم كل هذه الطبقات بنفس الشكل.
الفرضية المفيدة هي: هل يستطيع صاحب دور دعم محدود تغيير محتوى أو تعيين يجري تنفيذه خارج حاجة دوره؟ هذا السؤال محدد ويقودك إلى أدلة قابلة للفحص. أما عبارة «Jamf يشغل root» وحدها فهي وصف وظيفة لا تثبت استخدامًا غير مقصود. اربطها بمن يملك المدخل وبالأجهزة التي يمكن أن يتأثر بها.
هوية root مهمة، لكنها ليست وعدًا بتجاوز كل حماية
صلاحية root تمنح العملية قدرات إدارية واسعة في نظام Unix، لكنها لا تعني أن كل حماية macOS اختفت. حماية بيانات التطبيقات وسلامة النظام لها طبقات إضافية، ويتأثر الوصول بإعداد الجهاز وهوية التطبيق والسياسات. لذلك لا تحوّل نجاح أمر id إلى ادعاء قراءة كل بيانات المستخدم أو تغيير كل ملفات النظام.
في Mac مختبر يمكنك استخدام سكربت تشخيص معتمد قصير:
#!/bin/sh
/usr/bin/id -u
/usr/bin/id -un
/usr/bin/sw_vers -productVersion
الأوامر تقرأ هوية العملية وإصدار النظام. إذا ظهر 0 وroot، عندك دليل على سياق هذا التنفيذ بالذات. سجّل السياسة والجهاز والوقت والمخرجات، وتأكد أن النص لم يكن يطبع قيمة ثابتة.
لا تستخدم تعطيل SIP أو تغيير TCC لإثبات قناة نشر. إذا ظهرت مشكلة صلاحية في إجراء آخر، وثق الضابط الذي منعها بدل محاولة إزالته. التقرير المهني يقول «وصل محتوى إلى عملية تعمل كـ root على جهاز المختبر»، ثم يفصل أي أثر إضافي ثبت فعلًا. هذا يحافظ على قوة النتيجة دون اختراع سيطرة مطلقة.
Self Service يغير من يبدأ التشغيل، مب بالضرورة من ينفذ
قد تعرض السياسة في Self Service حتى يطلب المستخدم إجراءً بنفسه. وجودها في تطبيق يستخدمه الموظف لا يعني تلقائيًا أن السكربت ينفذ بصلاحياته الشخصية. اقرأ مسار التنفيذ الفعلي؛ الواجهة التي يبدأ منها الطلب وهوية العملية على الجهاز مفهومان مختلفان.
خلنا نفترض أن مستخدمًا عاديًا يضغط «إعداد الطابعة». هذه وظيفة قد تحتاج خدمة الإدارة لتطبيق إعداد. الثقة هنا في أن محتوى السياسة معتمد وأن المعلمات لا تمنح المستخدم اختيارًا خارج المقصود. لا تكتب أن المستخدم اكتسب root لمجرد أنه شغل إجراء جاهز؛ القدرة المقصودة قد تكون محدودة تمامًا بما صممه المسؤول.
في المختبر قارن نفس السياسة من Trigger إداري ومن Self Service إذا كان كلاهما ضمن النطاق. اقرأ هوية العملية والمحتوى والأهداف. وإذا اختلفت النتيجة، راجع إعداد السياسة والوظيفة التي بدأت بها. المطلوب معرفة من يستطيع طلب أي عمل، ثم من ينفذه وما مدخلاته، بدل مساواة تشغيل أداة مع الحصول على جلسة إدارية عامة.
معلمات السكربت جزء من المحتوى الذي تثق به
توثيق Jamf يسمح بتسمية المعلمات واستخدام قيمها داخل السياسة، ويعطي مثالًا على $4 لاسم طابعة. التسمية في الواجهة تساعد المسؤول، لكنها لا تثبت أن السكربت يتحقق من القيمة. اقرأ كيف يستخدم النص كل معلمة: كاسم أو مسار أو رابط أو اختيار سلوك.
إذا كان المتغير يمثل اختيارًا محدودًا، ابحث عن قائمة قيم مسموحة ومعالجة لنوعه. وإذا كان مسار ملف، راجع ما إذا كان يجب أن يبقى داخل مكان معروف في المختبر. لا تحتاج إدخال سلسلة ضارة لإثبات غياب سياسة تحقق في مراجعة كود؛ اكتب العلاقة بين مدخل قابل للتعديل وعملية حساسة ثم ناقش أقل اختبار مناسب مع المالك.
انتبه كذلك لمصدر المعلمة: مسؤول يحددها داخل Policy يختلف عن قيمة يأتي بها مستخدم أو بيانات جرد. تجنب استخدام eval أو تركيب تعليمات من قيم غير موثوقة في تصميم التشخيص. مجرد وضع المتغير بين علامات اقتباس يحل نوعًا من أخطاء تقسيم الكلمات لكنه لا يحول URL غير موثوق أو اختيار سلوك واسع إلى قيمة مناسبة. راجع الدلالة، مب شكل السطر فقط.
Scope يحدد الأثر حتى لو السكربت ما تغير
سياسة معروفة قد تصبح ذات أثر أكبر عند توسيع استهدافها. لذلك اقرأ Targets وLimitations وExclusions الموجودة في نشر العميل، وراجع عضويات المجموعات التي تدخل في القرار. إعداد مكتوب «مجموعة اختبار» لا يثبت أن المجموعة ما زالت تضم جهازًا واحدًا؛ ممكن تغيرت عضويتها بعد إنشاء السياسة.
في السيناريو دور الدعم يسمح له إدارة فرع واحد. إذا يستطيع نقل أجهزة أو تعديل مجموعة تعتمد عليها Policy مركزية، راجع هل هذا طريق غير مباشر إلى تطبيق تلك السياسة. لا تفترض النتيجة قبل قراءة التعيين والعضوية والتوقيت. قدرة تعديل مجموعة مستقلة ليست دائمًا صلاحية تغيير كل سياسات المؤسسة.
استخدم جهازين مصرحين ومجموعة مختبر صغيرة لإثبات الجمهور. سجل من كان داخلها وقت التقييم ومن خرج منها، ثم شاهد ما طبق على الجهاز. الاختبار يوضح أين يمكن التحكم في الهدف دون تعديل السكربت، ويعطي توصية عند إدارة الاستهداف نفسه. منع تحرير النص وحده قد لا يعالج ملاحظة عنوانها «تطبيق سياسة على أجهزة خارج فرع الدعم».
Smart Groups تعتمد على جرد له عمر ومصدر
المجموعة الذكية تحدد جمهورًا بناء على شروط. إذا شرطها يتصل بجرد الجهاز، فمعلومة قديمة أو قيمة جمعها مسار مختلف يمكن أن تغير العضوية. راجع مصدر كل خاصية وتاريخ آخر تحديث في جهاز المختبر. لا تصف قيمة جرد كدليل حي على حالة جهاز إذا كان آخر جمع قبل التغيير الذي تسأل عنه.
مثلًا سياسة تحديث تستهدف إصدار نظام معينًا. إذا الجهاز تغير إصداره لكن الجرد ما حدث، يمكن يظل ظاهرًا في جمهور مختلف عما تتوقعه. هذا تعارض تشغيلي إلى أن يثبت أثر أمني، لكنه مهم لتفسير هل السياسة وصلت أو لم تصل. لا تسجل فشل استهداف كنجاح لعزل حسابات إذا السبب معلومة غير محدثة.
في مراجعة هجومية مصرح بها السؤال عن إمكانية تأثير مستخدم محدود على خاصية تؤثر في جمهور سياسة حساسة. اقرأ سلطة المصدر والقيود بدل افتراض أن كل Extension Attribute موثوق أو قابل للتلاعب. إذا التحليل يحتاج تجربة، اجعلها على خاصية مختبر ومحتوى قراءة فقط. أثبت سلسلة التأثير خطوة خطوة ثم قدر حجم الجمهور المتأثر.
Trigger والتكرار يفسران ليش ما شفت تنفيذًا
Policy قد تستهدف الجهاز الصحيح لكن لم يحدث Trigger بعد، أو قد نفذت قبل ذلك بتكرار يمنع إعادة التشغيل في الحالة الحالية. توثيق Jamf يميز بين تكرار مرة للجهاز أو للمستخدم وغيرها، وبين Ongoing الذي يعمل عند تحقق الحدث وفق الإعداد. لا تخلط «الجهاز في Scope» مع «السياسة لازم تنفذ الآن».
في المختبر اقرأ General Payload وسجل Trigger والتكرار والتاريخ السابق. لا تمسح Logs لتجبر سياسة إنتاج على التشغيل. إذا احتجت حالة جديدة، يجهز المالك سياسة تجريبية أو جهازًا مناسبًا وفق خطة واضحة. إعادة تشغيل عمل لم تفهم تكراره قد ينتج تغييرًا غير مطلوب حتى لو النص يبدو بسيطًا.
راجع الفشل أيضًا: سياسة بدأت لكن Payload معينًا لم ينجح تختلف عن سياسة لم تُقيّم. وجود سجل سابق قد يؤثر على تكرارها بحسب إعدادها. التفسير الدقيق يوفر وقتًا، لأن كثيرًا من «السكربت ما اشتغل» يرجع إلى شروط توقيت وتكرار أو جمهور، وليس إلى صلاحية حساب المختبر أو حماية الجهاز.
ترتيب العمل قد يغير معنى نفس السكربت
السكربت قد يحتاج ملفًا يثبته Package قبل تشغيله، أو يفحص حالة بعد مهمة أخرى. توثيق Jamf يصف اختيار الأولوية بالنسبة إلى عناصر السياسة، ويذكر ترتيبًا للاسم عند وجود أكثر من سكربت في السياسة الحالية. طابق قواعد إصدارك قبل الاستنتاج من النص وحده.
لو سكربت يقرأ ملف إعداد لم يكن موجودًا وقت التنفيذ، ففشل القراءة لا يثبت أن قناة الإدارة لا تستطيع الوصول إليه. ربما الأولوية غير مناسبة. ولو إعداد يشير إلى مصدر يتغير بعد مراجعة السكربت، فمالك الملف جزء من حد الثقة. اقرأ الاعتماد وترتيب وصوله وما إذا كانت نسخة المحتوى معروفة عند التشغيل.
في المعمل استخدم ملفًا عامًا وقيمة ثابتة متفقًا عليها، ثم تحقق من الحالة قبل وبعد Payloads. لا تحتاج تغيير ترتيب سياسة إنتاج لتعرف أثر ترتيب خاطئ؛ نسخة مختبر مع نفس العناصر الأساسية تكفي للتفسير. التقرير يوضح سبب الاعتماد، مب مجرد أن Policy لها عدة سكربتات. الترتيب مسألة تشغيل وثقة عندما يجعل محتوى من طرف آخر يدخل إلى عملية إدارية.
مخرجات السياسة تثبت مرحلة، فلا تحملها أكثر
راجع سجل Policy ودليلًا من Mac المختبر. سجل مكتوب «Completed» قد يشرح حالة العملية حسب المنصة، لكن لازم تعرف هل السكربت أفاد بالنتيجة الفعلية. إذا النص يكمل رغم فشل أمر داخلي ولا يضبط Exit Code، يمكن أن يبدو ناجحًا بينما المهمة المطلوبة لم تتحقق.
حافظ على مخرجات تشخيص محدودة: هوية عملية، إصدار، وقيمة مختبرية. لا تطبع البيئة كلها أو أسرار اتصالات أو ملفات مستخدم. توثيق Jamf الحالي يذكر اقتطاع مخرجات Logs عند حد حجم معين، فغياب سطر متأخر يحتاج قراءة سلوك التسجيل، وليس حكمًا أنه لم ينفذ. لا تعتمد على حجم كبير من النص لإثبات قناة بسيطة.
اربط السجل بمعرف السياسة والجهاز والوقت وحساب التغيير في المنصة. إذا كان دليل التنفيذ من الجهاز واضحًا لكن مصدر تعديل المحتوى مجهولًا، تكون ملاحظة التتبع منفصلة عن قناة التنفيذ. تقرير متماسك يثبت المدخل والهدف والهوية والأثر، ولا يجمع صورًا كثيرة بدون معرفة أي تجربة ولدت كل صورة.
تمرين يفرق بين تأليف المحتوى واستعماله
يجهز المالك سكربت قراءة الهوية وسياسة مختبر تستهدف جهازًا واحدًا. الحالة الأولى يشغلها المسار المعتمد وتثبت هوية التنفيذ. الثانية حساب دعم يراجع هل يستطيع مشاهدة العنصر أو تعديل نسخته التجريبية بحسب المتوقع. الثالثة تقيس قدرته على ربط العنصر بسياسة أخرى أو تغيير Scope تجريبي، إذا كان ذلك داخل تصريح واضح.
لا تجعل كل الحالات تغييرات محفوظة بالضرورة؛ كثير من الحدود يمكن مراجعتها من الأذونات والإعدادات. إذا احتجت حفظًا لإثبات وصول تعديل، استخدم قيمة تشخيصية عامة ونسخة معزولة، ثم راجع المخرجات على الجهاز المخصص. بعده أعد المحتوى والتعيين للحالة المتفق عليها وتأكد من غياب عمل معلق.
المقارنة الأخيرة بعد التصحيح مهمة: يستطيع الدعم استخدام الإجراء المعتاد، لكنه لا يتحكم في محتوى غير معتمد أو جمهور أوسع. إذا التصحيح سحب صلاحية تشغيل الطابعة من الجميع، فهو عطل المسار بدل فصله. اقترح معالجة المدخل الذي أثبتته مع مراجعة تأثيرها على الفرق التي تحتاجه، بدل تغيير واسع لا يعرف أحد تبعاته.
توصية مناسبة لكل حلقة بدل منع السكربتات بالكامل
إذا المشكلة نص قابل للتعديل من دور لا يحتاج تأليفه، ضيق حق التحرير وراجع الجمهور. وإذا المشكلة معلمة من مصدر غير موثوق، راجع تحقق القيم وطريقة الاستخدام. وإذا المشكلة تعديل Scope أو مجموعة، عالج تفويض الاستهداف. وإذا المصدر ملف توزيع، راجع من يكتبه وكيف يعرف الجهاز النسخة المعتمدة.
تشغيل سكربتات إدارية ليس عيبًا يمكن منعه دون أثر على التشغيل. المهم أن تتناسب سلطة التأليف والنشر والاستهداف مع الحاجة، وأن يقدر الفريق يربط التغيير بصاحبه. توقيع حزمة أو اعتماد نص قد يساعد في مسار محدد، لكنه لا يعوض مستخدمًا يستطيع تغيير هدف السياسة دون حاجة.
وفي تقدير الخطورة اذكر عدد الأهداف المثبتة والهوية والضوابط المتبقية. لا تكتب «اختراق كل Macs» إذا تجربة واحدة أثبتت root على جهاز معمل واحد ولا تعرف جمهور الحساب. الدقة ما تقلل قيمة النتيجة؛ بالعكس تجعل مدير الأجهزة يعرف أي حق يتغير وكيف يقيس نجاح التعديل.
مراجع للسياسات والسكربتات وحماية macOS
نموذج Policy ومكوناته:
https://learn.jamf.com/r/en-US/jamf-pro-documentation-current/Policies
تشغيل السكربتات داخل سياسة:
https://learn.jamf.com/r/en-US/jamf-pro-documentation-current/Running_Scripts_Using_a_Policy
معلمات وأولويات السكربت:
https://learn.jamf.com/r/en-US/jamf-pro-documentation-current/Scripts
درس Jamf عن هوية تنفيذ السكربتات:
https://learn.jamf.com/r/en-US/jamf-100-course-current/Lesson_25
ومقال API Roles في المجتمع إذا كانت إدارة السياسة تأتي من تكامل:
https://courses.cyberpts.com/community/166/akhtbar-jamf-pro-api-roles-wclients-slahyat-ttjma-wrmz-qd-ybqa-bad-tatyl-alamyl
قبل أول تجربة اسأل: من يؤلف؟ من يربط؟ من يستهدف؟ ومتى تنفذ السياسة؟ وبعدها اقرأ هوية العملية من الجهاز. هذي سلسلة عملية لفهم قناة Jamf، وتعطيك اختبارًا عميقًا بدون تحويل المختبر إلى محاولة تعطيل حماية Mac.