מבוא ללינוקס CLI
מבוא ללינוקס CLI — ניווט, קבצים והרשאות
שיעור זה בונה את הבסיס המוחלט ללינוקס. לפני שאפשר לעשות סייבר — חייבים להרגיש בנוח בטרמינל. נלמד לנווט, לנהל קבצים, להבין הרשאות, ולעבוד עם תהליכים.
- פילוסופיית Linux — למה זה כלי הסייבר המרכזי לעומת Windows
- מבנה Filesystem: עץ ספריות, /etc, /var, /home, /proc, /dev
- ניווט בסיסי: pwd, ls, cd — נתיב מוחלט ויחסי
- ניהול קבצים: mkdir, rm, cp, mv, touch, cat, less, tail -f
- מודל הרשאות: owner/group/other, rwx, chmod — סימבולי ואוקטלי
- ביטים מיוחדים: SUID, SGID, Sticky Bit — וחשיבותם ל-CTF
- /etc/passwd ו-/etc/shadow — כיצד Linux מאחסן משתמשים וסיסמאות
- sudo ו-root — הרשאות מוגברות, /etc/sudoers, Privilege Escalation
- ניהול תהליכים: ps, top, kill, bg/fg
- Wildcards וגלובינג: *, ?, [] — חיסכון בהקלדה
פילוסופיית Linux
לפני שנלמד פקודות, חשוב להבין למה Linux הוא הבחירה של 95% מאנשי הסייבר — ולמה אתם חייבים להרגיש בו כמו בבית.
Linux לעומת Windows — ההבדל הקריטי לסייבר
| נושא | Linux | Windows | למה זה חשוב לסייבר |
|---|---|---|---|
| Open Source | קוד מקור פתוח לחלוטין | סגור ומקנייני | ניתן לחקור כל רכיב |
| CLI First | שורת פקודה = לב המערכת | GUI מרכזי, CLI משני | כלי סייבר = CLI ברובם |
| Permissions | מודל Unix מחמיר ומדויק | ACL מורכב יותר | הבנת הרשאות = זיהוי חולשות |
| שרתים | 90%+ שרתי האינטרנט | מיעוט שרתים | רוב ה-Targets = Linux |
| כלי הקינג | Kali, Parrot = על Linux | מעט כלים ל-Windows | הכלים חיים ב-Linux |
| /proc ו-/sys | Kernel חשוף כקבצים | Registry ו-API | פורנזיקה ו-Debugging |
| Scripting | Bash + כל שפה מובנית | PowerShell (חזק אך שונה) | אוטומציה מהירה |
עקרון "הכל קובץ"
ב-Linux, כמעט כל דבר מיוצג כקובץ: מסך הטרמינל, כרטיס הרשת, מידע על תהליכים — הכל קובץ. אפשר להשתמש באותן פקודות לכל דבר.
| דוגמה | מיוצג כ | מה ניתן לעשות |
|---|---|---|
| /dev/sda | קובץ כונן דיסק | כתיבה ישירה לדיסק |
| /proc/cpuinfo | קובץ מידע CPU | cat /proc/cpuinfo = מידע מלא |
| /proc/PID/ | ספריה לתהליך רץ | ls /proc/1234 = כל מידע על תהליך |
| /proc/net/tcp | קובץ חיבורי רשת | חיבורי TCP פעילים |
| /dev/pts/N | קובץ Terminal | echo 'hi' > /dev/pts/0 |
מבנה Filesystem
Linux מארגן הכל בעץ ספריות יחיד שמתחיל ב-/ (Root). אין C:\ או D:\ כמו ב-Windows. הבנת המבנה חיונית לכל פעולה ב-CTF ובסייבר.
| ספריה | תוכן | חשיבות לסייבר |
|---|---|---|
| / | שורש המערכת | נקודת התחלה לכל ניתוח |
| /etc | קבצי קונפיגורציה | passwd, shadow, hosts, nginx.conf — מטרות RE |
| /home | ספריות הבית של משתמשים | דטה של משתמשים — target ב-CTF |
| /root | ספריית הבית של root | הנחשקת ביותר — לרוב מכילה flag |
| /var/log | קבצי Log | auth.log, syslog — מי ניסה מה |
| /tmp | קבצים זמניים | מקום נפוץ לכתוב Payloads |
| /bin, /usr/bin | פקודות בסיסיות | ls, cat, grep — הכלים שלנו |
| /proc | Pseudo-filesystem — מידע Kernel | מידע חי על תהליכים ומערכת |
| /dev | קבצי Device | /dev/null, /dev/random, /dev/sda |
| /lib | ספריות משותפות (.so files) | Dynamic libraries — RE target |
- /etc/passwd — רשימת כל המשתמשים (קריא לכולם!)
- /etc/shadow — הסיסמאות המוצפנות (דורש root)
- /etc/hosts — מיפוי שמות לכתובות IP מקומי
- /var/log/auth.log — ניסיונות כניסה
- /tmp — כתיבה לכולם — מקום נפוץ לכתוב Payloads
- /proc/[PID]/maps — מיפוי זיכרון של תהליך
- /proc/net/tcp — חיבורי TCP פעילים
ניווט ב-Filesystem
שלוש הפקודות הבסיסיות: איפה אני? מה יש כאן? לאן אני הולך? — pwd, ls, cd.
pwd ו-cd — מיקום וניווט
# pwd = Print Working Directory
$ pwd
/home/alice
$ cd /var/log # נתיב מוחלט — תמיד מ-/
$ cd documents # נתיב יחסי — מהמיקום הנוכחי
$ cd .. # ספריה אחת למעלה
$ cd ../.. # שתי ספריות למעלה
$ cd ~ # ספריית הבית של המשתמש הנוכחי
$ cd # ספריית הבית (ללא ארגומנט)
$ cd - # חזרה לספריה הקודמת (שימושי!)ls — רישום תוכן
ls # רישום בסיסי
ls -l # פורמט ארוך — הרשאות, גודל, תאריך
ls -la # כולל קבצים נסתרים (מתחילים ב-.)
ls -lh # גודל קריא לאדם (K/M/G)
ls -lt # מסודר לפי זמן שינוי
ls -lS # מסודר לפי גודל
# פלט ls -l:
$ ls -la /home/alice
total 48
drwxr-xr-x 5 alice users 4096 Jun 10 09:00 .
drwxr-xr-x 12 root root 4096 Jun 1 12:00 ..
-rw-r--r-- 1 alice users 220 Jun 1 12:00 .bash_logout
drwxr-xr-x 2 alice users 4096 Jun 5 14:00 documents
-rwxr-xr-x 1 alice users 8904 Jun 10 09:00 script.sh
# עמודות: הרשאות | links | owner | group | גודל | תאריך | שםניהול קבצים
יצירה, מחיקה, העתקה, הזזה, קריאה — הפעולות היומיומיות שתריצו אלפי פעמים.
יצירה ומחיקה
# יצירת ספריות
mkdir new_dir # ספריה חדשה
mkdir -p a/b/c # יצירת עץ שלם (כולל הורים)
mkdir -p project/{src,tests,docs} # מספר ספריות בבת אחת
# יצירת קבצים
touch file.txt # קובץ ריק (או עדכון timestamp)
echo "hello" > file.txt # כתיבה לקובץ (מחליף תוכן!)
echo "world" >> file.txt # הוספה לסוף (Append)
# מחיקה
rm file.txt # מחיקת קובץ
rm -r directory/ # מחיקת ספריה (Recursive)
rm -rf directory/ # מחיקה בכוח (⚠️ מסוכן!)
rm *.log # מחיקת כל קבצי .log! אין Recycle Bin ב-Linux — rm = נצחי ›
rm מוחק לצמיתות. אין סל מיחזור. rm -rf / = הרס מוחלט של המערכת. תמיד ודאו שכתבתם את הנתיב הנכון לפני לחיצה על Enter.
העתקה, הזזה וקריאה
# cp = Copy
cp source.txt dest.txt # העתקת קובץ
cp -r source_dir/ dest_dir/ # העתקת ספריה שלמה
cp -p file.txt backup/ # שמור permissions ו-timestamps
# mv = Move (גם שינוי שם!)
mv old_name.txt new_name.txt # שינוי שם
mv file.txt /home/alice/ # העברה למיקום אחר
mv *.log /var/log/archive/ # העברת כמה קבצים
# קריאת קבצים
cat file.txt # הצג כל הקובץ
cat -n file.txt # עם מספרי שורות
less /var/log/syslog # Space=עמוד הבא | q=יציאה
head -n 20 file.txt # 20 שורות ראשונות
tail -n 50 /var/log/auth.log # 50 שורות אחרונות
tail -f /var/log/syslog # עקוב בזמן אמת! (Follow)
file mystery_binary # זיהוי סוג קובץ (לא לפי סיומת!)מודל הרשאות — rwx ו-chmod
מודל הרשאות של Unix הוא אחד הרכיבים הקריטיים ביותר בלינוקס — לאבטחה, ל-CTF ולהבנת המערכת. כל קובץ וספריה מכילים שלוש שכבות הרשאות.
מודל Owner/Group/Other
$ ls -l file.sh
-rwxr-xr-- 1 alice developers 4096 Jun 10 file.sh
# פירוש:
# - rwx r-x r--
# ↑ ↑↑↑ ↑↑↑ ↑↑↑
# type owner grp other
# owner (alice): rwx = קרא, כתוב, הרץ
# group (developers): r-x = קרא והרץ, לא כתוב
# other (כולם אחרים): r-- = קרא בלבד| סימן | שם | על קובץ | על ספריה |
|---|---|---|---|
| r | Read | קריאת תוכן הקובץ | ls — רישום תוכן הספריה |
| w | Write | שינוי תוכן הקובץ | יצירה/מחיקה של קבצים בה |
| x | Execute | הרצת הקובץ כתוכנית | cd — כניסה לספריה |
| - | None | אין הרשאה | אין הרשאה |
! הרשאות על ספריה — שונה ממה שנדמה! ›
r בלבד על ספריה: אפשר לראות שמות קבצים (ls), אבל לא תוכן (cat יכשל).
x בלבד על ספריה: אפשר לעבור דרכה (cd), אבל לא לראות מה בה (ls יכשל).
w ללא x: אי אפשר ליצור קבצים (x חסר = אי אפשר לגשת ל-inode).
chmod — שינוי הרשאות
# Symbolic Mode — קריא יותר
chmod +x script.sh # הוסף execute לכולם
chmod u+x script.sh # הוסף execute רק לowner
chmod g-w file.txt # הסר write מה-group
chmod o-rwx secret.txt # הסר הכל מother
chmod a+r public.txt # הוסף read לכולם
# Octal Mode — מהיר יותר
# r=4, w=2, x=1 | ספרה = owner / group / other
chmod 755 script.sh # rwxr-xr-x (owner:rwx, others:r-x)
chmod 644 file.txt # rw-r--r-- (config, html)
chmod 600 private.key # rw------- (מפתחות SSH)
chmod 700 my.sh # rwx------ (תוכנית פרטית)
chmod 777 shared/ # ⚠️ הכל לכולם — מסוכן!
chmod -R 755 project/ # Recursive על כל תת-ספריות| Octal | Symbolic | משמעות | שימוש נפוץ |
|---|---|---|---|
| 777 | rwxrwxrwx | הכל לכולם | ⚠️ מסוכן — הימנעו |
| 755 | rwxr-xr-x | owner הכל, אחרים קרא+הרץ | תוכניות, ספריות |
| 700 | rwx------ | רק owner יכול הכל | תוכניות פרטיות |
| 644 | rw-r--r-- | owner כותב, אחרים קוראים | קבצי config, html |
| 600 | rw------- | רק owner קורא+כותב | מפתחות SSH |
| 400 | r-------- | read-only לowner | Private keys |
-rwxr-x--- 1 bob devs 1024 script.sh — מי יכול להריץ את הקובץ?משתמשים, קבוצות ו-sudo
הבנת מערכת המשתמשים של Linux היא המפתח לאבטחה ול-Privilege Escalation. שני הקבצים הקריטיים: /etc/passwd ו-/etc/shadow.
/etc/passwd — קובץ המשתמשים
# פורמט: username:password:UID:GID:GECOS:home_dir:shell
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
alice:x:1000:1000:Alice Smith,,,:/home/alice:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
# x בשדה password = הסיסמה ב-/etc/shadow (לא כאן)
# UID=0 = root בלבד!
# nologin = משתמש מערכת, לא אדם
# UID < 1000 = משתמשי מערכת (system users)/etc/shadow ו-sudo
# /etc/shadow — דורש root
$ sudo cat /etc/shadow
root:$6$salt$hashedpassword:19000:0:99999:7:::
alice:$6$abc123$VeryLongHash:19100:0:99999:7:::
bob:!:19000::: # ! = locked (אין סיסמה)
# $6$ = SHA-512 | $1$ = MD5 | $2y$ = bcrypt (חזק)
# sudo — הרשאות מוגברות
sudo command # הרץ פקודה כ-root
sudo -l # מה מותר לי ב-sudo?
sudo su - # root shell עם env של root
# CTF — sudo -l הוא תמיד הצעד הראשון!
$ sudo -l
User www-data may run the following commands:
(root) NOPASSWD: /usr/bin/python3
# python3 כ-root = Privilege Escalation מיידי!alice:x:1001:1002:Alice:/home/alice:/bin/bash — מה ה-UID של alice?ניהול תהליכים ו-Wildcards
תהליך (Process) = תוכנית שרצה. Linux מנהל אלפי תהליכים במקביל. Wildcards חוסכים הקלדה ומאפשרות פעולות על קבוצות קבצים.
ps, top, kill
# ps = Process Status
ps aux # כל התהליכים (הפורמט הנפוץ ביותר)
ps aux | grep python # חפש תהליך ספציפי
ps aux | sort -k3 -rn | head # מסודר לפי CPU שימוש
# פלט ps aux: USER PID %CPU %MEM STAT COMMAND
# STAT: S=Sleeping, R=Running, Z=Zombie, T=Stopped
# /proc/[PID]/ — מידע על תהליך
cat /proc/1234/cmdline # איך הופעל התהליך?
ls -la /proc/1234/exe # איזה binary רץ?
ls /proc/1234/fd # קבצים/sockets פתוחים
# kill — שליחת signal
kill PID # SIGTERM — בקשה לסיום מסודר
kill -9 PID # SIGKILL — מיידי, לא ניתן לבלום
killall python3 # הרוג כל תהליך בשם python3
# Background / Foreground
command & # הרץ ברקע
Ctrl+Z # עצור תהליך נוכחי
bg # שלח לרקע
fg # החזר לפורגראונד
jobs # רשימת תהליכי רקעWildcards וגלובינג
# * = כל רצף תווים | ? = תו בודד | [abc] = אחד מהתווים
ls *.py # כל קבצי Python
ls *.{py,js} # Python וJavaScript
rm *.tmp # מחק כל קבצי temp
ls file?.txt # file1.txt, filea.txt (תו אחד)
ls [0-9]*.txt # קבצים שמתחילים בספרה
cat /proc/[0-9]*/cmdline # cmdline של כל תהליכים
# Brace Expansion
mkdir {jan,feb,mar}_logs # יוצר 3 ספריות
touch file{1..5}.txt # file1.txt...file5.txt
cp config.txt{,.bak} # config.txt → config.txt.bak
# Man Pages — עזרה מובנית
man ls # מדריך לפקודת ls
ls --help # עזרה קצרהתרגול נוסף — Linux: הרשאות, אותות ו-SUID
שאלות העשרה נוספות לחיזוק החומר של השיעור — באותו פורמט בחירה של הקורס.
chmod 644?kill -9 ל-kill -15?-rwsr-xr-x. מה משמעות ה-s ב-Owner?אתגר מעשי — לינוקס — הרשאות והחלטות גישה
שיא השיעור: היפוך, ניתוח וזיהוי — כלי ה-RE וה-Low-Level בפעולה. ההגשה נבדקת אוטומטית.
שאלות תרגול ותשובות (22)
שאלה 1.1 · מדוע 90% מכלי הסייבר רצים על Linux ולא על Windows?
- א. מכיוון ש-Linux פשוט מהיר יותר לביצוע מ-Windows בכל המשימות שרצות עליו, שאינו הסיבה כאן
- ב. מכיוון שמערכת ההפעלה Windows יקרה מדי עבור מרבית החוקרים והארגונים שבתחום הסייבר כאן
- ג. Linux פתוח לחלוטין, CLI-first, מריץ למעלה מ-90% משרתי האינטרנט וכלי הסייבר פותחו עליו
- ד. מכיוון ש-Linux היא מערכת הפעלה חינמית, אף שהמחיר אינו הסיבה העיקרית לשליטתה בתחום כאן
✓ תשובה: ג) — הסיבות: Open Source (ניתן לחקור הכל), CLI-first (כלי סייבר = CLI ברובם), 90%+ שרתים = Linux (זהו ה-target), Kali/Parrot/כלי RE כולם על Linux.
שאלה 1.2 · מה המשמעות של "הכל קובץ" ב-Linux? כיצד זה מסייע בסייבר?
- א. שכל תוכנית שרצה במערכת נשמרת בסופו של דבר כקובץ הרצה בסיומת exe, אף שאין זה נכון כאן
- ב. שאין כלל ספריות במערכת אלא רק קבצים בודדים הפזורים בה, אף שקיימות בה ספריות רבות כאן
- ג. כל משאב במערכת (דיסק, רשת, תהליך) מיוצג כקובץ שאליו ניגשים באותן פקודות רגילות בדיוק
- ד. שכל קובץ במערכת חייב להיות ממוקם בתוך התיקייה etc בלבד, אף שאין כלל דרישה שכזו כאן כן
✓ תשובה: ג) — cat /proc/cpuinfo קורא מידע CPU, echo 'hi' > /dev/pts/0 כותב לטרמינל, cat /proc/net/tcp מציג חיבורי רשת. אחידות הממשק = עוצמה.
שאלה 2.1 · ב-CTF מצאתם גישה לשרת Linux. מהי הספריה הראשונה שתבדקו בחיפוש אחר flags וסיסמאות?
- א. התיקייה bin: מכילה את קובצי ההרצה של הפקודות במערכת, ואינה המקום הראשון לחיפוש סודות כאן
- ב. התיקייה tmp: מכילה קבצים זמניים בלבד, ואף שלעיתים יש בה רמזים, אינה נקודת הפתיחה הטובה כאן
- ג. התיקייה dev: מכילה את קובצי ההתקנים של המערכת, ואינה המקום הטבעי לחפש בו סיסמאות או flags
- ד. התיקייה etc: כוללת את passwd ואת shadow, ומהווה נקודת פתיחה מצוינת לחיפוש סודות במערכת
✓ תשובה: ד) — /etc/passwd (רשימת משתמשים), /etc/shadow (hash סיסמאות), /root (ספריית root — לרוב מכילה flag). לאחר מכן /home למשתמשים רגילים.
שאלה 2.2 · איזה קובץ ב-Linux מכיל מידע חי על חיבורי TCP פעילים במערכת?
# pwd = Print Working Directory $ pwd /home/alice $ cd /var/log # נתיב מוחלט — תמיד מ-/ $ cd documents # נתיב יחסי — מהמיקום הנוכחי $ cd .. # ספריה אחת למעלה $ cd ../.. # שתי ספריות למעלה $ cd ~ # ספריית הבית של המשתמש הנוכחי $ cd # ספריית הבית (ללא ארגומנט) $ cd - # חזרה לספריה הקודמת (שימושי!)
- א. הקובץ etc/network/tcp: נתיב שאינו קיים כלל במערכת ואינו מכיל מידע על חיבורי הרשת הפעילים כאן
- ב. הקובץ proc/net/tcp: קובץ וירטואלי חי שמציג את כל חיבורי ה-TCP הפעילים במערכת ברגע זה כאן
- ג. הקובץ var/log/tcp.log: קובץ יומן שאינו קיים כברירת מחדל ואינו משקף את החיבורים החיים במערכת
- ד. הקובץ dev/tcp: מנגנון של המעטפת (shell) ליצירת חיבורים, ולא קובץ שמציג חיבורים קיימים כלל כאן
✓ תשובה: ב) — /proc/net/tcp = pseudo-file שמציג חיבורי TCP פעילים בזמן אמת. חלק ממערכת /proc שמחשפת מידע Kernel כקבצים.
שאלה 3.1 · אתם נמצאים ב-/var/log/apache2/ ורוצים לחזור מיידית לתיקיית הבית. איזו פקודה?
- א. cd ~: מחזירה מיד אל תיקיית הבית של המשתמש, ללא כל תלות במיקום הנוכחי במערכת הקבצים כאן
- ב. cd ..: עולה רק תיקייה אחת מעלה בעץ, ולכן אינה מחזירה ישירות אל תיקיית הבית של המשתמש כאן
- ג. cd /home: עוברת אל התיקייה המכילה את בתי כל המשתמשים, ולא אל תיקיית הבית האישית עצמה כאן
- ד. cd /: עוברת אל שורש מערכת הקבצים כולה, ולא אל תיקיית הבית של המשתמש הנוכחי במערכת כאן כן
✓ תשובה: א) cd ~ — הטילדה (~) מייצגת תמיד את ספריית הבית של המשתמש הנוכחי, ללא תלות במיקום. cd .. היה מוביל ל-/var/log בלבד.
שאלה 3.2 · איזה דגל של ls מציג גם קבצים נסתרים (dotfiles)?
- א. ls -la: מציג רשימה מפורטת שכוללת גם את הקבצים הנסתרים (dotfiles) שמתחילים בתו נקודה כאן
- ב. ls -l: מציג רשימה מפורטת אך אינו כולל כלל את הקבצים הנסתרים שמתחילים בתו נקודה במערכת כאן
- ג. ls -lh: מציג את גדלי הקבצים בפורמט קריא לאדם, אך אינו כולל את הקבצים הנסתרים שבתיקייה כאן
- ד. ls -lt: ממיין את הרשימה לפי זמן השינוי, אך אינו כולל את הקבצים הנסתרים שבתוך התיקייה כאן כן
✓ תשובה: א) ls -la — הדגל -a = all, מציג קבצים שמתחילים ב-. (נסתרים כמו .bashrc, .ssh). בשילוב עם -l = פורמט מפורט.
Dry Run — ניווט · אתם ב-/home/alice/documents. מה הנתיב הנוכחי לאחר הרצת cd ../../etc?
# יצירת ספריות
mkdir new_dir # ספריה חדשה
mkdir -p a/b/c # יצירת עץ שלם (כולל הורים)
mkdir -p project/{src,tests,docs} # מספר ספריות בבת אחת
# יצירת קבצים
touch file.txt # קובץ ריק (או עדכון timestamp)
echo "hello" > file.txt # כתיבה לקובץ (מחליף תוכן!)
echo "world" >> file.txt # הוספה לסוף (Append)
# מחיקה
rm file.txt # מחיקת קובץ
rm -r directory/ # מחיקת ספריה (Recursive)
rm -rf directory/ # מחיקה בכוח (⚠️ מסוכן!)
rm *.log # מחיקת כל קבצי .log- א. התיקייה home/alice/etc: הנחה שגויה שרק עלייה אחת מתבצעת, במקום שתי העליות שבפקודה כאן כן
- ב. התיקייה home/etc: שתי עליות מעלה מ-documents מגיעות אל home, ומשם הכניסה אל etc נותנת את הנתיב home/etc כאן
- ג. התיקייה home/alice/documents/etc: הנחה שגויה שהתיקייה etc נכנסת ללא כל עלייה מעלה בעץ הקבצים
- ד. התיקייה etc: הנחה שגויה ששתי עליות מגיעות עד שורש הקבצים, אף שנדרשות שלוש עליות כדי להגיע מ-documents אל השורש
✓ תשובה: ב) /home/etc — מ-/home/alice/documents: .. = /home/alice, ../.. = /home, ../../etc = /home/etc. להגעה ל-/etc נדרשות שלוש עליות (../../../etc).
שאלה 4.1 · חבר מתלונן ששרת מחזיר שגיאות. אתם רוצים לראות שגיאות ב-auth.log בזמן אמת בזמן שהוא מנסה להתחבר שוב. איזו פקודה?
- א. tail -f auth.log: עוקב אחר סוף הקובץ בזמן אמת ומציג כל שורה חדשה מיד עם הוספתה אל הקובץ כאן
- ב. cat auth.log: מדפיס את כל תוכן הקובץ פעם אחת ומסתיים, בלי לעקוב אחר שורות חדשות שנוספות אליו
- ג. head auth.log: מציג רק את השורות הראשונות של הקובץ, ולא את הרשומות החדשות שנוספות אל סופו כאן
- ד. ls -l auth.log: מציג רק את פרטי הקובץ עצמו (גודל, תאריך), ולא את תוכנו הפנימי של הקובץ כלל כאן
✓ תשובה: א) tail -f — הדגל -f (Follow) משאיר את tail במצב האזנה אקטיבי, כך שכל שורה חדשה שנכתבת לקובץ נדחפת מיד למסך. cat היה מציג את כל הקובץ ויוצא.
שאלה 4.2 · מה ההבדל בין cp לבין mv?
- א. פקודת cp היא פשוט המהירה יותר לביצוע מבין השתיים בכל מקרה שהוא, אף שאין זה נכון וההבדל אחר כאן
- ב. פקודת mv יכולה להעתיק ספריות שלמות ואילו cp אינה יכולה, אף ש-cp כן יכולה עם הדגל r בקלות כאן
- ג. cp משאירה שני עותקים קיימים בסוף, ואילו mv מוחקת את המקור ומשאירה קובץ אחד בלבד בסיום כאן
- ד. אין ביניהן שום הבדל משמעותי, ושתי הפקודות מבצעות בדיוק את אותה הפעולה תמיד בכל מקרה שהוא כאן
✓ תשובה: ג) — cp source dest: גם source וגם dest קיימים אחר כך. mv source dest: source נמחק, רק dest קיים. בתוך אותו Filesystem, mv = שינוי שם ב-inode בלבד (מיידי!)
שאלה 4.3 — אתגר · ב-CTF מצאתם קובץ בשם -rf (שמו הוא -rf). איך תמחקו אותו?
$ ls -l file.sh -rwxr-xr-- 1 alice developers 4096 Jun 10 file.sh # פירוש: # - rwx r-x r-- # ↑ ↑↑↑ ↑↑↑ ↑↑↑ # type owner grp other # owner (alice): rwx = קרא, כתוב, הרץ # group (developers): r-x = קרא והרץ, לא כתוב # other (כולם אחרים): r-- = קרא בלבד
- א. rm -rf: הנחה שגויה שהפקודה תמחק את הקובץ, אף שהטקסט rf- יפורש כדגל של rm ולא כשם של קובץ כאן
- ב. rm "-rf": הנחה שגויה שהגרשיים יעזרו, אף שהמעטפת עדיין תעביר ל-rm את הטקסט rf- כדגל ולא כשם כאן
- ג. rm -- -rf: הרצף -- מסמן סוף אפשרויות, כך שהטקסט rf- מטופל כשם קובץ ולא כדגל של הפקודה כאן
- ד. rm \-rf: הנחה שגויה שהתו \ יעזור, אף שהמעטפת עדיין תעביר ל-rm את הטקסט rf- כדגל ולא כשם קובץ כאן
✓ תשובה: ג) rm -- -rf — -- מסמן סוף הדגלים: כל מה שאחריו הוא שם קובץ, לא דגל. ניתן גם ./-rf. rm -rf לבד היה מפרש -rf כדגלים הרסניים!
שאלה 5.1 · יצרתם סקריפט סודי exploit.sh. רוצים שרק לכם (הבעלים) תהיה גישה מלאה. לאחרים — אסור הכל. איזו פקודה?
- א. chmod 700 exploit.sh: מעניקה גישה מלאה לבעלים בלבד ואוסרת לחלוטין הכול על הקבוצה ועל האחרים
- ב. chmod 777 exploit.sh: מעניקה גישה מלאה לכולם, כולל לקבוצה ולאחרים, שאינו הרצוי בתרחיש הזה כאן
- ג. chmod 755 exploit.sh: מעניקה גישה מלאה לבעלים אך גם הרשאות קריאה והרצה לקבוצה ולכל השאר כאן
- ד. chmod 400 exploit.sh: מעניקה לבעלים הרשאת קריאה בלבד, בלי הרשאות כתיבה והרצה שהתבקשו כאן כן
✓ תשובה: א) chmod 700 — 7=rwx (owner), 0=--- (group), 0=--- (other). 400 = read-only לowner בלבד (לא יכול להריץ). 755 נותן read+execute לכולם.
שאלה 5.2 · קובץ עם הרשאות: -rwxr-x--- 1 bob devs 1024 script.sh — מי יכול להריץ את הקובץ?
-rwxr-x--- 1 bob devs 1024 script.sh
- א. כל המשתמשים במערכת, אף שהאחרים (other) אינם מקבלים כלל את הרשאת ההרצה על הקובץ הזה כאן כן
- ב. המשתמש bob בלבד, אף שגם חברי קבוצת devs מקבלים את הרשאת ההרצה (x) לפי ההרשאות שמוצגות כאן
- ג. המשתמש root בלבד, אף שגם הבעלים bob וחברי הקבוצה יכולים בבירור להריץ את הקובץ הזה במערכת כאן
- ד. המשתמש bob וחברי קבוצת devs בלבד, שכן הבעלים והקבוצה מקבלים את הרשאת ההרצה (x) בקובץ כאן
✓ תשובה: ד) — owner (bob): rwx = יכול לקרוא, לכתוב, להריץ. group (devs): r-x = יכול לקרוא ולהריץ. other: --- = לא יכולים כלום. הרצה: bob + חברי devs.
שאלה 5.3 · מה chmod 640 /etc/config עושה?
- א. owner:rwx, group:r-x, other:---: הנחה שגויה שהספרה 6 כוללת גם את הרשאת ההרצה (x) עבור הבעלים כאן
- ב. owner:rw-, group:rw-, other:---: הנחה שגויה שהספרה האמצעית 4 מקנה גם הרשאת כתיבה לקבוצה כאן כן
- ג. owner:r--, group:r--, other:---: הנחה שגויה שהספרה הראשונה 6 מקנה הרשאת קריאה בלבד לבעלים כאן כן
- ד. owner:rw-, group:r--, other:---: הספרה 6 היא קריאה וכתיבה, 4 היא קריאה, ו-0 היא ללא כל הרשאה
✓ תשובה: ד) — 6=rw- (owner: קרא+כתוב), 4=r-- (group: קרא בלבד), 0=--- (other: אין). שימושי לקבצי config שרק owner צריך לשנות.
שאלה 5.4 — CTF · ב-CTF מצאתם binary עם SUID לroot: -rwsr-xr-x 1 root root. מה זה אומר?
# פורמט: username:password:UID:GID:GECOS:home_dir:shell $ cat /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin alice:x:1000:1000:Alice Smith,,,:/home/alice:/bin/bash www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin # x בשדה password = הסיסמה ב-/etc/shadow (לא כאן) # UID=0 = root בלבד! # nologin = משתמש מערכת, לא אדם # UID < 1000 = משתמשי מערכת (system users)
- א. הקובץ שייך אל root אך כלל לא ניתן להריצו, אף שהרשאת ה-x מאפשרת בבירור את הרצתו על-ידי משתמשים כאן
- ב. כל משתמש שמריץ את הקובץ, מריץ אותו בהרשאות root, וזוהי סכנת הסלמת הרשאות (Privilege Escalation)
- ג. רק המשתמש root יכול להריץ את הקובץ הזה, אף שהרשאות ה-x ניתנות לכל המשתמשים לפי מה שמוצג כאן כן
- ד. הקובץ מוגן מפני שינוי בזכות הביט s, אף שביט ה-SUID קשור להרשאות הרצה ולא להגנה מפני כתיבה כאן כן
✓ תשובה: ב) — SUID + owner=root = כל אחד שמריץ = מריץ כroot. זו Privilege Escalation קלאסית ב-CTF. בדוק ב-GTFOBins אם ניתן לנצל. find / -perm -4000 2>/dev/null למציאת כל SUID files.
שאלה 6.1 · שורה ב-/etc/passwd: alice:x:1001:1002:Alice:/home/alice:/bin/bash — מה ה-UID של alice?
alice:x:1001:1002:Alice:/home/alice:/bin/bash
- א. 1001: השדה השלישי בשורת ה-passwd הוא ה-UID, ולכן ה-UID של alice הוא בדיוק 1001 לפי השורה כאן
- ב. 1002: הנחה שגויה שהשדה הרביעי (שהוא ה-GID) הוא ה-UID, אף שה-UID הוא השדה השלישי שבשורה כאן כן
- ג. 0: הנחה שגויה שה-UID של alice הוא 0, אף שהערך 0 שמור למשתמש root ולא למשתמשים רגילים במערכת כאן
- ד. alice: הנחה שגויה שהשדה הראשון (שם המשתמש) הוא ה-UID, אף שה-UID הוא ערך מספרי ולא שם משתמש כאן
✓ תשובה: א) 1001 — פורמט: username:pwd:UID:GID:info:home:shell. שדה 3 = UID = 1001. שדה 4 = GID = 1002. הסיסמה (x) = ב-/etc/shadow.
שאלה 6.2 — CTF PrivEsc · הרצתם sudo -l וגיליתם: (root) NOPASSWD: /usr/bin/python3. מה הפקודה לקבלת root shell?
# ps = Process Status ps aux # כל התהליכים (הפורמט הנפוץ ביותר) ps aux | grep python # חפש תהליך ספציפי ps aux | sort -k3 -rn | head # מסודר לפי CPU שימוש # פלט ps aux: USER PID %CPU %MEM STAT COMMAND # STAT: S=Sleeping, R=Running, Z=Zombie, T=Stopped # /proc/[PID]/ — מידע על תהליך cat /proc/1234/cmdline # איך הופעל התהליך? ls -la /proc/1234/exe # איזה binary רץ? ls /proc/1234/fd # קבצים/sockets פתוחים # kill — שליחת signal kill PID # SIGTERM — בקשה לסיום מסודר kill -9 PID # SIGKILL — מיידי, לא ניתן לבלום killall python3 # הרוג כל תהליך בשם python3 # Background / Foreground command & # הרץ ברקע Ctrl+Z # עצור תהליך נוכחי bg # שלח לרקע fg # החזר לפורגראונד jobs # רשימת תהליכי רקע
- א. sudo python3 --root: הנחה שגויה, שכן אין כלל דגל בשם root-- שגורם ל-python3 לפתוח מעטפת root כאן כן
- ב. sudo python3 /root/shell.py: הנחה שגויה, שכן קובץ כזה אינו קיים ואין כל ערובה שהוא יפתח מעטפת root
- ג. python3 sudo -i: הנחה שגויה, שכן סדר הפקודות שגוי ו-python3 אינו מקבל כלל את sudo כארגומנט תקין כאן
- ד. sudo python3 -c "import os; os.system('/bin/bash')": מריץ מעטפת bash בהרשאות root דרך python3 כאן
✓ תשובה: ד) — sudo python3 -c "import os; os.system('/bin/bash')" מריץ python3 כroot, שמריץ /bin/bash — shell עם הרשאות root. זה ה-GTFOBins classic.
שאלה 7.1 — CTF פורנזיקה · מצאתם תהליך חשוד miner עם PID 4567. איזה פקודה מראה מה הbinary שרץ?
- א. ps aux | grep 4567: מציג את שורת התהליך אך לא בהכרח את הנתיב המלא של קובץ ההרצה שעומד מאחוריו
- ב. ls -la /proc/4567/exe: הקישור exe בתוך proc מצביע ישירות אל קובץ ההרצה של התהליך עם PID זה כאן
- ג. kill -9 4567: הורגת את התהליך באופן מיידי, אך אינה מציגה כלל איזה קובץ הרצה עומד מאחורי התהליך כאן
- ד. top: מציג את התהליכים הפעילים לפי צריכת המשאבים, אך לא את נתיב קובץ ההרצה של תהליך יחיד ומסוים כאן
✓ תשובה: ב) — /proc/PID/exe הוא symlink לבinary שמריץ את התהליך. ls -la מראה לאן הוא מצביע. cat /proc/4567/cmdline מראה את הפקודה המלאה.
שאלה 7.2 · מה ההבדל בין kill PID לבין kill -9 PID?
- א. פקודת kill -9 היא פשוט המהירה יותר לביצוע מבין השתיים, אף שההבדל האמיתי הוא בסוג האות שנשלח לתהליך
- ב. אין ביניהן שום הבדל, ושתי הפקודות שולחות בדיוק את אותו האות אל התהליך היעד תמיד בכל מקרה שהוא כאן
- ג. פקודת kill -9 מוחקת גם את כל הקבצים של התהליך מן הדיסק, אף שהיא רק הורגת את התהליך ואינה מוחקת קבצים
- ד. kill שולחת SIGTERM (בקשה מנומסת שהתהליך יכול לסרב לה), ו-kill -9 שולחת SIGKILL מיידי שאין לבלום
✓ תשובה: ד) — SIGTERM (15) = "בקשה לסיים" — תוכנית יכולה לתפוס ולהתעלם. SIGKILL (9) = Kernel מסיים בכוח, תוכנית לא יכולה לבלום. תמיד נסו SIGTERM קודם.
שאלה 7.3 — Wildcards · איזה wildcard מתאים גם ל-file1.txt וגם ל-fileA.txt אבל לא ל-file10.txt?
- א. file*.txt: הסימן * מייצג כל רצף תווים באורך כלשהו, ולכן הוא תואם גם את 10, שאינו הרצוי בשאלה הזו כאן
- ב. file[0-9].txt: הסוגריים תואמים ספרה בודדת בלבד, ולכן אינם תואמים כלל את fileA.txt המבוקש בשאלה כאן כן
- ג. file?.txt: הסימן ? מייצג תו בודד בדיוק, ולכן הוא תואם תו אחד אך לא שני תווים כמו במקרה של 10 כאן
- ד. file[!].txt: תחביר שגוי של שלילה בתוך סוגריים, שאינו תואם כלל את הקבצים המבוקשים שבשאלה הנתונה כאן
✓ תשובה: ג) file?.txt — ? = תו בודד כלשהו. file1.txt ✓ ו-fileA.txt ✓ (תו אחד), file10.txt ✗ (2 תווים). * היה מתאים גם ל-file10.txt. ג) file[0-9].txt מתאים רק לספרה — לא ל-fileA.txt.
שאלה 8.1 [קל] · מה מאפשרות הרשאות chmod 644?
chmod 644
- א. הכול מקבלים הרשאה מלאה: הנחה שגויה, אף ש-644 נותן כתיבה רק ל-Owner וקריאה בלבד לשאר, ולכן אין כאן הרשאה מלאה לכל המשתמשים כלל כן
- ב. רק ה-Owner מקבל גישה: הנחה שגויה, אף שגם Group וגם Others מקבלים הרשאת קריאה (4), ולכן הגישה אינה מוגבלת ל-Owner בלבד כמתואר
- ג. כולם מקבלים הרשאת הרצה: הנחה שגויה, אף שביט ההרצה (1) כלל אינו דלוק ב-644, ולכן אף אחד אינו מקבל הרשאת הרצה על הקובץ הזה בפועל כאן
- ד. Owner מקבל קריאה וכתיבה (6), Group מקבל קריאה בלבד (4), ו-Others מקבל קריאה בלבד (4) — זהו ערך נפוץ לקבצים שאינם ניתנים להרצה
✓ תשובה נכונה: ד — 644 = rw-r--r--. ספרה = סכום rwx (r=4,w=2,x=1). 6=rw, 4=r. קובץ הרצה טיפוסי: 755 (rwxr-xr-x).
שאלה 8.2 [בינוני] · מה ההבדל בין kill -9 ל-kill -15?
kill -9
- א. מינוס 9 הוא SIGKILL שלא ניתן לתפוס ולכן מסיים את התהליך מיידית, ומינוס 15 הוא SIGTERM שהתהליך יכול לתפוס כדי לנקות משאבים לפני יציאה
- ב. מינוס 15 חזק ממינוס 9: הנחה שגויה, אף ש-SIGKILL (9) הוא הכפוי שלא ניתן לתפוס, בעוד SIGTERM (15) מנומס ומאפשר לתהליך לסיים בעצמו בכל מקרה
- ג. שניהם זהים לחלוטין: הנחה שגויה, אף ש-9 מסיים מיידית ללא אפשרות ניקוי בעוד 15 מבקש סיום מסודר, ולכן ההתנהגות שונה מהותית ביניהם בכל מקרה
- ד. מינוס 9 מבקש בנימוס לסיים: הנחה שגויה, אף שדווקא מינוס 15 הוא הבקשה המנומסת, ו-9 הוא הכפוי והמיידי שאינו מותיר זמן לניקוי כלל כן
✓ תשובה נכונה: א — SIGKILL(9): כפוי, מיידי, לא ניתן לתפוס. SIGTERM(15): מנומס, ניתן לתפוס לניקוי. תמיד נסה 15 קודם; 9 כמוצא אחרון.
שאלה 8.3 [קשה] · מצאת קובץ עם -rwsr-xr-x. מה משמעות ה-s ב-Owner?
-rwsr-xr-x
- א. זהו ביט ה-SUID — הקובץ רץ עם הרשאות ה-Owner שלו (לרוב root) ללא קשר לזהות המשתמש שמריץ אותו, ולכן הוא יעד נפוץ להסלמת הרשאות
- ב. זהו קיצור-דרך סימבולי: הנחה שגויה, אף שקישור סימבולי מסומן ב-l בתחילת השורה, וה-s ב-Owner מציין דווקא את ביט ה-SUID של הקובץ כן
- ג. הקובץ מוסתר מהמערכת: הנחה שגויה, אף שקבצים מוסתרים מסומנים בנקודה בתחילת שמם, וה-s מציין הרצה בהרשאות הבעלים ולא הסתרה כלשהי
- ד. רק ה-Owner יכול להריצו: הנחה שגויה, אף שגם Group ו-Others מקבלים x, וה-s רק גורם לקובץ לרוץ בהרשאות הבעלים ולא להגביל הרצה כאן כן
✓ תשובה נכונה: א — SUID (s ב-Owner): הרצה בהרשאות בעל הקובץ. אם Owner=root → הרצה כ-root. ב-Privilege Escalation: find / -perm -4000 מחפש קבצי SUID.