
لينكس للهاكرز #3: من يملك حق التصرف؟ الصلاحيات والعمليات كما يراها الهاكر
Murtaja
🧭 قبل أن نبدأ
هذه الحلقة الثالثة من سلسلة Linux Basics for Hackers، وهي من أهم الحلقات على الإطلاق، لأنها تكشف الفرق بين مستخدم لينكس العادي والهاكر: فهم عميق لنظام الصلاحيات، وكيف يمكن لخلل بسيط فيه أن يتحول إلى طريق مباشر للسيطرة الكاملة على نظام. نغطي اليوم الفصل الخامس: التحكم في صلاحيات الملفات والمجلدات، والفصل السادس: إدارة العمليات.
🔐 الفصل الخامس: التحكم في صلاحيات الملفات والمجلدات (Controlling File and Directory Permissions)
يفتتح الكاتب الفصل بفكرة تأسيسية عن سبب وجود الصلاحيات أصلًا:
"Not every user of a single operating system should have the same level of access to files and directories... This is a necessity in a multiuser, enterprise-level operating system. The alternative would be quite chaotic." — "ليس من الضروري أن يملك كل مستخدم في نظام تشغيل واحد نفس مستوى الوصول للملفات والمجلدات... هذا أمر ضروري في نظام تشغيل متعدد المستخدمين على مستوى المؤسسات. البديل سيكون فوضى حقيقية."
👥 المستخدمون والمجموعات
في لينكس، المستخدم root يملك سلطة مطلقة، بينما بقية المستخدمين يُجمَّعون عادة في مجموعات (Groups) حسب وظيفتهم (مطورون، مسؤولو شبكات، مسؤولو قواعد بيانات...). عندما تنضم لمجموعة، ترث صلاحياتها تلقائيًا — فكرة ذكية توفر وقتًا هائلًا في إدارة الصلاحيات بدلًا من ضبطها لكل مستخدم على حدة.
يمكنك نقل ملكية ملف لمستخدم آخر عبر:
kali > chown bob /tmp/bobsfile
أو نقل ملكيته لمجموعة أخرى عبر:
kali > chgrp security newIDS
🔍 قراءة الصلاحيات: فك شيفرة rwx
عند تنفيذ ls -l، ستواجه سلسلة رموز غامضة مثل -rw-r--r--. إليك كيف نفكّكها:
- الحرف الأول: نوع الملف (
dلمجلد،-لملف عادي). - بعده تسعة أحرف مقسّمة لثلاث مجموعات ثلاثية: الأولى للمالك (Owner)، الثانية للمجموعة (Group)، الثالثة للجميع (Others).
- كل مجموعة ثلاثية تمثل: r (قراءة)، w (كتابة)، x (تنفيذ)، وإن ظهرت شرطة
-مكان أي حرف فهذا يعني غياب تلك الصلاحية.
مثال: -rw-r--r-- يعني أن المالك يملك قراءة وكتابة، بينما المجموعة وبقية المستخدمين يملكون قراءة فقط.
🔢 chmod: تغيير الصلاحيات بطريقتين
الطريقة الأولى — الترميز العشري (Octal): كل صلاحية تُمثَّل برقم: r=4, w=2, x=1، ويُجمع الرقمان أو الثلاثة للحصول على قيمة واحدة تمثل كل مجموعة ثلاثية. مثلًا rwx = 4+2+1 = 7. لذلك أمر مثل:
kali > chmod 774 hashcat.hcstat
يعطي المالك كل الصلاحيات (7)، والمجموعة كل الصلاحيات (7)، والجميع القراءة فقط (4).
الطريقة الثانية — رموز UGO (User/Group/Others) وهي أكثر وضوحًا للبعض:
kali > chmod u-w hashcat.hcstat # إزالة صلاحية الكتابة عن المالك
kali > chmod u+x,o+x hashcat.hcstat # إضافة صلاحية التنفيذ للمالك وللجميع
⚠️ لماذا لا تستطيع تشغيل أداة اختراق حمّلتها للتو؟
نقطة عملية جدًا يشرحها الكاتب: عندما تُنزّل أداة جديدة، يمنحها لينكس افتراضيًا صلاحيات 666 للملفات و777 للمجلدات — أي بدون صلاحية تنفيذ لأي أحد. هذا يفسّر لماذا تحصل غالبًا على رسالة "Permission denied" أول مرة تحاول تشغيل أداة اختراق جديدة. الحل بسيط:
kali > chmod 766 newhackertool
🎭 الصلاحيات الخاصة: حيث يلتقي الأمن بالاختراق
هذا هو الجزء الأكثر إثارة في الفصل. هناك ثلاث صلاحيات خاصة إضافية:
- SUID (Set User ID): تسمح لأي مستخدم بتشغيل ملف بصلاحيات مالكه (غالبًا root) بشكل مؤقت، حتى لو لم يكن ذلك المستخدم يملك تلك الصلاحيات أصلًا. مثال كلاسيكي: أمر
passwdالذي يحتاج صلاحيات root للوصول لملف/etc/shadowحتى يستطيع أي مستخدم عادي تغيير كلمة مروره. - SGID (Set Group ID): نفس الفكرة لكن على مستوى المجموعة بدلًا من المالك.
- Sticky Bit: صلاحية قديمة من أنظمة يونكس، لم تعد الأنظمة الحديثة تستخدمها فعليًا، لكن يجدر معرفة الاسم.
وهنا يأتي الدرس الأهم في الفصل بأكمله، وهو ما يجعل الفصل "بعيون هاكر" لا مجرد شرح تقني:
"As a hacker, these special permissions can be used to exploit Linux systems through privilege escalation, whereby a regular user gains root or sysadmin privileges." — "كهاكر، يمكن استغلال هذه الصلاحيات الخاصة لاختراق أنظمة لينكس من خلال تصعيد الصلاحيات (Privilege Escalation)، حيث يحصل مستخدم عادي على صلاحيات root أو مسؤول النظام."
بمعنى آخر: إن وجد الهاكر ملفًا مضبوطًا خطأً بصلاحية SUID، فقد يستغله للقفز من "مستخدم عادي" إلى "root" دفعة واحدة. للبحث عن هذه الملفات المحتملة الخطورة على أي نظام:
kali > find / -user root -perm -4000
وعند فحص نتائج هذا الأمر بـ ls -l، ستلاحظ حرف s بدلًا من x في خانة صلاحيات المالك (مثل -rwsr-xr-x في ملف sudo) — وهذه هي علامة SUID المميزة. هذا التفصيل الصغير هو بالضبط ما يبحث عنه فاحصو الأنظمة (Auditors) ومختبرو الاختراق في أي تقييم أمني حقيقي.
🎚️ umask: ضبط الصلاحيات الافتراضية من الأساس
بدلًا من تعديل صلاحيات كل ملف بعد إنشائه، يمكنك ضبط umask ليقرر تلقائيًا صلاحيات أي ملف أو مجلد جديد تُنقص من القيمة الأساسية (666 للملفات، 777 للمجلدات). فمثلًا umask بقيمة 022 (الإعداد الافتراضي في Kali) يجعل الملفات الجديدة تُنشأ بصلاحية 644 بدلًا من 666.
⚙️ الفصل السادس: إدارة العمليات (Process Management)
"A process is simply a program that's running and using resources... once a hacker takes control of a target system, they might want to find and stop a certain process, like an antivirus application or firewall." — "العملية (Process) هي ببساطة برنامج قيد التشغيل يستخدم موارد النظام... عندما يسيطر الهاكر على نظام هدف، قد يرغب في إيجاد وإيقاف عملية معينة، مثل برنامج مضاد فيروسات أو جدار حماية."
هذه الجملة تلخّص سبب أهمية هذا الفصل لأي هاكر: التحكم في العمليات هو التحكم في النظام نفسه.
👁️ مشاهدة العمليات: ps وtop
ps بمفردها تعرض فقط العمليات التي بدأها المستخدم الحالي في الطرفية الحالية — معلومات محدودة جدًا. الأمر الحقيقي المفيد هو:
kali > ps aux
الذي يعرض كل العمليات لكل المستخدمين، مع أعمدة مهمة: USER (من شغّلها)، PID (المعرّف الفريد للعملية)، %CPU و%MEM (استهلاك الموارد)، وCOMMAND (اسم الأمر).
ولتصفية عملية محددة بسرعة (بدلًا من قراءة عشرات الأسطر)، نستخدم نفس فلسفة الأنبوب | التي تعلمناها في الفصل الأول:
kali > ps aux | grep msfconsole
بينما ps تعطيك "لقطة" واحدة، فإن top يعرض العمليات بشكل حيّ ومتجدد كل 3 ثوانٍ، مرتبة تلقائيًا حسب استهلاك الموارد من الأكثر إلى الأقل — أداة يبقيها أي مسؤول نظام مفتوحة طوال الوقت لمراقبة صحة الخادم.
⚖️ nice وrenice: كن "لطيفًا" (أو لا تكن)
مفهوم طريف: قيمة "nice" (من -20 إلى +19) تحدد أولوية العملية. القيمة المنخفضة (وحتى السالبة) تعني أولوية أعلى (أي أنك "أقل لطفًا" مع بقية العمليات لأنك تأخذ موارد أكثر)، بينما القيمة المرتفعة تعني أولوية أقل. يشرح الكاتب الفارق الدقيق بين الأمرين:
nice: يُستخدم عند بدء العملية، ويأخذ قيمة "تزايدية" (نطلب زيادة أو نقصان عن الافتراضي):
kali > nice -n -10 /bin/slowprocess
renice: يُستخدم على عملية قيد التشغيل فعلًا، ويأخذ رقم PID بدلًا من اسم البرنامج، وقيمة مطلقة لا تزايدية:
kali > renice 19 6996
☠️ قتل العمليات: kill وkillall
يوجد 64 إشارة قتل مختلفة في لينكس، لكن أهمها:
| الإشارة | الرقم | الوصف |
|---|---|---|
| SIGHUP | 1 | يوقف العملية ويعيد تشغيلها بنفس الـ PID |
| SIGINT | 2 | إشارة مقاطعة ضعيفة، لا تضمن النجاح دائمًا |
| SIGTERM | 15 | الإشارة الافتراضية لأمر kill |
| SIGKILL | 9 | إشارة القتل المطلق، تجبر العملية على التوقف فورًا |
عمليًا، القاتل الحاسم الذي يستخدمه الجميع عند الحاجة لإنهاء عملية "متمردة" هو:
kali > kill -9 6996
أو إن كنت لا تعرف رقم PID، استخدم الاسم مباشرة:
kali > killall -9 rogueprocess
🔄 التشغيل في الخلفية: & وbg وfg
لتشغيل أمر في الخلفية دون أن يشغل الطرفية بالكامل، أضف & في نهاية الأمر:
kali > leafpad newscript &
هذا يعيد لك سطر الأوامر فورًا بينما يستمر البرنامج بالعمل. ولإرجاع عملية من الخلفية إلى الواجهة، استخدم fg رقم_العملية.
⏰ جدولة العمليات مع at
يشرح الكاتب أداة at لجدولة تنفيذ أمر لمرة واحدة في المستقبل (بينما crond — الذي سنتعمق فيه لاحقًا في الفصل 16 — مخصص للمهام المتكررة). مثال:
kali > at 7:20am
at > /root/myscanningscript
فكرة مهمة لأي هاكر يريد تشغيل سكريبت استطلاع (Reconnaissance) في وقت محدد دون أن يكون جالسًا أمام الجهاز.
💎 اقتباسات هذا الجزء تستحق التوقف عندها
- "ليس من الضروري أن يملك كل مستخدم نفس مستوى الوصول... البديل سيكون فوضى حقيقية." — الأساس الفلسفي لكل نظام صلاحيات في أي نظام تشغيل احترافي.
- "يمكن استغلال هذه الصلاحيات الخاصة لتصعيد الصلاحيات من مستخدم عادي إلى root." — أخطر جملة في الفصل، وأهم درس أمني فيه.
- "عندما يسيطر الهاكر على نظام هدف، قد يرغب في إيجاد وإيقاف عملية مضاد الفيروسات." — يوضح أن معرفة إدارة العمليات ليست مهارة إدارية فقط، بل مهارة هجومية أيضًا.
🎯 خلاصة الجزء
الفصلان الخامس والسادس يشتركان في فكرة واحدة: من يملك السيطرة على ماذا. الصلاحيات تحدد من يستطيع فعل ماذا على الملفات، والعمليات تحدد ماذا يعمل فعليًا على النظام في هذه اللحظة. وكما رأينا، فإن فهم هذين المجالين بعمق يفتح البابين معًا: باب الحماية (كيف تُحصّن نظامك)، وباب الاستغلال (كيف يبحث الهاكر عن الثغرات). هذه الازدواجية هي جوهر فلسفة الكتاب بأكمله.
في الحلقة القادمة ننتقل إلى الفصل السابع: إدارة متغيرات بيئة المستخدم، والفصل الثامن: البرمجة النصية بـ Bash — حيث نبدأ الانتقال من "استخدام الأوامر" إلى "بناء أدواتنا الخاصة". 🚀