الصلاحيات الخاصة في لينكس: SUID، SGID، و Sticky Bit

هل واجهت نفسك يومًا في موقف حيث كان عليك أداء مهمة على نظام 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).

sudo useradd A-user
sudo passwd A-user
Creating a new user

2. بعد ذلك، قم بتشغيل الأمر stat أدناه لعرض أذونات الوصول الحالية لأمر cat.

stat /usr/bin/cat

أحرص على ملاحظة أذونات الوصول أدناه، حيث ستحتاج إليها للمقارنة لاحقًا:

  • 0755 – يسمح بتنفيذ الملف بأذونات مالكه، مما يوفر امتيازات مرتفعة للمستخدمين غير المتمتعين بامتيازات عند تشغيل الملف.
  • -rwxr-xr-x – يعين إذنًا للمالك لقراءة وكتابة وتنفيذ الملف (rwx)، بينما يمكن لأعضاء المجموعة والمستخدمين الآخرين قراءة وتنفيذ الملف (r-x و r-x).
Viewing access permissions of the cat command

3. الآن، قم بتشغيل الأمر chmod أدناه، الذي لا يوفر إخراجًا ولكن يعين بت سويد على أمر cat.

يسمح هذا الأمر بتشغيل أمر cat بأذونات مالك الملف بدلاً من أذونات المستخدم الذي يقوم بتشغيل الأمر.

? عليك أن تعلم أن استخدام SUID يجب أن يتم بحذر، حيث يمكن أن يسبب مخاطر أمان إذا لم يتم تنفيذه بشكل صحيح. تأكد من تطبيق SUID فقط على الأوامر والملفات الموثوق بها.

sudo chmod u+s /usr/bin/cat

4. بمجرد تعيين بت SUID ، قم بتشغيل الأمر التالي stat للتحقق من بت SUID من خلال إعادة فحص أذونات الأمر cat.

stat /usr/bin/cat

إذا نجحت العملية، سترى النتيجة التالية، حيث ستقارنها بالمعلومات التي لاحظتها في الخطوة الثانية:

  • تغيرت إلى 0755 إلى 4755، حيث يمثل الرقم 4 بت SUID.
  • تغيرت إلى -rwsr-xr-x، حيث يمثل s تصريح تشغيل المستخدم (x) على التوالي.
Verifying the SUID bit

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

بشكل افتراضي، يسمح لك أمر cat بعرض محتويات ملف في نظام Linux. ولكن هذا السلوك لا ينطبق دائمًا على كل ملف.

cat /etc/shadow

يظهر الرسالة أدناه لأن المستخدم الحالي ليس لديه إذن للوصول إلى الملف.

Viewing the /etc/shadow file’s content via a user without appropriate permissions

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

هذه المرة، يعمل أمر cat بصلاحيات مالك الملف (عادة ما يكون root) بدلاً من صلاحيات المستخدم الذي نفذ الأمر.

# التبديل إلى A-user
su A-user
# عرض محتويات ملف /etc/shadow
cat /etc/shadow

نظرًا لأنك منحت مؤقتًا إذنًا لـ A-user لقراءة محتويات ذلك الملف، ستحصل على مخرجات مشابهة لتلك أدناه.

Viewing the /etc/shadow file’s content

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

exit
sudo chmod u-s /usr/bin/cat
Removing the SUID bit from the cat command

8. في النهاية، قم بتشغيل الأمر أدناه للتحقق من إزالة البت SUID.

stat /usr/bin/cat

لاحظ أن بت SUID 4 و s لم تعد موجودة في أذونات الوصول.

Confirming the SUID bit removal

تمكين سيناريوهات العمل التعاوني في الدلائل في Linux (SGID)

تنفيذ الملفات بأذونات خاصة في Linux عبر SUID يعمل بشكل جيد بلا شك. ولكن ماذا لو كنت تهدف إلى سيناريوهات عمل تعاونية، حيث يتعاون عدة مستخدمين على المشاريع؟ عادةً ما يجب عليك التأكد من أن الملفات الجديدة المُنشأة تورث ملكية المجموعة للدليل الأب.

عندما تواجه هذا السيناريو، يثبت SGID أنه عامل تغيير اللعبة. هذه الميزة القوية تبسط إدارة الموارد المشتركة وتعزز سيناريوهات العمل المعتمدة على المجموعات في بيئات Linux.

تشير النظرة إلى كيفية عمل SGID إلى أنك ستقوم بإنشاء مجموعة، وإضافة مستخدمين إليها، وتعيين إذن SGID على دليل، واختبار وظائفها على النحو التالي:

1. قم بتنفيذ الأوامر التالية لتسجيل الدخول كمستخدم رئيسي وإنشاء مجموعة جديدة بإسم demo (تجريبي). ستستخدم هذه المجموعة لاختبار وظائف SGID.

هذه الأوامر لا

# التبديل إلى الصلاحيات الجذر
sudo su
# إنشاء مجموعة جديدة
groupadd demo
Switching to root and creating a job

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

useradd -s /bin/bash userA
passwd userA

useradd -s /bin/bash userB
passwd userB
Creating users with passwords for simulating a collaborative environment

3. بعد إنشاء المستخدمين الجدد، قم بتشغيل أوامر usermod أدناه، التي لا تظهر إخراجًا على الطرفية ولكنها تضيف المستخدمين (userA و userB) إلى مجموعة demo.

usermod -aG demo userA
usermod -aG demo userB

4. الآن، قم بتنفيذ كل أمر أدناه، قم بإنشاء دليل (mkdir) بإسم /demo-dir (تجريبي)، وقم بتعيين مالكية المستخدم والمجموعة للدليل إلى userA و demo على التوالي.

? عند نجاح هذه الأوامر، لا تظهر أي إخراج، وهو الأمر الذي ينطبق على مدى هذا البرنامج التعليمي.

# إنشاء دليل
mkdir /demo-dir
# تغيير مالكية الدليل
chown userA:demo /demo-dir

5. فيما بعد، قم بتشغيل الأمر التالي ls لعرض أذونات الدليل /demo-dir.

ls -ld /demo-dir/

يتحقق الإخراج أدناه من أن مستخدم الدليل /demo-dir مُعيّن إلى userA والمجموعة إلى demo.

Viewing the /demo-dir directory’s permissions

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.
chmod g+s,u+rwx,g+rwx,o-rwx /demo-dir/

7. بمجرد تعيين SGID، قم بتشغيل الأمر التالي للتحقق من أذونات الدليل /demo-dir.

stat /demo-dir

إذا نجحت، سترى تعيين بت SGID، مُمثلة بالرقم 2 قبل وضع إذن الوضع الثماني و s في موقع إذن المالك في المجموعة (rws).

Verifying the SGID bit set to the /demo-dir directory

8. بعد ذلك، قم بتشغيل كل أمر أدناه لإنشاء دليل /home لـ userA.

mkdir /home/userA
chown userA:userA /home/userA

9. قم بتنفيذ الأوامر التالية للتبديل (su) إلى userA وإنشاء ملف (touch) بالاسم textA.txt (تعسفي) في الدليل /demo-dir.

لا توجد مخرجات لهذه الأوامر (الأمر الذي ينطبق على مدى هذا البرنامج التعليمي)، ولكن ستتحقق من أذونات الملف في الخطوة التالية.

# التبديل إلى userA
su - userA
# تغيير الدليل
cd /demo-dir
# إنشاء ملف نصي
touch textA.txt

10. قم بتشغيل الأمر ls أدناه لعرض أذونات الملف textA.txt.

ls -l textA.txt

أدناه، مالك مجموعة ملف textA.txt هو demo، والذي هو المجموعة الرئيسية للمنشئ، userA. يمكن لأعضاء مجموعة demo قراءة وتعديل الملف، بينما يمكن للآخرين فقط قراءته.

لضمان أن الملفات الجديدة في دليل /demo-dir ترث ملكية مجموعة الدليل، يجب تعيين بت SGID على الدليل، والذي ستغطيه في الخطوات التالية.

Verifying the textA.txt file’s permissions

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

# الخروج من userA
exit
# تعيين SGID لـ /demo-dir
chmod g+s /demo-dir
Setting the SGID bit to the /demo-dir directory

12. بمجرد تعيين بت SGID، قم بتشغيل الأمر أدناه للتحقق من بت SGID الذي أضفته إلى الدليل /demo-dir.

stat /demo-dir

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

Verifying the SGID is set to the /demo-dir directory

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

# التبديل إلى userA
su - userA
# تغيير الدليل
cd /demo-dir
# إنشاء ملف نصي
touch testA.txt

14. بمجرد إنشاءه، قم بتشغيل الأمر ls أدناه للتحقق من ملكية الملف الجديد (testA.txt).

ls -l testA.txt

إذا عملت SGID كما هو متوقع، فإن الناتج يظهر أنه في حين أن المستخدمA هو المالك، إلا أن ملكية المجموعة هي تجريبية بسبب تعيين بت SGID على الدليل /demo-dir.

Verifying permissions of the testA.txt file

15. الآن، قم بإنشاء دليل /home لـ المستخدمB لاختبار وظيفة SGID بشكل أعمق.

mkdir /home/userB
chown userB:userB /home/userB

16. قم بالتبديل إلى المستخدمB وقم بإنشاء ملف يُسمى testB.txt (بشكل تعسفي) في نفس الدليل /demo-dir.

# التبديل إلى المستخدمB
su - userB
# تغيير الدليل
cd /demo-dir
# إنشاء ملف نصي
touch testB.txt
Switching to userB and creating the testB.txt file

17. عرض (ls) معلومات الملف الجديد (testB.txt).

ls -l testB.txt

تحقق من ملكية الملف textB.txt.

Checking the ownership of the textB.txt file

حماية الملفات داخل الدلائل (البت اللاصق)

تمكين سير العمل التعاوني في الدلائل في نظام Linux يعزز العمل الجماعي والتعاون السلس. ولكن عندما يتعين عليك إنشاء بيئة آمنة لإدارة الملفات بفعالية، ستقوم أذونات البت اللاصق بالمهمة.

من خلال تعيين البت اللاصق، فأنت في الأساس تضع “مفاتيح القلعة” في يد صاحب الملف، صاحب الدليل، أو المستخدم الجذر. بذلك، يتأكد أنهم فقط لديهم السلطة لحذف أو إعادة تسمية الملف داخل الدليل، مما يوفر طبقة إضافية من الحماية للبيانات الحساسة.

لتعيين أذونات البت اللاصق، يجب أولاً إنشاء دليل مشترك باستخدام الخطوات التالية:

1. تسجيل الدخول كمستخدم root وإنشاء دليل (مشترك) (mkdir) حيث يمكن للعديد من المستخدمين إنشاء ملفات.

# التبديل إلى المستخدم root
sudo su
# إنشاء دليل (مشترك)
mkdir /shared-dir

2. بعد ذلك، قم بتشغيل الأوامر التالية لتغيير صلاحيات الدليل /shared-dir لمنح الإذن بالكتابة للجميع.

الرقم الأول (1) في 1777 يعين Sticky Bit، في حين أن الباقي (777) يجعل الدليل قابلاً للقراءة والكتابة والتنفيذ من قبل الجميع.

# تغيير الصلاحيات، وتعيين Sticky Bit
chmod 1777 /shared-dir
# عرض صلاحيات الدليل
ls -ld /shared-dir

الميزات أو السمات التالية لـ 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.

Viewing permissions of the /shared-dir directory

3. التبديل إلى userA وإنشاء ملف يسمى fileA.txt (تعسفي) في الدليل /shared-dir:

# التبديل إلى userA
su - userA
# إنشاء ملف نصي
touch /shared-dir/fileA.txt

4. الخروج من userA، التبديل إلى userB، وإنشاء ملف آخر يسمى fileB.txt (تعسفي) في نفس الدليل /shared-dir.

# الخروج من المستخدمA
exit
# التبديل إلى المستخدمB
su - userB
# إنشاء ملف نصي
touch /shared-dir/fileB.txt

5. الآن، قم بالخروج من المستخدمB، وقم بالتبديل إلى المستخدمA، وحاول حذف ملف المستخدمB fileB.txt.

# الخروج من المستخدمB
exit
# التبديل إلى المستخدمA
su - userA
# حذف ملف مملوك للمستخدمB
rm /shared-dir/fileB.txt

ستحصل على مخرجات مشابهة للتالية نظرًا لأن مالك الملف فقط يمكنه إجراء التغييرات أو حذف الملف.

Attempting to delete a file (fileB.txt) owned by another user (userB)

6. أخيرًا، قم بتشغيل قائمة الأوامر التالية (ls) لعرض جميع الملفات داخل الدليل المشترك (/shared-dir).

ls /shared-dir/

إذا كانت أذونات Sticky Bit تعمل، فسترى أن الملف fileB.txt الذي تم إنشاؤه بواسطة المستخدمB آمن وسليم ولم يتم حذفه.

Confirming the fileB.txt file still exists

الاستنتاج

بينما تختتم هذا الاستكشاف لأذونات الوصول الخاصة في نظام Linux، لقد فتحت مجموعة أدوات قوية: SUID، SGID، و Sticky Bit. بفضل هذا المعرفة، يمكنك الآن ضبط التحكم في الوصول وحماية ملفاتك بدقة.

ولكن لا تتوقف هنا! لماذا لا تجرب إعداد دليل مشترك بـ SGID وتجرب كيفية إرث الملفات ملكية المجموعة؟ عالم Linux هو ملعبك، ومع كل محاولة، ستتقن فن تأمين نظامك ببراعة!

Source:
https://adamtheautomator.com/special-permissions-in-linux/