هل واجهت نفسك يومًا في موقف حيث كان عليك أداء مهمة على نظام Linux فقط لتواجه رفضًا محبطًا للوصول؟ حسنًا، قل وداعًا لتلك المآسي واستقبل عالم الصلاحيات الخاصة في Linux!
هذا البرنامج التعليمي هو تذكرتك للسيطرة على النقاط الدقيقة للصلاحيات الخاصة في Linux – Sticky Bit، Set User ID (SUID)، و Set Group ID (SGID). توفر هذه الصلاحيات الخاصة مستوى أعلى من التحكم في الأمان.
تابع القراءة وأدر ملفاتك بدقة وثقة!
متطلبات مسبقة
قبل أن تنغمس في تفاصيل الصلاحيات الخاصة في Linux، تأكد من أن لديك جهاز Linux. يستخدم هذا البرنامج التعليمي Ubuntu 22.04 LTS (Jammy Jellyfish) للعروض التوضيحية العملية.
تنفيذ الملفات بصلاحيات خاصة في Linux (SUID)
صلاحيات ملفات Linux عادةً ما تحدد قدرة المستخدم على قراءة، كتابة، أو تنفيذ ملف بناءً على صلاحياته وصلاحيات مجموعته. ومع ذلك، هناك حالات يجب فيها على المستخدم تنفيذ ملف بصلاحيات مالك الملف بدلاً من صلاحياته الخاصة.
على سبيل المثال، اعتبر برنامجًا يمكن لمستخدمي الجذر فقط تشغيله، لكن هناك حاجة للمستخدم العادي لتنفيذه لمهمة محددة. في مثل هذه الحالات، يصبح SUID لا غنى عنه.
لمعرفة كيفية تعيين أذونات SUID، اتبع هذه الخطوات:
1. قم بفتح الطرفية وتنفيذ الأوامر التالية لإنشاء مستخدم (useradd
) يُسمى A-user
(تعيين تعسفي) وإعطائه كلمة مرور (passwd
).

2. بعد ذلك، قم بتشغيل الأمر stat
أدناه لعرض أذونات الوصول الحالية لأمر cat
.
أحرص على ملاحظة أذونات الوصول أدناه، حيث ستحتاج إليها للمقارنة لاحقًا:
- 0755 – يسمح بتنفيذ الملف بأذونات مالكه، مما يوفر امتيازات مرتفعة للمستخدمين غير المتمتعين بامتيازات عند تشغيل الملف.
- -rwxr-xr-x – يعين إذنًا للمالك لقراءة وكتابة وتنفيذ الملف (rwx)، بينما يمكن لأعضاء المجموعة والمستخدمين الآخرين قراءة وتنفيذ الملف (r-x و r-x).

cat
command3. الآن، قم بتشغيل الأمر chmod
أدناه، الذي لا يوفر إخراجًا ولكن يعين بت سويد على أمر cat
.
يسمح هذا الأمر بتشغيل أمر cat
بأذونات مالك الملف بدلاً من أذونات المستخدم الذي يقوم بتشغيل الأمر.
? عليك أن تعلم أن استخدام SUID يجب أن يتم بحذر، حيث يمكن أن يسبب مخاطر أمان إذا لم يتم تنفيذه بشكل صحيح. تأكد من تطبيق SUID فقط على الأوامر والملفات الموثوق بها.
4. بمجرد تعيين بت SUID ، قم بتشغيل الأمر التالي stat
للتحقق من بت SUID من خلال إعادة فحص أذونات الأمر cat
.
إذا نجحت العملية، سترى النتيجة التالية، حيث ستقارنها بالمعلومات التي لاحظتها في الخطوة الثانية:
- تغيرت إلى 0755 إلى 4755، حيث يمثل الرقم 4 بت SUID.
- تغيرت إلى -rwsr-xr-x، حيث يمثل s تصريح تشغيل المستخدم (x) على التوالي.

5. قم بتشغيل الأمر cat
أدناه لاختبار إذن المستخدم الحالي المسجل في النظام للوصول إلى ملف /etc/shadow
. هذا الملف هو ملف نظام حرج يخزن كلمات المرور المشفرة للمستخدمين والمعلومات ذات الصلة، التي يمكن لمستخدم الجذر فقط الوصول إليها.
بشكل افتراضي، يسمح لك أمر cat
بعرض محتويات ملف في نظام Linux. ولكن هذا السلوك لا ينطبق دائمًا على كل ملف.
يظهر الرسالة أدناه لأن المستخدم الحالي ليس لديه إذن للوصول إلى الملف.

6. الآن، قم بتشغيل كل أمر أدناه للتبديل (su
) إلى المستخدم الجديد (A-user
)، وحاول الوصول إلى ملف /etc/shadow
مرة أخرى.
هذه المرة، يعمل أمر cat
بصلاحيات مالك الملف (عادة ما يكون root) بدلاً من صلاحيات المستخدم الذي نفذ الأمر.
نظرًا لأنك منحت مؤقتًا إذنًا لـ A-user لقراءة محتويات ذلك الملف، ستحصل على مخرجات مشابهة لتلك أدناه.

7. لأسباب أمنية، قم بتنفيذ الأوامر التالية للـ exit
من المستخدم الحالي (A-user) واستعادة صلاحيات الأمر cat
إلى حالته الأصلية.

cat
command8. في النهاية، قم بتشغيل الأمر أدناه للتحقق من إزالة البت SUID.
لاحظ أن بت SUID 4 و s لم تعد موجودة في أذونات الوصول.

تمكين سيناريوهات العمل التعاوني في الدلائل في Linux (SGID)
تنفيذ الملفات بأذونات خاصة في Linux عبر SUID يعمل بشكل جيد بلا شك. ولكن ماذا لو كنت تهدف إلى سيناريوهات عمل تعاونية، حيث يتعاون عدة مستخدمين على المشاريع؟ عادةً ما يجب عليك التأكد من أن الملفات الجديدة المُنشأة تورث ملكية المجموعة للدليل الأب.
عندما تواجه هذا السيناريو، يثبت SGID أنه عامل تغيير اللعبة. هذه الميزة القوية تبسط إدارة الموارد المشتركة وتعزز سيناريوهات العمل المعتمدة على المجموعات في بيئات Linux.
تشير النظرة إلى كيفية عمل SGID إلى أنك ستقوم بإنشاء مجموعة، وإضافة مستخدمين إليها، وتعيين إذن SGID على دليل، واختبار وظائفها على النحو التالي:
1. قم بتنفيذ الأوامر التالية لتسجيل الدخول كمستخدم رئيسي وإنشاء مجموعة جديدة بإسم demo
(تجريبي). ستستخدم هذه المجموعة لاختبار وظائف SGID.
هذه الأوامر لا

2. فيما بعد، قم بتشغيل الأوامر أدناه لإنشاء مستخدمين اثنين (userA
و userB
) ستستخدمهم لتحاكي بيئة تعاونية.

3. بعد إنشاء المستخدمين الجدد، قم بتشغيل أوامر usermod
أدناه، التي لا تظهر إخراجًا على الطرفية ولكنها تضيف المستخدمين (userA
و userB
) إلى مجموعة demo
.
4. الآن، قم بتنفيذ كل أمر أدناه، قم بإنشاء دليل (mkdir
) بإسم /demo-dir
(تجريبي)، وقم بتعيين مالكية المستخدم والمجموعة للدليل إلى userA
و demo
على التوالي.
? عند نجاح هذه الأوامر، لا تظهر أي إخراج، وهو الأمر الذي ينطبق على مدى هذا البرنامج التعليمي.
5. فيما بعد، قم بتشغيل الأمر التالي ls
لعرض أذونات الدليل /demo-dir
.
يتحقق الإخراج أدناه من أن مستخدم الدليل /demo-dir مُعيّن إلى userA والمجموعة إلى demo.

6. بتصريحات تم التحقق منها، قم بتشغيل أمر chmod
أدناه لتعيين بت SGID على الدليل /demo-dir/
على النحو التالي:
g+s
– Set the SGID bit on the/demo-dir/
directory.o-rwx
– Remove all permissions (read, write, execute) for others.u+rwx
– Grant read, write, and execute permissions to the owner.g+rwx
– Grant read, write, and execute permissions to the group.
7. بمجرد تعيين SGID، قم بتشغيل الأمر التالي للتحقق من أذونات الدليل /demo-dir
.
إذا نجحت، سترى تعيين بت SGID، مُمثلة بالرقم 2
قبل وضع إذن الوضع الثماني و s
في موقع إذن المالك في المجموعة (rws
).

8. بعد ذلك، قم بتشغيل كل أمر أدناه لإنشاء دليل /home
لـ userA
.
9. قم بتنفيذ الأوامر التالية للتبديل (su
) إلى userA
وإنشاء ملف (touch
) بالاسم textA.txt
(تعسفي) في الدليل /demo-dir
.
لا توجد مخرجات لهذه الأوامر (الأمر الذي ينطبق على مدى هذا البرنامج التعليمي)، ولكن ستتحقق من أذونات الملف في الخطوة التالية.
10. قم بتشغيل الأمر ls
أدناه لعرض أذونات الملف textA.txt
.
أدناه، مالك مجموعة ملف textA.txt هو demo، والذي هو المجموعة الرئيسية للمنشئ، userA. يمكن لأعضاء مجموعة demo قراءة وتعديل الملف، بينما يمكن للآخرين فقط قراءته.
لضمان أن الملفات الجديدة في دليل /demo-dir ترث ملكية مجموعة الدليل، يجب تعيين بت SGID على الدليل، والذي ستغطيه في الخطوات التالية.

11. الآن، قم بتنفيذ الأوامر التالية لـالخروج
من المستخدم الحالي (userA) وتعيين بت SGID (chmod g+s
) في الدليل /demo-dir

12. بمجرد تعيين بت SGID، قم بتشغيل الأمر أدناه للتحقق من بت SGID الذي أضفته إلى الدليل /demo-dir
.
كما هو موضح أدناه، ستلاحظ بت SUID 2 مضافة، وهناك s في موضع تنفيذ مالك المجموعة. يؤكد هذا الإخراج أن بت SGID قد تم تعيينه بنجاح إلى الدليل /demo-dir.

13. بعد ذلك، قم بالتبديل مرة أخرى إلى userA
وإنشاء ملف آخر يسمى testA.txt
(تعسفي) في الدليل /demo-dir
.
14. بمجرد إنشاءه، قم بتشغيل الأمر ls
أدناه للتحقق من ملكية الملف الجديد (testA.txt
).
إذا عملت SGID كما هو متوقع، فإن الناتج يظهر أنه في حين أن المستخدمA هو المالك، إلا أن ملكية المجموعة هي تجريبية بسبب تعيين بت SGID على الدليل /demo-dir.

15. الآن، قم بإنشاء دليل /home
لـ المستخدمB
لاختبار وظيفة SGID بشكل أعمق.
16. قم بالتبديل إلى المستخدمB
وقم بإنشاء ملف يُسمى testB.txt
(بشكل تعسفي) في نفس الدليل /demo-dir
.

17. عرض (ls
) معلومات الملف الجديد (testB.txt
).
تحقق من ملكية الملف textB.txt.

حماية الملفات داخل الدلائل (البت اللاصق)
تمكين سير العمل التعاوني في الدلائل في نظام Linux يعزز العمل الجماعي والتعاون السلس. ولكن عندما يتعين عليك إنشاء بيئة آمنة لإدارة الملفات بفعالية، ستقوم أذونات البت اللاصق بالمهمة.
من خلال تعيين البت اللاصق، فأنت في الأساس تضع “مفاتيح القلعة” في يد صاحب الملف، صاحب الدليل، أو المستخدم الجذر. بذلك، يتأكد أنهم فقط لديهم السلطة لحذف أو إعادة تسمية الملف داخل الدليل، مما يوفر طبقة إضافية من الحماية للبيانات الحساسة.
لتعيين أذونات البت اللاصق، يجب أولاً إنشاء دليل مشترك باستخدام الخطوات التالية:
1. تسجيل الدخول كمستخدم root وإنشاء دليل (مشترك) (mkdir
) حيث يمكن للعديد من المستخدمين إنشاء ملفات.
2. بعد ذلك، قم بتشغيل الأوامر التالية لتغيير صلاحيات الدليل /shared-dir
لمنح الإذن بالكتابة للجميع.
الرقم الأول (1
) في 1777
يعين Sticky Bit، في حين أن الباقي (777
) يجعل الدليل قابلاً للقراءة والكتابة والتنفيذ من قبل الجميع.
الميزات أو السمات التالية لـ Sticky Bit في نظام Linux:
Feature | Function |
Directory Protection | When the Sticky Bit is set on a directory, it allows only the owner of a file within that directory to delete or rename their own files. Other users, even if they have write permissions to the directory, cannot delete or rename files owned by other users. |
Shared Directories | The sticky bit is handy for directories that are shared among multiple users. For example, on a system with a /tmp directory used by all users to store temporary files, setting the Sticky Bit prevents users from accidentally or maliciously deleting files owned by other users. |
أدناه، يمكنك رؤية الحرف ‘t‘ في الجزء الأخير من حقل الإذن، الذي يشير إلى تعيين Sticky Bit لدليل /shared-dir.

3. التبديل إلى userA
وإنشاء ملف يسمى fileA.txt
(تعسفي) في الدليل /shared-dir
:
4. الخروج من userA، التبديل إلى userB
، وإنشاء ملف آخر يسمى fileB.txt
(تعسفي) في نفس الدليل /shared-dir
.
5. الآن، قم بالخروج من المستخدمB
، وقم بالتبديل إلى المستخدمA
، وحاول حذف ملف المستخدمB
fileB.txt
.
ستحصل على مخرجات مشابهة للتالية نظرًا لأن مالك الملف فقط يمكنه إجراء التغييرات أو حذف الملف.

6. أخيرًا، قم بتشغيل قائمة الأوامر التالية (ls
) لعرض جميع الملفات داخل الدليل المشترك (/shared-dir
).
إذا كانت أذونات Sticky Bit تعمل، فسترى أن الملف fileB.txt الذي تم إنشاؤه بواسطة المستخدمB آمن وسليم ولم يتم حذفه.

الاستنتاج
بينما تختتم هذا الاستكشاف لأذونات الوصول الخاصة في نظام Linux، لقد فتحت مجموعة أدوات قوية: SUID، SGID، و Sticky Bit. بفضل هذا المعرفة، يمكنك الآن ضبط التحكم في الوصول وحماية ملفاتك بدقة.
ولكن لا تتوقف هنا! لماذا لا تجرب إعداد دليل مشترك بـ SGID وتجرب كيفية إرث الملفات ملكية المجموعة؟ عالم Linux هو ملعبك، ومع كل محاولة، ستتقن فن تأمين نظامك ببراعة!
Source:
https://adamtheautomator.com/special-permissions-in-linux/