Linux وسطر الأوامر للمدافع
درس 1 من 4
1Linux وسطر الأوامر للمدافع
الصورة الكبيرةتنبيه في منتصف الليل: «محاولات دخول كثيرة على خادم الويب». لا توجد واجهة رسومية، فقط طرفية سوداء. خلال دقيقتين يجب أن تعرف: من حاول، وكم مرة، وهل نجح أحدهم. هذا الدرس يعطيك تلك الدقيقتين.
ماذا تشاهد في الرسم: الأنبوب يمرر ناتج كل أمر للذي بعده: grep يختار الأسطر، وawk يقص العمود المطلوب، وsort وuniq يعدّان ويرتبان. أربعة أوامر صغيرة تحضر عن سؤال كبير.
خارطة هذا الجزء
المفاهيم بالترتيب، اضغط أيًّا منها للقفز إليه:
طريقان إلى نفس الفكرة
تخيّل الخادم بيتًا فيه دفتر زوار عند الباب يكتب فيه الحارس كل من طرق الباب ومتى ومن أين جاء، وهل فتح له أم لا. هذا الدفتر هو السجل (log). سطر الأوامر طريقة سريعة لتصفح هذا الدفتر: «أرني فقط من رُفض» (grep)، «عدّ كم مرة جاء كل شخص» (sort وuniq). لست مضطرًا لحفظ الأوامر الآن؛ المهم أن تعرف أن كل نشاط على الخادم يُكتب في مكان ما، وأن المحلل يقرأه ليعرف ما حدث.
الصلاحيات ثلاث مجموعات (المالك، والمجموعة، والآخرون) لكل منها r وw وx، تُقرأ رقميًا: 640 = المالك قراءة وكتابة، والمجموعة قراءة، والآخرون لا شيء. sudo ينفّذ بصلاحية الجذر ويُسجَّل في auth.log. السجلات المهمة: /var/log/auth.log (أو /var/log/secure في توزيعات RHEL) للدخول وsudo وSSH، و/var/log/syslog (أو messages) لأحداث النظام، وjournalctl -u ssh لسجلات systemd، و/var/log/audit/audit.log لـ auditd، و~/.bash_history للأوامر. الأدوات: grep -E وawk وcut وsort وuniq -c وhead وtail -f، وps aux وss -tulpn للعمليات والمنافذ، وfind / -perm -4000 للملفات ذات SUID. المرجع العملي: غرفة Linux Logging for SOC في TryHackMe.
قبل أن تبدأ
⌨️الطرفية (المرحلة 0 في هندسة البرمجيات)
إن جربت ls وcd من قبل فأنت جاهز؛ وإن لم تفعل فهذا الدرس يبدأ من أول أمر.
🛡️ما هو الأمن السيبراني؟
مبدأ أقل صلاحية.
الفكرة الجوهرية
1الملفات والمستخدمون والصلاحيات
في Linux كل شيء ملف: الإعدادات في /etc، والسجلات في /var/log، وملفات المستخدمين في /home. وكل ملف له مالك ومجموعة وصلاحيات. السطر -rw-r----- root adm auth.log يعني: المالك root يقرأ ويكتب، ومجموعة adm تقرأ فقط، والباقون لا شيء. لهذا تحتاج sudo أو عضوية adm لتقرأ سجل الدخول.
| الأمر | ماذا يفعل | لماذا يهم المدافع |
|---|---|---|
ls -l | يعرض الملفات بصلاحياتها ومالكها | ملف إعدادات قابل للكتابة للجميع ثغرة |
chmod 640 file | يغيّر الصلاحيات | تطبيق أقل صلاحية |
id · who · last | من أنا، ومن متصل، ومن دخل مؤخرًا | حساب غريب دخل الليلة الماضية؟ |
sudo -l | ما الذي يحق لي تنفيذه بصلاحية الجذر | صلاحيات sudo الزائدة طريق شائع لرفع الصلاحية |
find / -perm -4000 2>/dev/null | الملفات التي تعمل بصلاحية مالكها (SUID) | ملف SUID غير متوقع علامة خطر |
chmod 777. هذا يجعل الملف قابلًا للقراءة والكتابة والتشغيل لأي مستخدم، أي لأي مهاجم يدخل بأضعف حساب.2أين تسكن السجلات؟
حفظ هذه المواقع يوفر عليك ساعات. عند كل تنبيه اسأل: أي سجل يجيب عن هذا السؤال؟
| السجل | ماذا فيه | سؤال يجيب عنه |
|---|---|---|
/var/log/auth.log | الدخول وSSH وsudo وإنشاء المستخدمين (/var/log/secure في RHEL) | من حاول الدخول ومن نجح؟ |
/var/log/syslog | أحداث النظام والخدمات (messages في RHEL) | متى توقفت الخدمة؟ |
journalctl -u ssh | سجلات systemd لخدمة معيّنة | ماذا قالت خدمة SSH اليوم؟ |
/var/log/nginx/access.log | كل طلب وصل لخادم الويب | من طلب صفحة الإدارة؟ |
/var/log/audit/audit.log | أحداث auditd: الملفات والأوامر المراقبة | من عدّل /etc/passwd؟ |
~/.bash_history | الأوامر التي كتبها المستخدم | ماذا نفّذ المهاجم بعد الدخول؟ |
.bash_history أو يعطله. غيابه المفاجئ أو فراغه دليل بحد ذاته، ولهذا ترسل المؤسسات السجلات إلى SIEM خارج الخادم.3الأنابيب: سؤال أمني في سطر واحد
قوة سطر الأوامر في الأنبوب |: ناتج أمر يصبح مدخل الذي بعده. السؤال «أي عناوين IP فشلت في الدخول أكثر؟» يصبح سطرًا واحدًا. السكربت أدناه يحاكي الأنبوب نفسه خطوة خطوة بلغة بايثون، لتشغّله هنا وترى ما يفعله كل أمر.
$(NF-3) في awk يعني «الحقل الرابع من النهاية»، وهو عنوان IP في سطر Failed password. نفّذ هذه الأوامر على جهاز Linux أنت مالكه.
# Which IPs failed SSH sign-in the most?
sudo grep "Failed password" /var/log/auth.log \
| awk '{print $(NF-3)}' \
| sort | uniq -c | sort -rn | head -5
# Did any of them get in?
sudo grep "Accepted" /var/log/auth.log | grep 203.0.113.7
# Who used sudo, and to run what?
sudo grep "sudo:" /var/log/auth.log | grep COMMAND
# Watch new lines live during an incident
sudo tail -f /var/log/auth.logالقصة كاملة في ستة أسطر: تخمين من 203.0.113.7، ثم دخول ناجح لحساب admin، ثم إنشاء مستخدم جديد backup2 بصلاحية الجذر (أسلوب بقاء معروف). العناوين وهمية من النطاقات المخصصة للتوثيق.
from collections import Counter
auth_log = """\
Nov 02 01:14:02 web sshd[911]: Failed password for root from 203.0.113.7 port 50122 ssh2
Nov 02 01:14:05 web sshd[911]: Failed password for root from 203.0.113.7 port 50131 ssh2
Nov 02 01:14:09 web sshd[913]: Failed password for invalid user oracle from 198.51.100.40 port 41000 ssh2
Nov 02 01:14:11 web sshd[911]: Failed password for admin from 203.0.113.7 port 50140 ssh2
Nov 02 01:15:30 web sshd[920]: Accepted password for admin from 203.0.113.7 port 50201 ssh2
Nov 02 01:16:02 web sudo: admin : TTY=pts/0 ; PWD=/home/admin ; USER=root ; COMMAND=/usr/bin/useradd -m backup2
"""
lines = auth_log.splitlines()
failed = [l for l in lines if "Failed password" in l] # grep
ips = [l.split()[-4] for l in failed] # awk '{print $(NF-3)}'
for ip, n in Counter(ips).most_common(): # sort | uniq -c | sort -rn
print(f"{n:>3} {ip}")
print("--- did any of them get in? ---")
for l in lines:
if "Accepted" in l and any(ip in l for ip in ips):
print(l)
print("--- what ran as root? ---")
for l in lines:
if "COMMAND=" in l:
print(l.split("COMMAND=")[1])4العمليات والمنافذ: ماذا يعمل الآن؟
السجل يخبرك بما حدث، والعمليات والمنافذ تخبرك بما يحدث الآن. ps aux يعرض كل برنامج يعمل ومن شغّله، وss -tulpn يعرض المنافذ المفتوحة والبرنامج الذي يستمع على كل منها. برنامج غريب يستمع على منفذ عالٍ، أو عملية باسم يشبه اسم خدمة النظام لكن من مجلد /tmp، علامتان تستحقان التحقيق.
المنفذ 4444 شائع في أدوات التحكم عن بعد، والاسم يقلد عملية kworker في النواة، والمسار مخفي في /tmp. احتواء فوري: اعزل الخادم واحفظ الأدلة قبل أي حذف.
$ sudo ss -tulpn
Netid State Local Address:Port Process
tcp LISTEN 0.0.0.0:22 users:(("sshd",pid=640))
tcp LISTEN 0.0.0.0:443 users:(("nginx",pid=702))
tcp LISTEN 0.0.0.0:4444 users:(("kworkerd",pid=3112))
$ ps -o pid,user,cmd -p 3112
PID USER CMD
3112 www-data /tmp/.x/kworkerdمثال محلول
المسألة: من السجل أعلاه، اكتب ملخص الحادثة في ثلاثة أسطر كما يكتبه محلل المستوى الأول، واقترح خطوتين فوريتين.
الحل: «(1) بين 01:14 و01:15 حاول العنوان 203.0.113.7 الدخول بـ SSH ثلاث مرات فاشلة على root وadmin، ثم نجح في الدخول بحساب admin بكلمة مرور. (2) في 01:16 أنشأ الحساب مستخدمًا جديدًا backup2 عبر sudo، وهو أسلوب بقاء (ATT&CK T1136 Create Account). (3) الخطورة عالية: دخول ناجح وتغيير في الحسابات.» الخطوات الفورية: عطّل الحسابين admin وbackup2 وأنهِ جلساتهما، وامنع العنوان على الجدار الناري، ثم صعّد للمستوى الثاني مع السجل. وعلى المدى الأبعد: دخول SSH بالمفاتيح فقط (PasswordAuthentication no) وأداة مثل fail2ban.
خرافة مقابل حقيقة
| الخرافة | الحقيقة |
|---|---|
| الأمن السيبراني واجهات رسومية ولوحات ملونة. | اللوحات تعرض التنبيه، لكن التحقيق في الخادم يمر غالبًا بالطرفية والسجلات النصية. |
| يجب أن أحفظ مئات الأوامر. | نحو عشرين أمرًا تغطي أغلب العمل اليومي، والباقي تبحث عنه في man. |
| Linux آمن بطبيعته فلا يحتاج مراقبة. | أغلب خوادم الإنترنت تعمل عليه، فهو هدف دائم؛ الإعداد والتحديث والمراقبة هي ما يحميه. |
أين تقابله في العمل
🚨محلل SOC
يتحقق من تنبيه SIEM بقراءة السجل الأصلي على الخادم.
🧯المستجيب للحوادث
يجمع العمليات والمنافذ والسجلات قبل عزل الخادم.
☁️أمن السحابة
خوادم السحابة Linux في الغالب، وكل أداة دفاع فيها تُدار من الطرفية.
اختبر فهمك
أين تبحث عن محاولات دخول SSH على خادم Ubuntu؟
auth.log يسجل الدخول وSSH وsudo؛ في RHEL اسمه secure.
ماذا تعني الصلاحيات 640؟
6 = r+w، و4 = r، و0 = لا شيء.
أي أمر يعرض المنافذ المفتوحة والبرنامج الذي يستمع عليها؟
t وu لـ TCP وUDP، وl للمستمع، وp للبرنامج، وn للأرقام.
ماذا يفعل sort | uniq -c | sort -rn في آخر الأنبوب؟
uniq -c يعدّ الأسطر المتتالية المتطابقة، لذلك نرتب قبله.
عملية اسمها kworkerd تعمل من /tmp وتستمع على 4444. ما أفضل خطوة أولى؟
الحذف وإعادة التشغيل يمحوان الأدلة؛ الاحتواء أولًا.
لماذا chmod 777 خطأ أمني؟
يكسر مبدأ أقل صلاحية تمامًا.
بطاقات مراجعة سريعة
تحقق من فهمك
لماذا ترسل المؤسسات السجلات إلى SIEM بدل قراءتها على الخادم فقط؟
لأن المهاجم الذي يصل للخادم يستطيع محو سجلاته، ولأن الربط بين خوادم كثيرة لا يتم إلا في مكان واحد.
سطر في auth.log يقول Accepted publickey بدل Accepted password. ما الفرق أمنيًا؟
الدخول بالمفتاح أقوى بكثير لأن المفتاح لا يُخمَّن؛ لكن إن جاء من عنوان غريب فقد يعني مفتاحًا مسروقًا.
كيف تتدرب على الأوامر بأمان؟
على جهاز Linux افتراضي تملكه، ولعبة Bandit في OverTheWire، وغرف TryHackMe. لا تجرب على خوادم لا تملكها.
مصادر هذا الدرس
مرتّبة بالنوع. ابدأ بالتوثيق الرسمي إذا تبي المرجع الدقيق، وبالمقال أو الفيديو إذا تبي الشرح أولًا.
خلّصت الدرس؟
سجّل الدخول ليُحفظ تقدّمك.