לומדים לינוקס
323 subscribers
3 links
Download Telegram
לקבל את רשומי המערכת getent

לינוקס מלאה בקבצים שמכילים מידע על משתמשים, תהליכים, הגדרות וכו', במקום לרוץ ולאסוף את כל המידע הזה ולזכור היכן הוא ממוקם ישנה פקודה שמנגישה את המידע, קובץ ההגדרות נמצא בנתיב /etc/nsswitch.conf ומאפשר להגדיר מהיכן לאסוף את המידע, להלן רשימת המידע אותו היא מספקת ברירת מחדל

$ getent --help
...
Supported databases:
ahosts ahostsv4 ahostsv6 aliases ethers group gshadow hosts initgroups
netgroup networks passwd protocols rpc services shadow
...

בכדי לקבל מידע במלואו ניתן להריץ

$ getent hosts 
127.0.0.1 localhost
192.168.39.12 myrancher.com
178.62.121.30 playground


או לבחור לקבל מידע על ערך ספציפי

$ getent services 67
bootps 67/udp

$ getent services git
git 9418/tcp

@learnlinuxnote
לינוקס וקבצים lsof

אנו מכירים את הכלל בלינוקס לפיו כל אובייקט הוא קובץ, לכן כלי שעוקב אחרי קבצים במערכת הוא כלי נורא חשוב, נעים להכיר פקודת lsof

פקודת lsof היא בעצם פקודה שבודקת קבצים, אבל במונח הרחב יותר היא בעצם מספקת כלי בדיקה להרבה חלקים מהמערכת (הכל קבצים זוכרים), רוצים לבדוק לאיזה מקום תהליך מסויים רושם את הלוגים שלו? או לחילופין איזה תהליך מאזין לאיזה פורט? הפקודה מציגה את כל אלו ומאפשרת לשלב בין היכולות השונות כדי לפלטר את המידע

לדוגמה אנו רוצים לקבל מידע על כל תהליך שרץ במערכת

$ lsof
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 8,1 4096 2 /
systemd 1 root rtd DIR 8,1 4096 2 /
systemd 1 root txt REG 8,1 1698400 1842178 /usr/lib/
...
...

הרבה מהמידע שמוצג נראה ג'בריש ולא ברור להלן הסבר קצר על שתי עמודות חשובות שישפוך קצת אור על הנושא
עמודת FD מציגה תיאור על הקובץ המדובר (קיצור של File Descriptor)

cwd: current working directory
err: FD information error
ltx: shared library text (code and data)
Mxx: hex memory-mapped type number xx.
m86: DOS Merge mapped file
mem: memory-mapped file
mmap: memory-mapped device
pd: parent directory
rtd: root directory
txt: program text (code and data)
v86: VP/ix mapped file

לעמודה הזאת יש עוד סוג של מידע שנראה ממש מוזר
99r
104w
113u

ובעצם בא לספר לנו באלו הרשאות נפתח אותו הקובץ על ידי התהליך

r: read
w: write
u: read & write

עמודת TYPE מציגה את סוג הקובץ עליו אנו מסתכלים, הסוגים הנפוצים

DIR = תיקייה
REG = קובץ רגיל
CHR = קובץ בעל תווים מיוחדים
FIFO = קובץ pipe

אז מה בעצם אפשר לעשות עם פקודת lsof?

תהליך
שימוש בדגל p יאפשר לחקור לאלו קבצים תהליך מסוים ניגש ועם אלו הרשאות

$ lsof -p 1
OMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dumb-init 1 root cwd DIR 0,54 4096 9964742 /
dumb-init 1 root rtd DIR 0,54 4096 9964742 /
dumb-init 1 root txt REG 0,54 54744 9
309915 /u...
dumb-init 1 root mem REG 8,1 9309915 /usr/bin/...
...


פקודה
שימוש בדגל c יאפשר לקבל רק מידע שקשור לפקודה לסויימת

$ lsof -c firefox

תקשורת
שימוש בדגל i יאפשר לראות קבצים ותהליכים פונים לרשת

$ lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
kdeconnec 2292 user 11u IPv6 49368 0t0 UDP *:1716
kdeconnec 2292 user 12u IPv6 49369 0t0 TCP *:1716 (LISTEN)



פילטר
פקודת lsof מאפשרת ליצור מגוון פילטרים על המידע אותו אנו מבקשים, להלן כמה שימושיים במיוחד

כל התהליכים שמשתמשים בפרוטוקול מסויים ועוברים דרך פורט 80
דרך טווח של פורטים (300-1000)
דומיין מסויים (@whatsapp.com)
וכמובן ניתן ליצור קומבינציות משולבות של פילטרים

$ lsof -i TCP:80
$ lsof -i UDP:3000-10000
$ lsof -i @whatsapp.com

תאחזר את כל הקבצים אליהם ניגש משתמש מסויים (-u)
כל המשתמשים האחרים חוץ ממשתמש מסויים (^)
אלו קבצים בתיקייה הנוכחית פתוחים על ידי איזה תהליך (+D)

$ lsof -u user
$ lsof -u ^root
$ lsof +D Project/test/

לסיכום זאת רק טעימה, יש עוד הרבה אפשרויות שהכלי מספק
כדאי לעבור על הman שלו ולראות עוד אלו הפתעות הוא מחזיק בשרוול

@learnlinuxnote
👎1
Forwarded from ToCode
# על ההבדל בין -c ו -s ב su ו runuser
הפקודות su ו runuser נועדו כדי שנוכל להחליף משתמש או להריץ פקודות בתור משתמש אחר. ב su אנחנו משתמשים כדי לעבור ממשתמש רגיל למשתמש רגיל אחר, וב runuser נשתמש כדי לעבור ממנהל מערכת למשתמש רגיל. בשתי הפקודות האפשרויות -c ו -s משמשות לבחירת התוכנית שצריך להפעיל. בואו נראה את ההבדלים ביניהן.

## חיבור בתור משתמש אחר
פקודת su או runuser תפעיל את shell ברירת המחדל של המשתמש אליו אנחנו עוברים אם לא נציין במפורש פקודה אחרת. לכן אם אני משתמש מנהל מערכת ורוצה לעבור למשתמש postgres כדי לנהל בסיס נתונים אוכל להפעיל:

runuser - postgres


וכן רבים מאיתנו ישתמשו ב su כי זה יותר קצר:

su - postgres


ההבדל בין השתיים הוא ש runuser לא כוללת מנגנון אימות למשתמש ולכן רק מנהל מערכת יכול להפעיל אותה, ונועדה להפעלה על מערכות SELinux במקומות שיש הגבלות על הפעלת su.

## הפעלת תוכנית בתוך ה Shell הדיפולטי של משתמש אחר
אבל לא באנו לדבר על runuser אלא בשביל לדבר על שתי האפשרויות הנוספות של su (ולכן גם של runuser), לבחירת תוכנית להרצה או לבחירת Shell.

נתחיל בתוכנית להרצה: הרבה פעמים בסקריפטים אנחנו לא צריכים Shell אינטרקטיבי ומספיק לנו להריץ תוכנית ספציפית בתור משתמש אחר. במצב כזה נוכל להשתמש ב -c כדי להעביר את הנתיב לתוכנית ואת הפרמטרים שאנחנו רוצים להעביר. התוכנית תופעל מתוך ה Shell הדיפולטי של המשתמש ולכן אפשר להעביר גם משתנים והם יפוענחו בתוך הקונטקסט של המשתמש. הנה כמה דוגמאות:

root@60275c574ad5:/# runuser -c 'echo $USER' - postgres
postgres
root@60275c574ad5:/# runuser -c 'echo $HOME' - postgres
/var/lib/postgresql
root@60275c574ad5:/# runuser -c "python3 --version" - postgres
Python 3.8.5


בכל המקרים הרצת su -c לא טוענת את התוכן של ~/.bashrc או ~/.profile בגלל שמדובר ב Shell לא אינטרקטיבי.

## הפעלת Shell חלופי
במקרים אחרים נרצה להתחבר בתור משתמש שלא מוגדרת עבורו Default Shell. שימו לב לשורה הבאה מתוך הקובץ /etc/passwd:

irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin


המשתמש irc הוא משתמש פיקטיבי שנועד רק לצורך הפעלת ה IRC Daemon על המכונה. בגלל זה ה Shell שלו מוגדרת להיות nologin. ניסיון להתחבר בתור משתמש זה באמצעות runuser לא יצליח:

root@60275c574ad5:/# runuser - irc
runuser: warning: cannot change directory to /var/run/ircd: No such file or directory
This account is currently not available.


במצב כזה אנחנו צריכים לשנות את ה Shell באופן זמני רק עבור הפעלת ה runuser הספציפית, ואת זה עושים עם -s:

root@60275c574ad5:/# runuser -s /bin/bash - irc
runuser: warning: cannot change directory to /var/run/ircd: No such file or directory
irc@60275c574ad5:/$


למרות שאין תיקיית בית לעבור עליה, ולמרות שאין Default Shell, עדיין הצלחתי לקבל Shell אינטרקטיבי עם המשתמש irc.
👍2
לקפוץ מעל jumpbox

בלא מעט מערכות יש נוהל אבטחה שאין גישת ssh ישירה לשרת, אלא יש מכונה אחת שמורשת להתחבר לשרת ב ssh וכל מי שרוצה להתחבר לשרת חייב לעבור בדרך זו, המושג הזה ברשת מוכר בשם מכונת jumpbox

אוקי אז יש לנו מכונה jumpbox ואנו רוצים להתחבר אליה, המסלול שנצטרך לעבור הוא כזה

1. העתקה של המפתח הציבורי שלנו למכונת ה jumpbox
2. העתקת מפתח של מכונת ה jumpbox לשרת אליו אנו רוצים להתחבר

ואז לבצע את אותה הדרך עם חיבורי ssh
התחברות ssh לשרת ה jumpbox
התחברות נוספת משרת הjumpbox לשרת

נשמע ארוך לא?

במקום זאת אפשר להשתמש בתכונה של ssh ולהגדיר לו רצף של מכונות שבכולן הוא ישתמש באותו מפתח פרטי כדי להזדהות במידה ויש לנו מפתח ציבורי במכונה נוכל להמשיך למכונת היעד, זה נראה כך

ssh -J myuser@jumpbox myuser@isolated.server

אנו משתמשים בדגל -J כדי להכריז מהי מכונת ה jumpbox שלנו, ולאחר מכן לאיזה שרת אנו רוצים להתחבר דרכה, ssh הולך למכונה הראשונה מכונת ה jumpbox ומנסה למצוא התאמה בין המפתח הציבורי שנמצא במכונה למפתח הפרטי שנמצא אצלנו על המחשב

במידה והמפתח הציבורי שלנו נמצא במכונה, ssh יעבור למכונה הבאה דרך מכונת ה jumpbox וינסה להתחבר ממכונת ה jumpbox לשרת, אם המפתח הציבורי שלנו נמצא גם על השרת, ssh יבדוק התאמה של המפתח הציבורי מול המפתח הפרטי שנמצא על המחשב שלנו ונוכל לעבוד על השרת בצורה "ישירה"

#ssh
#jumpbox

@learnlinuxnote
👍3