Capabilities  في نظام لينكس

نظام صلاحيات مشابه لـ  sudi كتبت عنه في تدوينه SUID والصلاحيات في نظام لينكس لكن في Capabilities يتم تجزئه الصلاحيات الى اجزاء صغيره لتفادي اعطاء صلاحيات زائده عن حاجه المستخدم وممكن تسبب اختراق للنظام وتصعيد الصلاحيات.
من اهم الامور في حماية نظامك هو اعطاء المستخدم اقل قدر من الصلاحيات اللتي تسمح له ان يقوم بمهامه.


مثلا لو كان عندنا برنامج  يحتاج يتنصت على بورت بين 1-1023  نحتاج صلاحيات   root  لتشغيله
الحلول المتاحه عشان يشغل الملف هذا مستخدم عادي :
اعطاء المستخدم صلاحيات  root او باسورد الـ  root وهذا الحل خطير جداً لانك اعطيك المستخدم كامل الصلاحيات على النظام فقط لتشغيل ملف واحد
يتم اعطاء الملف صلاحيات SUID بحيث المستخدم يشغل الملف بصلاحيات الروت  وهذا الحل فيه ايضا نوع من الخطوره لانك اعطيك الملف صلاحيات كامله على النظام  لو كان الملف قابل للتعديل وتم  استغلاله لتنفيذ عمليات اخرى ممكن يسبب اختراق او تصعيد صلاحيات للنظام
استخدام Capabilities بحيث يتم اعطاء البرنامج صلاحيه فتح منفذ فقط ( CAP_NET_BIND_SERVICE ) وبهذا الشكل يقدر المستخدم يقوم بمهامه على النظام بأقل مقدار ممكن من الصلاحيات.
بعض صلاحيات Capabilities
CAP_SETUID = السماح بتغيير UID
CAP_SETGID = السماح بتغيير GID
CAP_CHOWN = السماح بتغيير مالك ملف ما
قائمه الصلاحيات كامله تجدها هنا
مثل مانلاحظ حتى مع Capabilities توجد خطوره في حاله استخدامه بطريقه خاطئه بسبب وجود صلاحيات حساسه
مستقبلا راح نستعرض بعض طرق استغلال الاعدادت الخاطئه للـ capabilities و SUID في تصعيد الصلاحيات

عشان   نستعرض الملفات الي عندها صلاحيات capabilities  نستخدم هذا  الامر
getcap -r / 2>/dev/null
اما في حاله رغبتك في اعطاء ملف test ما صلاحيات تغيير  UID على سبيل المثال نستخدم هذا الامر
setcap cap_setuid+ep /home/buhaimed/test

اتمنى اني وفقت شرح Capabilities بطريقه سهله

اذا كانت التدوينه مفيده لاتنسى مشاركتها مع اصدقائك من خلال الضغط على ايقونه تويتر بالاسفل