GammaCyber

מבוא ללינוקס CLI

Low-Level: C, Assembly ו-RE · 5–6 שעות

// סקירה

מבוא ללינוקס 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 וגלובינג: *, ?, [] — חיסכון בהקלדה
// פרק 1

פילוסופיית Linux

לפני שנלמד פקודות, חשוב להבין למה Linux הוא הבחירה של 95% מאנשי הסייבר — ולמה אתם חייבים להרגיש בו כמו בבית.

Linux לעומת Windows — ההבדל הקריטי לסייבר

נושאLinuxWindowsלמה זה חשוב לסייבר
Open Sourceקוד מקור פתוח לחלוטיןסגור ומקנייניניתן לחקור כל רכיב
CLI Firstשורת פקודה = לב המערכתGUI מרכזי, CLI משניכלי סייבר = CLI ברובם
Permissionsמודל Unix מחמיר ומדויקACL מורכב יותרהבנת הרשאות = זיהוי חולשות
שרתים90%+ שרתי האינטרנטמיעוט שרתיםרוב ה-Targets = Linux
כלי הקינגKali, Parrot = על Linuxמעט כלים ל-Windowsהכלים חיים ב-Linux
/proc ו-/sysKernel חשוף כקבציםRegistry ו-APIפורנזיקה ו-Debugging
ScriptingBash + כל שפה מובניתPowerShell (חזק אך שונה)אוטומציה מהירה
אנלוגיה: Linux כ"מנוע חשוף"
רוב אנשים נוהגים במכוניות מבלי לדעת מה מתחת למכסה המנוע. Linux היא כמו מכונית שמכסה המנוע תמיד פתוח — אפשר לראות הכל, לשנות הכל. Windows = מכונית עם מכסה סגור ומנועל. נוח לנהוג, אבל אי אפשר לתקן לבד. אנשי סייבר צריכים לדעת מה מתחת למכסה.

עקרון "הכל קובץ"

ב-Linux, כמעט כל דבר מיוצג כקובץ: מסך הטרמינל, כרטיס הרשת, מידע על תהליכים — הכל קובץ. אפשר להשתמש באותן פקודות לכל דבר.

דוגמהמיוצג כמה ניתן לעשות
/dev/sdaקובץ כונן דיסקכתיבה ישירה לדיסק
/proc/cpuinfoקובץ מידע CPUcat /proc/cpuinfo = מידע מלא
/proc/PID/ספריה לתהליך רץls /proc/1234 = כל מידע על תהליך
/proc/net/tcpקובץ חיבורי רשתחיבורי TCP פעילים
/dev/pts/Nקובץ Terminalecho 'hi' > /dev/pts/0
✏תרגול עצמי2 שאלות
שאלה 1.1
מדוע 90% מכלי הסייבר רצים על Linux ולא על Windows?
✓ תשובה: ג) — הסיבות: Open Source (ניתן לחקור הכל), CLI-first (כלי סייבר = CLI ברובם), 90%+ שרתים = Linux (זהו ה-target), Kali/Parrot/כלי RE כולם על Linux.
שאלה 1.2
מה המשמעות של "הכל קובץ" ב-Linux? כיצד זה מסייע בסייבר?
✓ תשובה: ג) — cat /proc/cpuinfo קורא מידע CPU, echo 'hi' > /dev/pts/0 כותב לטרמינל, cat /proc/net/tcp מציג חיבורי רשת. אחידות הממשק = עוצמה.
// פרק 2

מבנה Filesystem

Linux מארגן הכל בעץ ספריות יחיד שמתחיל ב-/ (Root). אין C:\ או D:\ כמו ב-Windows. הבנת המבנה חיונית לכל פעולה ב-CTF ובסייבר.

ספריהתוכןחשיבות לסייבר
/שורש המערכתנקודת התחלה לכל ניתוח
/etcקבצי קונפיגורציהpasswd, shadow, hosts, nginx.conf — מטרות RE
/homeספריות הבית של משתמשיםדטה של משתמשים — target ב-CTF
/rootספריית הבית של rootהנחשקת ביותר — לרוב מכילה flag
/var/logקבצי Logauth.log, syslog — מי ניסה מה
/tmpקבצים זמנייםמקום נפוץ לכתוב Payloads
/bin, /usr/binפקודות בסיסיותls, cat, grep — הכלים שלנו
/procPseudo-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 פעילים
✏תרגול עצמי2 שאלות
שאלה 2.1
ב-CTF מצאתם גישה לשרת Linux. מהי הספריה הראשונה שתבדקו בחיפוש אחר flags וסיסמאות?
✓ תשובה: ד) — /etc/passwd (רשימת משתמשים), /etc/shadow (hash סיסמאות), /root (ספריית root — לרוב מכילה flag). לאחר מכן /home למשתמשים רגילים.
שאלה 2.2
איזה קובץ ב-Linux מכיל מידע חי על חיבורי TCP פעילים במערכת?
✓ תשובה: ב) — /proc/net/tcp = pseudo-file שמציג חיבורי TCP פעילים בזמן אמת. חלק ממערכת /proc שמחשפת מידע Kernel כקבצים.
// פרק 3

ניווט ב-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 | גודל | תאריך | שם
הרחבה נתיב מוחלט לעומת יחסי ›

נתיב מוחלט — מתחיל ב-/ ותמיד נכון מכל מקום: /home/alice/documents/project

נתיב יחסי — יחסי למיקום הנוכחי. אם ב-/home/alice: documents/project (בלי /)

. ו-.. — . = הספריה הנוכחית עצמה. .. = ספריה אחת מעל (parent). ../sibling = ספריה אחות.

✏תרגול עצמי3 שאלות
שאלה 3.1
אתם נמצאים ב-/var/log/apache2/ ורוצים לחזור מיידית לתיקיית הבית. איזו פקודה?
✓ תשובה: א) cd ~ — הטילדה (~) מייצגת תמיד את ספריית הבית של המשתמש הנוכחי, ללא תלות במיקום. cd .. היה מוביל ל-/var/log בלבד.
שאלה 3.2
איזה דגל של ls מציג גם קבצים נסתרים (dotfiles)?
✓ תשובה: א) ls -la — הדגל -a = all, מציג קבצים שמתחילים ב-. (נסתרים כמו .bashrc, .ssh). בשילוב עם -l = פורמט מפורט.
Dry Run — ניווט
אתם ב-/home/alice/documents. מה הנתיב הנוכחי לאחר הרצת cd ../../etc?
✓ תשובה: ב) /home/etc — מ-/home/alice/documents: .. = /home/alice, ../.. = /home, ../../etc = /home/etc. להגעה ל-/etc נדרשות שלוש עליות (../../../etc).
// פרק 4

ניהול קבצים

יצירה, מחיקה, העתקה, הזזה, קריאה — הפעולות היומיומיות שתריצו אלפי פעמים.

יצירה ומחיקה

# יצירת ספריות 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.

כלל ברזל: לפני rm -rf, הריצו echo directory/ ראשון כדי לראות בדיוק מה תמחקו.

העתקה, הזזה וקריאה

# 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 # זיהוי סוג קובץ (לא לפי סיומת!)
הרחבה tail -f — הפקודה החיה ›

tail -f /var/log/auth.log מציגה שורות חדשות בזמן אמת ככל שהלוג גדל. שימוש: עקיבה אחרי ניסיונות כניסה, שגיאות שרת. ב-CTF: מאפשר לראות מה תוכנית כותבת בזמן הרצה. עצירה: Ctrl+C.

✏תרגול עצמי3 שאלות
שאלה 4.1
חבר מתלונן ששרת מחזיר שגיאות. אתם רוצים לראות שגיאות ב-auth.log בזמן אמת בזמן שהוא מנסה להתחבר שוב. איזו פקודה?
✓ תשובה: א) tail -f — הדגל -f (Follow) משאיר את tail במצב האזנה אקטיבי, כך שכל שורה חדשה שנכתבת לקובץ נדחפת מיד למסך. cat היה מציג את כל הקובץ ויוצא.
שאלה 4.2
מה ההבדל בין cp לבין mv?
✓ תשובה: ג) — cp source dest: גם source וגם dest קיימים אחר כך. mv source dest: source נמחק, רק dest קיים. בתוך אותו Filesystem, mv = שינוי שם ב-inode בלבד (מיידי!)
שאלה 4.3 — אתגר
ב-CTF מצאתם קובץ בשם -rf (שמו הוא -rf). איך תמחקו אותו?
✓ תשובה: ג) rm -- -rf — -- מסמן סוף הדגלים: כל מה שאחריו הוא שם קובץ, לא דגל. ניתן גם ./-rf. rm -rf לבד היה מפרש -rf כדגלים הרסניים!
// פרק 5

מודל הרשאות — 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-- = קרא בלבד
סימןשםעל קובץעל ספריה
rReadקריאת תוכן הקובץls — רישום תוכן הספריה
wWriteשינוי תוכן הקובץיצירה/מחיקה של קבצים בה
xExecuteהרצת הקובץ כתוכניתcd — כניסה לספריה
-Noneאין הרשאהאין הרשאה
! הרשאות על ספריה — שונה ממה שנדמה! ›

r בלבד על ספריה: אפשר לראות שמות קבצים (ls), אבל לא תוכן (cat יכשל).

x בלבד על ספריה: אפשר לעבור דרכה (cd), אבל לא לראות מה בה (ls יכשל).

w ללא x: אי אפשר ליצור קבצים (x חסר = אי אפשר לגשת ל-inode).

כלל: לניווט רגיל — חייבים גם r וגם x על כל ספריה בנתיב.

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 על כל תת-ספריות
OctalSymbolicמשמעותשימוש נפוץ
777rwxrwxrwxהכל לכולם⚠️ מסוכן — הימנעו
755rwxr-xr-xowner הכל, אחרים קרא+הרץתוכניות, ספריות
700rwx------רק owner יכול הכלתוכניות פרטיות
644rw-r--r--owner כותב, אחרים קוראיםקבצי config, html
600rw-------רק owner קורא+כותבמפתחות SSH
400r--------read-only לownerPrivate keys
הרחבה SUID, SGID, Sticky Bit — ביטים מיוחדים ›
ביטשםoctalמה עושהסיכון אבטחה
s (על u)SUID4xxxמריץ בהרשאות ownerPrivilege Escalation!
s (על g)SGID2xxxמריץ בהרשאות groupכמו SUID לgroup
t (על o)Sticky1xxxרק owner יכול למחוקמגן על /tmp
# מציאת SUID files — חיוני לPrivEsc ב-CTF! find / -perm -4000 -type f 2>/dev/null $ ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 59976 ... /usr/bin/passwd # s = SUID! הקובץ רץ כ-root אפילו שמשתמש רגיל מריץ אותו
✏תרגול עצמי4 שאלות
שאלה 5.1
יצרתם סקריפט סודי 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 — מי יכול להריץ את הקובץ?
✓ תשובה: ד) — owner (bob): rwx = יכול לקרוא, לכתוב, להריץ. group (devs): r-x = יכול לקרוא ולהריץ. other: --- = לא יכולים כלום. הרצה: bob + חברי devs.
שאלה 5.3
מה chmod 640 /etc/config עושה?
✓ תשובה: ד) — 6=rw- (owner: קרא+כתוב), 4=r-- (group: קרא בלבד), 0=--- (other: אין). שימושי לקבצי config שרק owner צריך לשנות.
שאלה 5.4 — CTF
ב-CTF מצאתם binary עם SUID לroot: -rwsr-xr-x 1 root root. מה זה אומר?
✓ תשובה: ב) — SUID + owner=root = כל אחד שמריץ = מריץ כroot. זו Privilege Escalation קלאסית ב-CTF. בדוק ב-GTFOBins אם ניתן לנצל. find / -perm -4000 2>/dev/null למציאת כל SUID files.
// פרק 6

משתמשים, קבוצות ו-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 מיידי!
הרחבה Privilege Escalation דרך sudo ו-GTFOBins ›
🔑וקטורים נפוצים ל-PrivEsc
  • sudo -l → פקודה מותרת → GTFOBins (gtfobins.github.io) → Escape
  • SUID binary → find / -perm -4000 → GTFOBins → shell
  • Writable /etc/sudoers → הוסיפו שורה (ב-CTF בלבד!)
  • דוגמה: sudo vim → :!/bin/bash → shell כroot!
✏תרגול עצמי2 שאלות
שאלה 6.1
שורה ב-/etc/passwd: alice:x:1001:1002:Alice:/home/alice:/bin/bash — מה ה-UID של alice?
✓ תשובה: א) 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?
✓ תשובה: ד) — sudo python3 -c "import os; os.system('/bin/bash')" מריץ python3 כroot, שמריץ /bin/bash — shell עם הרשאות root. זה ה-GTFOBins classic.
// פרק 7

ניהול תהליכים ו-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 # עזרה קצרה
✏תרגול עצמי3 שאלות
שאלה 7.1 — CTF פורנזיקה
מצאתם תהליך חשוד miner עם PID 4567. איזה פקודה מראה מה הbinary שרץ?
✓ תשובה: ב) — /proc/PID/exe הוא symlink לבinary שמריץ את התהליך. ls -la מראה לאן הוא מצביע. cat /proc/4567/cmdline מראה את הפקודה המלאה.
שאלה 7.2
מה ההבדל בין kill PID לבין kill -9 PID?
✓ תשובה: ד) — SIGTERM (15) = "בקשה לסיים" — תוכנית יכולה לתפוס ולהתעלם. SIGKILL (9) = Kernel מסיים בכוח, תוכנית לא יכולה לבלום. תמיד נסו SIGTERM קודם.
שאלה 7.3 — Wildcards
איזה wildcard מתאים גם ל-file1.txt וגם ל-fileA.txt אבל לא ל-file10.txt?
✓ תשובה: ג) file?.txt — ? = תו בודד כלשהו. file1.txt ✓ ו-fileA.txt ✓ (תו אחד), file10.txt ✗ (2 תווים). * היה מתאים גם ל-file10.txt. ג) file[0-9].txt מתאים רק לספרה — לא ל-fileA.txt.
// תרגול נוסף

תרגול נוסף — Linux: הרשאות, אותות ו-SUID

שאלות העשרה נוספות לחיזוק החומר של השיעור — באותו פורמט בחירה של הקורס.

✏תרגול נוסף3 שאלות
שאלה 8.1 [קל]
מה מאפשרות הרשאות chmod 644?
✓ תשובה נכונה: ד — 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?
✓ תשובה נכונה: א — SIGKILL(9): כפוי, מיידי, לא ניתן לתפוס. SIGTERM(15): מנומס, ניתן לתפוס לניקוי. תמיד נסה 15 קודם; 9 כמוצא אחרון.
שאלה 8.3 [קשה]
מצאת קובץ עם -rwsr-xr-x. מה משמעות ה-s ב-Owner?
✓ תשובה נכונה: א — SUID (s ב-Owner): הרצה בהרשאות בעל הקובץ. אם Owner=root → הרצה כ-root. ב-Privilege Escalation: find / -perm -4000 מחפש קבצי SUID.
// אתגר מעשי

אתגר מעשי — לינוקס — הרשאות והחלטות גישה

שיא השיעור: היפוך, ניתוח וזיהוי — כלי ה-RE וה-Low-Level בפעולה. ההגשה נבדקת אוטומטית.

T2 · בסיסי200 נק'~12 דק'algorithmic
chmod — סימבולי לאוקטלי
ממש to_octal(sym) הממיר מחרוזת הרשאות סימבולית בת 9 תווים (rwxrwxrwx לפי owner/group/other; '-' = כבוי) למחרוזת אוקטלית בת 3 ספרות. r=4, w=2, x=1.
דוגמאות
to_octal('rwxr-xr--') → '754'
to_octal('rw-r--r--') → '644'
הפתרון נשמר מקומית ומשותף עם עמוד „כתיבת קוד”.
פתרון-ייחוס chmod — סימבולי לאוקטלי ›
def to_octal(sym: str) -> str: out = "" for k in range(0, 9, 3): v = 0 if sym[k] == 'r': v += 4 if sym[k+1] == 'w': v += 2 if sym[k+2] == 'x': v += 1 out += str(v) return out
T3 · בינוני350 נק'~22 דק'algorithmic
החלטת גישה של Unix
ממש can_access(mode, file_owner, file_group, user, user_groups, op). mode הוא int אוקטלי (למשל 0o640). קבע איזו מחלקת-הרשאות חלה: owner אם user==file_owner; אחרת group אם file_group ב-user_groups; אחרת other. op הוא 'r'/'w'/'x'. החזר True אם למחלקה יש את ההרשאה. (שים לב לסדר הקדימות — owner גובר על group.)
דוגמאות
can_access(0o640,'alice','staff','alice',['alice'],'r') → True
can_access(0o640,'alice','staff','bob',['staff'],'w') → False
הפתרון נשמר מקומית ומשותף עם עמוד „כתיבת קוד”.
פתרון-ייחוס החלטת גישה של Unix ›
def can_access(mode, file_owner, file_group, user, user_groups, op) -> bool: bit = {'r': 4, 'w': 2, 'x': 1}[op] if user == file_owner: shift = 6 # owner elif file_group in user_groups: shift = 3 # group else: shift = 0 # other return bool((mode >> shift) & bit)
שאלות תרגול ותשובות (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.