جزء لزج

في مجال الحوسبة ، يعتبر البت اللاصق علامة حق الوصول إلى ملكية المستخدم التي يمكن تعيينها للملفات والمجلدات على الأنظمة الشبيهة بنظام يونكس .

هناك تعريفان: أحدهما للملفات، والآخر للمجلدات.

بالنسبة للملفات، وخاصة الملفات التنفيذية، كان بإمكان المستخدم المتميز وضع علامة عليها للاحتفاظ بها في الذاكرة الرئيسية، حتى عند انتهاء الحاجة إليها، وذلك لتقليل عمليات التبديل التي قد تحدث عند ظهور حاجة أخرى، حيث يتعين إعادة تحميل الملف من وحدة تخزين ثانوية بطيئة نسبيًا . [ 1 ] أصبحت هذه الوظيفة قديمة بسبب تحسين عمليات التبديل.

بالنسبة للمجلدات، عند تفعيل خاصية "البت اللاصق" (sticky bit)، يتعامل نظام الملفات مع الملفات الموجودة في هذه المجلدات بطريقة خاصة، بحيث لا يستطيع سوى مالك الملف، أو مالك المجلد، أو المستخدم الجذر (root) إعادة تسمية الملف أو حذفه. أما في حال عدم تفعيل هذه الخاصية، فيمكن لأي مستخدم لديه صلاحيات الكتابة والتنفيذ على المجلد إعادة تسمية الملفات الموجودة فيه أو حذفها، بغض النظر عن مالك الملف. وعادةً ما يتم تفعيل هذه الخاصية على /tmpالمجلد لمنع المستخدمين العاديين من حذف ملفات مستخدمين آخرين أو نقلها.

تُستخدم خاصية "البت اللاصق" في الأنظمة الحديثة لحماية المجلدات ومحتوياتها من الاختراق من قِبل المستخدمين غير المالكين؛ وهي خاصية موجودة في معظم أنظمة يونكس الحديثة. الملفات الموجودة في مجلد مشترك، مثل مجلد " /tmpالملفات"، مملوكة لمالكين محددين، ولا يجوز لغير المالكين حذفها أو الكتابة فوقها أو إعادة تسميتها.

تاريخ

تم تقديم بت التثبيت في الإصدار الخامس من نظام يونكس (عام ١٩٧٤) لاستخدامه مع الملفات التنفيذية البحتة . [ ٢ ] عند تفعيله، يُوجّه نظام التشغيل للاحتفاظ بجزء النص من البرنامج في مساحة التبادل بعد انتهاء العملية . يُسرّع هذا من عمليات التنفيذ اللاحقة، إذ يسمح للنواة بإجراء عملية واحدة لنقل البرنامج من مساحة التبادل إلى الذاكرة الفعلية. وبالتالي، يتم تحميل البرامج شائعة الاستخدام، مثل المحررات، بشكل أسرع بشكل ملحوظ. إحدى المشكلات البارزة في البرامج "المثبتة" هي استبدال الملف التنفيذي (على سبيل المثال، أثناء الترقيع )؛ إذ يتطلب ذلك إزالة بت التثبيت من الملف التنفيذي، ثم تنفيذ البرنامج والخروج لمسح ذاكرة التخزين المؤقت، ثم استبدال الملف التنفيذي الثنائي، ثم إعادة تفعيل بت التثبيت.

لاحقًا، أصبح هذا السلوك متاحًا فقط في نظامي HP-UX و UnixWare . ويبدو أن نظام Solaris قد تخلى عنه في عام 2005. احتفظ إصدار 4.4-Lite من BSD بسلوك البتات الثابتة القديم، ولكن تم إسقاطه لاحقًا من OpenBSD (ابتداءً من الإصدار 3.7) و FreeBSD (ابتداءً من الإصدار 2.2.1). لم يدعم أي إصدار من Linux هذا السلوك التقليدي؛ إذ يقوم Linux بتخزين الملفات التنفيذية مؤقتًا بنفس طريقة تخزين جميع الملفات، لذا فإن إعادة تشغيل البرنامج لمسح ذاكرة التخزين المؤقت غير ضرورية.

الاستخدام

يُستخدم بت التثبيت (sticky bit) بشكل شائع في أنظمة التشغيل الحديثة، وتحديدًا في المجلدات الموجودة ضمن أنظمة الملفات لأنظمة التشغيل الشبيهة بنظام يونكس . عند تفعيل بت التثبيت لمجلد ما، يتعامل نظام الملفات مع الملفات الموجودة فيه بطريقة خاصة، بحيث لا يستطيع سوى مالك الملف أو مالك المجلد أو المستخدم الجذر (root) إعادة تسمية الملف أو حذفه. أما في حال عدم تفعيل بت التثبيت، فيمكن لأي مستخدم لديه صلاحيات الكتابة والتنفيذ للمجلد إعادة تسمية الملفات الموجودة فيه أو حذفها، بغض النظر عن مالك الملف. عادةً ما يُفعّل هذا البت في /tmpالمجلد لمنع المستخدمين العاديين من حذف ملفات مستخدمين آخرين أو نقلها. أُضيفت هذه الميزة في نظام 4.3BSD عام 1986، وهي موجودة اليوم في معظم أنظمة التشغيل الحديثة الشبيهة بنظام يونكس.

بالإضافة إلى ذلك، يُعرّف نظام سولاريس (ابتداءً من الإصدار 2.5) سلوكًا خاصًا عند تفعيل بت التثبيت على الملفات غير القابلة للتنفيذ : حيث لا يتم تخزين هذه الملفات مؤقتًا بواسطة النواة عند الوصول إليها . يُفعّل هذا عادةً على ملفات التبديل لمنع الوصول إليها من مسح بيانات أكثر أهمية من ذاكرة التخزين المؤقت للنظام. كما يُستخدم أحيانًا في اختبارات قياس الأداء .

يقوم برنامج التحميل التلقائي أيضًا بتعيين بت التثبيت للإشارة إلى أن الملف لم يتم تحميله بعد. وهذا يسمح لبرامج مثل ls بتجاهل الملفات البعيدة غير المحملة.

مقتطفات من صفحات الدليل حول تأثير الجزء اللاصق على الدلائل والملفات
نظام التشغيلدليل المستخدمالملفات
AIX 5.2 [ 3 ]يشير هذا إلى أن مالكي الملفات فقط هم من يمكنهم ربط أو فصل الملفات في الدليل المحدد.يقوم بتعيين سمة حفظ النص.
سولاريس 11 [ 4 ]إذا كان الدليل قابلاً للكتابة وتم تعيين S_ISVTX (البت اللاصق)، فلا يمكن إزالة الملفات الموجودة داخل هذا الدليل أو إعادة تسميتها إلا إذا كان واحد أو أكثر مما يلي صحيحًا (انظر unlink(2) و rename(2)): يمتلك المستخدم الملف، يمتلك المستخدم الدليل، الملف قابل للكتابة بواسطة المستخدم، المستخدم مستخدم ذو امتيازات.إذا كان الملف العادي غير قابل للتنفيذ وتم ضبط S_ISVTX عليه، فسيُفترض أنه ملف تبديل. في هذه الحالة، لن تُستخدم ذاكرة التخزين المؤقت للصفحات في النظام لحفظ بيانات الملف. أما إذا تم ضبط [...] على أي ملف آخر، فستكون النتائج غير محددة.
HP-UX [ 5 ]إذا تم تعيين [...] على دليل، فلن يتمكن المستخدم غير المتميز من حذف أو إعادة تسمية ملفات الآخرين في ذلك الدليل.[...] يمنع النظام من التخلي عن صورة مساحة التبديل لجزء نص البرنامج من الملف عند إنهاء آخر مستخدم له. وبالتالي، عندما يقوم المستخدم التالي بتشغيل الملف، لا يلزم قراءة النص من نظام الملفات، بل يمكن ببساطة استبداله، مما يوفر الوقت.
لينكس [ 6 ] [ 7 ]عند تفعيل خاصية [...] على مجلد، لا يمكن حذف الملفات الموجودة فيه أو إعادة تسميتها إلا بواسطة المستخدم الجذر أو مالك المجلد أو مالك الملف. كما تُقيّد إعدادات النظام fs.protected_fifos و fs.protected_regular و fs.protected_symlinks إنشاء قوائم FIFO، وإنشاء الملفات العادية، ومتابعة الروابط الرمزية داخل المجلدات التي تم تفعيل خاصية sticky bit عليها.تتجاهل نواة لينكس بت التثبيت على الملفات.
FreeBSD [ 8 ]إذا تم تعيين [...] على دليل، فلن يتمكن المستخدم غير المميز من حذف أو إعادة تسمية ملفات المستخدمين الآخرين في ذلك الدليل.يتجاهل نظام FreeBSD VM تمامًا بت التثبيت (S_ISVTX) للملفات التنفيذية.
IRIX [ 9 ]إذا تم تعيين [...] على دليل، فإن أي ملفات يتم إنشاؤها في ذلك الدليل ستأخذ مُعرّف المجموعة الخاص بالدليل بدلاً من مُعرّف المجموعة الخاص بالعملية المُستدعِية. يمكن استخدام mount(1M) لتمكين هذه الميزة بغض النظر عن وضع الدليل.إذا تم تفعيل بت التثبيت، S_ISVTX، على ملف يُستخدم كمُحمِّل ديناميكي لملف تنفيذي بصيغة ELF، فعند تشغيل الملف التنفيذي، ستُتاح مساحات عناوين القراءة فقط للعملية القديمة للمُحمِّل الديناميكي في العملية الجديدة. وهذا من شأنه تحسين وقت بدء تشغيل البرنامج بشكل ملحوظ. أما تفعيل بت التثبيت على أي ملف آخر فلا يُؤثر على هذه العملية.
نظام التشغيل ماك أو إس إكس (ليوبارد) [ 10 ]يصبح المجلد الذي تم تفعيل خاصية "التثبيت" فيه مجلدًا للإضافة فقط [...] حيث تُقيّد عملية حذف الملفات. لا يُمكن للمستخدم حذف أو إعادة تسمية أي ملف في مجلد التثبيت إلا إذا كان يملك صلاحية الكتابة للمجلد وكان هو مالك الملف أو مالك المجلد أو المستخدم المتميز. تُطبّق هذه الخاصية بشكل مفيد على مجلدات مثل /tmp التي يجب أن تكون قابلة للكتابة العامة، ولكن ينبغي أن تمنع المستخدمين من حذف أو إعادة تسمية ملفات بعضهم البعض بشكل تعسفي. يُمكن لأي مستخدم إنشاء مجلد تثبيت.لا يؤثر بت التثبيت على الملفات القابلة للتنفيذ. ويتولى نظام الذاكرة الافتراضية الخاص بالنواة معالجة جميع عمليات تحسين بقاء الصور النصية في الذاكرة.
NetBSD [ 11 ]يصبح المجلد الذي تم تفعيل خاصية "البت الثابت" فيه مجلدًا مقيدًا فيه حذف الملفات. لا يمكن للمستخدم حذف ملف في مجلد ثابت أو إعادة تسميته إلا إذا كان يملك صلاحية الكتابة في المجلد وكان هو مالك الملف أو مالك المجلد أو المستخدم المتميز. تُطبَّق هذه الخاصية بشكل مفيد على مجلدات مثل /tmp، والتي يجب أن تكون قابلة للكتابة العامة، ولكن ينبغي أن تمنع المستخدمين من حذف ملفات بعضهم البعض أو إعادة تسميتها بشكل تعسفي.لا يتعامل نظام NetBSD حاليًا مع الملفات العادية التي تم تعيين بت التثبيت الخاص بها بشكل خاص، ولكن قد يتغير هذا السلوك في المستقبل.
OpenBSD [ 12 ]يُقيّد استخدام خاصية "البت الثابت" في المجلدات عملية حذف الملفات: فلا يُمكن للمستخدم حذف أو إعادة تسمية أي ملف في مجلد ثابت إلا إذا كان يملك صلاحية الكتابة في المجلد، وكان هو مالك الملف أو مالك المجلد أو المستخدم المتميز. تُطبّق هذه الخاصية بشكل مفيد على مجلدات مثل /tmp، والتي يجب أن تكون قابلة للكتابة العامة، ولكن ينبغي أن تمنع المستخدمين من حذف أو إعادة تسمية ملفات بعضهم البعض بشكل تعسفي.

يمكن لأي مستخدم إنشاء دليل ثابت. راجع chmod(1) لمزيد من التفاصيل حول تعديل أوضاع الملفات.

تاريخيًا، لم يكن الملف القابل للمشاركة والتنفيذي الذي تم ضبط بت التثبيت عليه يُحذف فورًا من مساحة التبادل بعد تنفيذه. بل كان نظام التشغيل يحتفظ بجزء النص من الملف لإعادة استخدامه لاحقًا، متجنبًا بذلك إعادة تحميل البرنامج. لم يعد هذا صحيحًا في الأنظمة الحديثة؛ إذ يحتفظ نظام الذاكرة الافتراضية الحالي بسجل للملفات التنفيذية المستخدمة مؤخرًا، مما يجعل بت التثبيت للملفات غير ضروري. لا يزال من الممكن ضبط بت التثبيت على الملفات، ولكن دون أي تأثير.

لا يمكن إلا للمستخدم المتميز تعيين بت التثبيت على ملف، على الرغم من أن مالك الملف يمكنه مسح بت التثبيت.

SCO UnixWare [ 13 ]إذا كان الدليل قابلاً للكتابة وتم تعيين بت التثبيت، S_ISVTX ، على الدليل، فلا يجوز لأي عملية إزالة أو إعادة تسمية الملفات داخل هذا الدليل إلا إذا كان واحد أو أكثر مما يلي صحيحًا:
  • معرّف المستخدم الفعلي للعملية هو نفسه معرّف مالك الملف
  • معرّف المستخدم الفعلي للعملية هو نفسه معرّف مالك الدليل
  • يملك البرنامج إذن الكتابة للملف
  • تتمتع العملية بامتياز P_OWNER
إذا كان ملف تنفيذي من نوع a.out برقم 0410 مُفعّلاً بت التثبيت (بت الوضع 01000)، فلن يحذف نظام التشغيل نص البرنامج من منطقة التبديل عند انتهاء آخر عملية مستخدم. وإذا كان ملف تنفيذي من نوع a.out أو ELF برقم 0413 مُفعّلاً بت التثبيت، فلن يحذف نظام التشغيل نص البرنامج من الذاكرة عند انتهاء آخر عملية مستخدم. في كلتا الحالتين، إذا كان بت التثبيت مُفعّلاً، فسيكون النص متاحًا بالفعل (إما في منطقة التبديل أو في الذاكرة) عندما يقوم المستخدم التالي بتنفيذ الملف، مما يُسرّع عملية التنفيذ.

أمثلة

يمكن ضبط بت التثبيت باستخدام الأمر chmod ، وذلك إما باستخدام الوضع الثماني 1000 أو باستخدام الرمز t ( حيث أن s مستخدم بالفعل بواسطة بت setuid ). على سبيل المثال، لإضافة البت إلى المجلد /usr/local/tmp، يُكتب الأمر chmod chmod +t /usr/local/tmp. أو للتأكد من أن المجلد لديه tmpالصلاحيات القياسية، يمكن كتابة الأمر chmod chmod 1777 /usr/local/tmp.

لمسحها، استخدم chmod -t /usr/local/tmpأو chmod 0777 /usr/local/tmp(سيؤدي الأخير أيضًا إلى إعادة تعيين tmpالدليل إلى الأذونات القياسية).

في نظام الملفات الرمزي في يونكس ، يُرمز إلى بت التثبيت إما بالحرف t أو T في الخانة الأخيرة، وذلك بحسب ما إذا كان بت التنفيذ لفئة " الآخرون" مُفعّلاً أم لا، على التوالي. على سبيل المثال، في نظام سولاريس 8، يظهر /tmpالدليل، الذي يكون فيه بت التنفيذ لفئة "الآخرون" وبت التثبيت مُفعّلين افتراضيًا، على النحو التالي:

$ ls -ld /tmp drwxrwxrwt 4 root sys 485 Nov 10 06:01 /tmp

إذا تم تعيين بت التثبيت على ملف أو دليل دون تعيين بت التنفيذ لفئة " الآخرين " (غير مالك المستخدم وغير مالك المجموعة)، فسيتم الإشارة إليه بحرف T كبير (بدلاً مما سيكون عليه - ):

# ls -l test -rw-r--r-- 1 root anygroup 0 Nov 10 12:57 test # chmod +t test ; ls -l test -rw-r--rT 1 root anygroup 0 Nov 10 12:57 test

انظر أيضاً

مراجع

  1. زينتز، والتر (فبراير 1984). "اتصال يونكس: ما هي البتة اللاصقة؟". نسخة مطبوعة . ص  130.
  2. ^ شتاينهاوزر، مارتن أوليفر (2012). محاكاة الكمبيوتر في الفيزياء والهندسة . دي جرويتر. رقم ISBN 978-3-1102-5590-4.
  3. "نسخة مؤرشفة من صفحة دليل chmod في نظام AIX 5.2" . تم الاطلاع عليها بتاريخ 19 يناير 2009 .{{cite web}}: CS1 maint: deprecated archiveal service ( link )
  4. "ملخص - صفحات الدليل، القسم 2: استدعاءات النظام" . Docs.oracle.com. 2011-11-01 . تم الاطلاع عليه بتاريخ 2014-04-10 .
  5. "HPUX chmod [ 2 ] " . مؤرشف من الأصل في 20 نوفمبر 2007. تم الاسترجاع في 29 فبراير 2008 .{{cite web}}: CS1 maint: bot: حالة عنوان URL الأصلي غير معروفة ( رابط )
  6. "chmod(1) - صفحة دليل لينكس" . Man7.org . تم الاطلاع عليه بتاريخ 10-04-2014 .
  7. "proc(5) - صفحة دليل لينكس" . Man7.org . تم الاطلاع عليه بتاريخ 2022-03-04 .
  8. "chmod - FreeBSD" . Nixdoc.net. 1993-06-04 . تم الاطلاع عليه بتاريخ 2014-04-10 .
  9. "chmod - IRIX/standard/" . Nixdoc.net . تم الاطلاع عليه بتاريخ 10-04-2014 .
  10. "مكتبة مطوري ماك" . Developer.apple.com . تم الاطلاع عليه بتاريخ 10 أبريل 2014 .
  11. "sticky.7 - صفحات دليل NetBSD" . Netbsd.gw.com. 2021-05-16 . تم الاطلاع عليه بتاريخ 2021-05-16 .
  12. "صفحات الدليل: مثبتة" . Openbsd.org. 2014-02-14 . تم الاسترجاع في 2018-02-04 .
  13. "chmod(2)" . Uw714doc.sco.com. 2004-04-25 . تم الاطلاع عليه بتاريخ 2014-04-10 .
  • أذونات الملفات والمجلدات في نظام يونكس ، 2010، بقلم واين بولوك، مؤرشف من الأصل في 3 فبراير 2012