أساسيات لينكس
مقدمة
لينكس هو نظام تشغيل مفتوح المصدر مبني على يونكس. فهم لينكس ضروري في الأمن السيبراني لأن:
- معظم خوادم الويب تستخدم لينكس
- أدوات الأمان غالبًا ما تُطور للينكس
- WSL يسمح باستخدام لينكس تحت ويندوز
مقارنة بين ويندوز ولينكس
هيكل نظام الملفات
| الجانب | ويندوز | لينكس |
|---|---|---|
| الجذر | C:\ | / |
| الفاصل | \ | / |
| حساسية الحالة | لا | نعم |
| المستخدمون | C:\Users\nom | /home/nom |
| البرامج | C:\Program Files | /usr/bin, /opt |
| التكوين | السجل | ملفات نصية (/etc) |
شجرة لينكس
/
├── bin/ # الثنائيات الأساسية
├── boot/ # ملفات التمهيد
├── dev/ # الأجهزة
├── etc/ # تكوين النظام
├── home/ # أدلة المستخدمين
├── lib/ # المكتبات
├── media/ # نقاط تركيب الوسائط
├── mnt/ # نقاط تركيب مؤقتة
├── opt/ # البرامج الاختيارية
├── proc/ # العمليات (افتراضي)
├── root/ # المنزل للمستخدم الجذر
├── sbin/ # الثنائيات النظامية
├── tmp/ # الملفات المؤقتة
├── usr/ # برامج المستخدم
└── var/ # البيانات المتغيرة (السجلات، البريد)
الأوامر الأساسية
التنقل
# الدليل الحالي
pwd
# سرد الملفات
ls
ls -la # تفاصيل + ملفات مخفية
ls -lh # أحجام قابلة للقراءة
# تغيير الدليل
cd /chemin
cd ~ # المنزل
cd - # السابق
cd .. # الأصل
الملفات والمجلدات
# إنشاء
mkdir dossier
touch fichier
# نسخ
cp source destination
cp -r dossier/ destination/
# نقل/إعادة تسمية
mv source destination
# حذف
rm fichier
rm -r dossier/
rm -rf dossier/ # إجباري (خطر!)
# عرض المحتوى
cat fichier
less fichier # تقسيم الصفحات
head -n 10 fichier
tail -n 10 fichier
tail -f fichier # متابعة في الوقت الحقيقي
البحث
# العثور على الملفات
find /chemin -name "*.txt"
find / -type f -name "password*"
find / -perm -4000 # SUID
# البحث في الملفات
grep "motif" fichier
grep -r "motif" /chemin/
grep -i "motif" fichier # غير حساس للحالة
الأذونات
# عرض الأذونات
ls -l fichier
# التنسيق: -rwxrwxrwx
# │└┬┘└┬┘└┬┘
# │ │ │ └── الآخرين (o)
# │ │ └───── المجموعة (g)
# │ └──────── المالك (u)
# └────────── النوع (- ملف، d مجلد)
# تعديل الأذونات
chmod 755 fichier # rwxr-xr-x
chmod u+x fichier # إضافة تنفيذ للمستخدم
chmod go-w fichier # إزالة الكتابة للمجموعة/الآخرين
# تعديل المالك
chown user:group fichier
قيم chmod
| القيمة | الإذن |
|---|---|
| 7 | rwx (قراءة + كتابة + تنفيذ) |
| 6 | rw- (قراءة + كتابة) |
| 5 | r-x (قراءة + تنفيذ) |
| 4 | r-- (قراءة فقط) |
| 0 | --- (لا شيء) |
المستخدمون والمجموعات
الملفات المهمة
| الملف | المحتوى |
|---|---|
/etc/passwd | قائمة المستخدمين |
/etc/shadow | كلمات المرور المشفرة |
/etc/group | قائمة المجموعات |
/etc/sudoers | تكوين sudo |
أوامر المستخدمين
# المستخدم الحالي
whoami
id
# تغيير المستخدم
su - username
su - # تصبح الجذر
# تنفيذ كجذر
sudo commande
sudo -i # شل الجذر
# إدارة المستخدمين
useradd username
passwd username
userdel username
العمليات
الأوامر
# سرد العمليات
ps aux
ps -ef
# شجرة العمليات
pstree
# الوقت الحقيقي
top
htop # نسخة محسنة
# قتل عملية
kill PID
kill -9 PID # إجباري
killall nom
# الخلفية
commande &
jobs
fg %1
bg %1
الإشارات الشائعة
| الإشارة | الرقم | الوصف |
|---|---|---|
| SIGTERM | 15 | إنهاء بشكل نظيف |
| SIGKILL | 9 | قتل فورًا |
| SIGINT | 2 | مقاطعة (Ctrl+C) |
| SIGHUP | 1 | قطع الاتصال |
الشبكة
الأوامر
# تكوين IP
ip addr
ifconfig # قديم
# الاتصالات
netstat -tulpn
ss -tulpn # حديث
# اختبار الاتصال
ping adresse
traceroute adresse
# DNS
nslookup domaine
dig domaine
# النقل
wget url
curl url
curl -o fichier url
# الاتصال عن بعد
ssh user@serveur
scp fichier user@serveur:/chemin/
الخدمات والعمليات الخلفية
systemd (حديث)
# الحالة
systemctl status service
# بدء/إيقاف
systemctl start service
systemctl stop service
systemctl restart service
# تفعيل/تعطيل عند الإقلاع
systemctl enable service
systemctl disable service
# سرد الخدمات
systemctl list-units --type=service
SysVinit (قديم)
service nom start
service nom stop
service nom status
الملفات المهمة للأمان
التكوين
| الملف | الوصف |
|---|---|
/etc/passwd | حسابات المستخدمين |
/etc/shadow | تجزئة كلمات المرور |
/etc/sudoers | امتيازات sudo |
/etc/ssh/sshd_config | تكوين SSH |
/etc/crontab | المهام المجدولة للنظام |
السجلات
| الملف | الوصف |
|---|---|
/var/log/auth.log | المصادقة (Debian) |
/var/log/secure | المصادقة (RedHat) |
/var/log/syslog | سجلات النظام |
/var/log/messages | رسائل عامة |
/var/log/apache2/ | سجلات Apache |
استعراض السجلات
# Journalctl (systemd)
journalctl
journalctl -u service
journalctl -f # الوقت الحقيقي
journalctl --since today
# الملفات
tail -f /var/log/auth.log
grep "Failed" /var/log/auth.log
البتات الخاصة (الأمان)
SUID (تعيين معرف المستخدم)
يسمح بتنفيذ برنامج بامتيازات المالك.
# العثور على الملفات SUID
find / -perm -4000 2>/dev/null
# مثال: passwd لديه SUID root لتعديل /etc/shadow
ls -l /usr/bin/passwd
# -rwsr-xr-x 1 root root ... /usr/bin/passwd
SGID (تعيين معرف المجموعة)
مماثل ولكن للمجموعة.
find / -perm -2000 2>/dev/null
Sticky Bit
يمنع حذف الملفات من قبل غير المالكين.
ls -ld /tmp
# drwxrwxrwt ... /tmp
# يشير 't' إلى sticky bit
البرمجة النصية الأساسية في Bash
أول برنامج نصي
#!/bin/bash
# برنامجي النصي الأول
echo "مرحبًا، $USER!"
echo "اليوم هو $(date)"
echo "أنت في $(pwd)"
المتغيرات والشروط
#!/bin/bash
# المتغيرات
nom="Linux"
version=5
# الشرط
if [ $version -gt 4 ]; then
echo "$nom الإصدار $version حديث"
else
echo "إصدار قديم"
fi
# الحلقة
for i in 1 2 3 4 5; do
echo "التكرار $i"
done
برنامج نصي مفيد - تعداد أساسي
#!/bin/bash
# تعداد النظام الأساسي
echo "=== معلومات النظام ==="
echo "اسم المضيف: $(hostname)"
echo "النواة: $(uname -a)"
echo "المستخدم: $(whoami)"
echo "المعرف: $(id)"
echo -e "\n=== المستخدمون ==="
cat /etc/passwd | cut -d: -f1
echo -e "\n=== ملفات SUID ==="
find / -perm -4000 2>/dev/null
echo -e "\n=== المهام المجدولة ==="
cat /etc/crontab
echo -e "\n=== اتصالات الشبكة ==="
ss -tulpn
WSL (النظام الفرعي لويندوز للينكس)
التثبيت
# PowerShell (Admin)
wsl --install
# اختيار توزيعة
wsl --install -d Ubuntu
أوامر WSL
# سرد التوزيعات
wsl --list --verbose
# بدء
wsl
# الوصول إلى ملفات ويندوز
cd /mnt/c/Users/
# من ويندوز، الوصول إلى لينكس
\\wsl$\Ubuntu\home\user\
التمارين
- تنقل في نظام الملفات وسرد الملفات في
/etc - أنشئ ملفًا وعدل أذوناته إلى 644
- اعثر على جميع ملفات SUID في النظام
- اكتب برنامجًا نصيًا يعرض معلومات النظام
- استعرض سجلات المصادقة