Skip to main content

לינוקס

תכנות בקר 85A טורניג'י (יוני 2026)

תכנות בקר 85A טורניג'י (יוני 2026)
Anonim

שם

- גישה של המארח לינוקס בקרת קבצים - -.

תיאור

דף ידני זה מתאר את לינוקס כשפת בקרת גישה פשוטה המבוססת על דפוסי לקוח (שם מארח / כתובת, שם משתמש), ודפוסי שרת (שם תהליך, שם מארח / כתובת). בסוף ניתנים דוגמאות. הקורא חסר הסבלנות מוזמן לדלג אל הקטע דוגמאות להקדמה מהירה. גרסה מורחבת של שפת בקרת הגישה מתוארת בסעיף hosts_options (5) מסמך. ההרחבות מופעלות בזמן בניית התוכנית על ידי בנייה עם -DPROCESS_OPTIONS.

בטקסט הבא, דמון הוא שם התהליך של תהליך daemon רשת, ו הלקוח הוא השם ו / או הכתובת של שירות המבקש המבקש. שמות תהליך daemon רשת מפורטים בקובץ התצורה של Inetd.

גישה לקבצי בקרה

תוכנת בקרת גישה מייעצת שני קבצים. החיפוש נעצר במשחק הראשון.

הגישה תינתן כאשר זוג (daemon, client) יתאים לרשומה ב- /etc/hosts.allow קובץ.

אחרת, הגישה תידחה כאשר זוג (daemon, client) תואם לרשומה ב- /etc/hosts.deny קובץ.

אחרת, תינתן גישה.

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

כללי בקרת גישה

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

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

שורות ריקות או שורות שמתחילות בתו '#' מתעלמות. זה מאפשר לך להוסיף הערות שטח לבן, כך טבלאות קל יותר לקרוא.

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

daemon_list: client_list : shell_command

daemon_list היא רשימה של אחד או יותר שמות תהליך daemon (argv 0 ערכים) או תווים כלליים (ראה להלן).

רשימת לקוחות היא רשימה של שם מארח אחד או יותר, כתובות מארח, דפוסי או תווים כלליים (ראה להלן) שתתאים לשם הלקוח או לכתובת המארח שלו.

צורות מורכבות יותר daemon @ מארח ו משתמש @ מארח מוסברים בסעיפים על דפוסי נקודות קצה של השרת ועל חיפושי שם משתמש, בהתאמה.

אלמנטים ברשימה יש להפריד בין החסר ו / או פסיקים.

למעט חיפושים של netGroup בשקלים (YP), כל בדיקות בקרת הגישה אינן רגישות.

דפוסי

שפת בקרת הגישה מיישמת את הדפוסים הבאים:

מחרוזת שמתחילה ב- '.' אופי. שם המארח תואם אם הרכיבים האחרונים של שמו תואמים את התבנית שצוין. לדוגמה, התבנית `tue.nl 'מתאימה לשם המארח` wzv.win.tue.nl'.

מחרוזת המסתיימת ב- ``. אופי. כתובת מארח תואמת אם השדות המספריים הראשונים שלה תואמים את המחרוזת הנתונה. לדוגמה, התבנית '131.155'. תואם את כתובת (כמעט) כל מארח על רשת איינדהובן האוניברסיטה (131.155.x.x).

מחרוזת שמתחילה בתו '@' מטופלת כשם NetGroup שקלי (לשעבר YP). שם המארח מותאם אם הוא חבר מארח של netgroup שצוין. התאמות Netgroup אינן נתמכות עבור שמות תהליך daemon או עבור שמות משתמש של לקוח.

ביטוי של הטופס 'n.n.n.n / m.m.m.m' מתפרש כזוג "נטו / מסכה". כתובת IP מארח IPv4 מתאימה אם 'net' שווה ל- bitwise של הכתובת ול'מסכה '. לדוגמה, תבנית הרשת / מסכת '131.155.72.0/255.255.254.0' מתאימה לכל כתובת בטווח '131.155.72.0' דרך '131.155.73.255'.

ביטוי של הטופס `n: n: n: n: n: n / m 'מתפרש כזוג' net / prefixlen '. כתובת IP מארח IPv6 מתאימה אם "birfixlen" ביטים של "net" שווה את 'prefixlen' סיביות של הכתובת. לדוגמה, תבנית net / prefixlen '3ffe: 505: 2: 1 :: / 64' מתאימה לכל כתובת בטווח `3ffe: 505: 2: 1 :: 'דרך` 3ffe: 505: 2: 1: ffff: ffff: ffff: ffff '.

מחרוזת שמתחילה בתו '/' מטופלת כשם קובץ. שם המארח או הכתובת תואמים אם הוא תואם לכל שם מארח או תבנית כתובת הרשומים בקובץ בשם. פורמט הקובץ הוא אפס או יותר שורות עם אפס או יותר שם המארח או דפוסי כתובת מופרדים על ידי שטח לבן. ניתן להשתמש בתבנית שם קובץ בכל מקום שבו ניתן להשתמש בשם המארח או בתבנית הכתובת.

תוים כלליים 'ו'? ' ניתן להשתמש בהם כדי להתאים שמות מארח או כתובות IP. לא ניתן להשתמש בשיטת התאמה זו בשילוב עם התאמת 'נטו / מסכה', התאמת שם המארח המתחילה ב- '.' או התאמת כתובת IP המסתיימת ב- '.'

תווים כלליים

שפת בקרת הגישה תומכת בתווים כלליים מפורשים, כולל:

'את כל'

התו הכללי אוניברסלי, תמיד תואם.

'מקומי'

מתאים לכל מארח ששמו אינו מכיל תו נקודה.

'לא ידוע'

מתאים לכל משתמש ששמו אינו ידוע, ומתאים לכל מארח ששמו או הכתובת אינה ידועה. יש להשתמש בתבנית זו בזהירות: ייתכן ששמות המארחים לא יהיו זמינים עקב בעיות זמניות של שרת שמות. כתובת רשת לא תהיה זמינה כאשר התוכנה לא יכולה להבין איזה סוג של רשת היא מדברת.

'ידוע'

מתאים לכל משתמש ששמו ידוע, ומתאים לכל מארח ששמו ו כתובת ידועים.יש להשתמש בתבנית זו בזהירות: ייתכן ששמות המארחים לא יהיו זמינים עקב בעיות זמניות של שרת שמות. כתובת רשת לא תהיה זמינה כאשר התוכנה לא יכולה להבין איזה סוג של רשת היא מדברת.

"פרנואידים"

מתאים לכל מארח ששמו אינו תואם לכתובת שלו. כאשר tcpd בנוי עם -DARANOID (מצב ברירת מחדל), הוא טיפות בקשות מלקוחות כאלה אפילו לפני מסתכל על טבלאות בקרת גישה. לבנות ללא -DARANOID כאשר אתה רוצה שליטה רבה יותר על בקשות כאלה.

"מפעילים"

'מלבד'

השימוש המיועד הוא הטופס: 'list_1 EXCEPT list_2'; זה לבנות התאמות כל דבר שמתאים רשימה_1 אלא אם כן הוא תואם רשימה_2 . ניתן להשתמש במפעיל EXCEPT ב- daemon_lists ובלקוחות client_lists. מפעיל ה- EXCEPT יכול להיות מקונן: אם שפת השליטה תאפשר שימוש בסוגריים, 'חריגה ב' להוציא C 'תנתח כ-' (א '(א').

פקודות

אם כלל בקרת הגישה התואמת הראשונה מכיל פקודת מעטפת, פקודה זו כפופה ל% תחליפים (ראה סעיף הבא). התוצאה מתבצעת על ידי / bin / sh הילד עם קלט רגיל, פלט שגיאה מחובר / dev / null . ציין '&' בסוף פקודת המסוף אם אינך רוצה להמתין עד לסיום.

פקודות Shell לא צריך להסתמך על ההגדרה PATH של inetd. במקום זאת, הם צריכים להשתמש בשמות נתיבים מוחלטים, או שהם צריכים להתחיל עם הצהרה מפורשת PATH = מה.

ה hosts_options (5) מסמך מתאר שפה חלופית המשתמשת בשדה הפקודה מעטפת בצורה אחרת ולא תואמת.

הרחבות

ההרחבות הבאות זמינות בפקודות מעטפת:

% a (% A) - הלקוח (שרת) כתובת המארח.

% c - פרטי לקוח: user @ host, user @ address, שם המארח או רק כתובת, בהתאם לכמות המידע הזמין.

% d - שם תהליך daemon (ערך argv 0).

% h (% H) - שם הלקוח או השרת המארח (השרת), אם שם המארח אינו זמין.

% n (% N) - הלקוח (שרת) שם המארח (או "לא ידוע" או "פרנואידית").

% p - תהליך הדמון מזהה.

% s - שרת מידע: daemon @ host, daemon @ address, או רק שם daemon, תלוי כמה מידע זמין.

% u - שם המשתמש של הלקוח (או "לא ידוע").

%% - מתרחב לתו '%' אחד.

תווים ב-% הרחבות שעשויות לבלבל את הקליפה מוחלפות בקווים תחתונים.

דפוסי נקודות קצה של השרת

כדי להבדיל בין לקוחות לפי כתובת הרשת שאליה הם מתחברים, השתמש בדפוסים של הטופס:

process_name @ host_pattern: client_list …

דפוסי כמו אלה יכולים לשמש כאשר המכונה יש כתובות אינטרנט שונות עם המארחים אינטרנט שונים. ספקי שירות יכולים להשתמש במתקן זה כדי להציע FTP, GOPHER או WWW ארכיון עם שמות אינטרנט שיכולים אפילו שייכים לארגונים שונים. ראה גם את האפשרות 'טוויסט' במסמך hosts_options (5). למערכות מסוימות (Solaris, FreeBSD) יכולות להיות יותר מכתובת אינטרנט אחת בממשק פיזי אחד; עם מערכות אחרות ייתכן שיהיה עליך להשתמש ב- SLIP או PPP pseudo ממשקים שחיים בחלל ייעודי כתובת הרשת.

המארח host_pattern מציית לאותם כללי תחביר כמו שמות המארח וכתובות בהקשר client_list. בדרך כלל, מידע נקודת קצה של השרת זמין רק עם שירותים מוכווני חיבור.

שם המשתמש של הלקוח

כאשר מארח הלקוח תומך בפרוטוקול RFC 931 או באחד מצאצאיו (TAP, IDENT, RFC 1413), תוכניות העטיפה יכולות לאחזר מידע נוסף על בעל החיבור. מידע על שם המשתמש של הלקוח, כאשר הוא זמין, מחובר יחד עם שם המארח של הלקוח, וניתן להשתמש בו להתאמה לדפוסים כגון:

daemon_list: … user_pattern @ host_pattern …

עטיפות daemon ניתן להגדיר בזמן לקמפל לבצע חיפושים מונחי משתמש מונחה כלל (ברירת המחדל) או תמיד לחקור את המארח הלקוח. במקרה של חיפושים מונחי משתמש מונחי כלל, הכלל לעיל יגרום בדיקת שם משתמש רק כאשר הן daemon_list וה host_pattern התאמה.

לדפוס משתמש יש תחביר זהה לתבנית תהליך daemon, ולכן אותן תווים כלליים חלים (חברות ב- netgroup אינה נתמכת). אחד לא צריך להיסחף עם חיפושי שם המשתמש, אם כי.

לא ניתן לסמוך על פרטי המשתמש של המשתמש כאשר הוא נחוץ ביותר, כלומר, כאשר מערכת הלקוח נפגעת. באופן כללי, כולם (האו"ם) ידועים הם דפוסי שם המשתמש היחיד הגיוני.

חיפושים שם משתמש רק עם שירותים מבוססי TCP, ורק כאשר המארח הלקוח פועל daemon מתאים; בכל המקרים האחרים התוצאה היא "לא ידוע".

בקר ידוע של UNIX עשוי לגרום לאובדן שירות כאשר חיפושי שם משתמש נחסמים על-ידי חומת אש. מסמך עטיפה READEE מתאר הליך כדי לברר אם הקרנל שלך יש באג זה.

חיפושים של שמות משתמש עלולים לגרום לעיכובים ניכרים עבור משתמשים שאינם משתמשי UNIX. זמן ברירת המחדל לחיפושים של שם משתמש הוא 10 שניות: קצר מכדי להתמודד עם רשתות איטיות, אך מספיק זמן כדי לגרות משתמשי מחשב.

חיפושים שם משתמש סלקטיבי יכול להקל על הבעיה האחרונה. לדוגמה, כלל כגון:@@pcnetgroup ALL @ ALL

יתאים חברים של netgroup PC מבלי לעשות חיפושי שם משתמש, אבל היה לבצע חיפושים שם משתמש עם כל המערכות האחרות.

איתור כתובת זיוף התקפות

פגם במחולל מספר הרצף של יישומי TCP / IP רבים מאפשר לפורצים להתחזות בקלות למארחים מהימנים וכדי לפרוץ דרך, לדוגמה, את השירות פגז מרחוק.השירות IDENT (RFC931 וכו ') יכול לשמש כדי לזהות התקפות מסוג זה או אחר של זיוף המארח.

לפני קבלת בקשת הלקוח, עטיפות יכול להשתמש בשירות IDENT כדי לגלות כי הלקוח לא שלח את הבקשה בכלל. כאשר המארח הלקוח מספק שירות IDENT, תוצאה שלילית IDENT בדיקת (הלקוח תואם 'UNKNOWN @ מארח') הוא עדות חזקה של התקף זיופים המארח.

תוצאה חיובית בדיקת IDENT (הלקוח תואם "ידוע @ מארח") הוא פחות אמין. זה אפשרי עבור פורץ לזייף הן את החיבור הלקוח ואת בדיקת IDENT, אם כי זה עושה הרבה יותר קשה מאשר זיוף רק חיבור לקוח. זה יכול להיות גם כי שרת IDENT של הלקוח שוכב.

הערה: חיפושים של IDENT אינם פועלים עם שירותי UDP.

דוגמאות

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

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

הדוגמאות משתמשות במארח ובשמות דומיינים. הם יכולים להשתפר על ידי הכללת כתובת ו / או רשת / netmask מידע, כדי לצמצם את ההשפעה של כשלים שם זמני שרת חיפוש.

סגור לרוב

במקרה זה, הגישה נדחתה כברירת מחדל. רק למפרשים מורשים מפורשים מותר לגשת.

מדיניות ברירת המחדל (ללא גישה) מיושמת עם קובץ דחייה טריוויאלי:

/etc/hosts.deny: ALL: ALL

פעולה זו שוללת את כל השירות לכל המארחים, אלא אם כן הם מורשים לגשת לפי רשומות בקובץ ההרשאה.

המארחים המורשים מפורשים מופיעים בקובץ ההרשאה. לדוגמה:

/etc/hosts.allow: ALL: LOCAL @some_netgroupכולם: .foobar.edu EXCEPT מסופים

הכלל הראשון מאפשר גישה מהמארחים בדומיין המקומי (לא "בשם המארח") וממנה some_netgroup -. הכלל השני מאפשר גישה מכל המארחים ב foobar.edu (שים לב לנקודה המובילה), למעט מסופים .

רוב פתוח

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

מדיניות ברירת המחדל (גישה שניתנה) הופכת את הקובץ ליותר מיותר כך שניתן להשמיט אותו. המארחים המפורשים שאינם מורשים מפורטים בקובץ דחייה. לדוגמה:

/etc/hosts.deny: ALL: some.host.name, .some.domainכולם מלבד in.fingerd: other.host.name, .other.domain

הכלל הראשון שולל כמה מארחים ותחומים כל השירותים; הכלל השני עדיין מאפשר בקשות אצבע ממארחים אחרים ותחומים אחרים.

מלכודות בובי

הדוגמה הבאה מאפשרת בקשות TFTP מהמארחים בתחום המקומי (שים לב לנקודה המובילה). בקשות מכל מארח אחר נדחות. במקום הקובץ המבוקש, בדיקת אצבע נשלחת אל המארח הפוגע. התוצאה נשלחת אל superuser.

/etc/hosts.allow:

in.tftpd: LOCAL, .my.domain/etc/hosts.deny:in.tftpd: ALL: להשריץ (/ some / where / safe_finger -l @% h | / usr / ucb / mail -s% d-% h root) &

הפקודה safe_finger מגיעה עם מעטפת tcpd ויש להתקין במקום מתאים. זה מגביל את הנזק האפשרי מן הנתונים שנשלחו על ידי שרת האצבע המרוחקת. זה נותן הגנה טובה יותר מאשר הפקודה אצבע רגילה.

הרחבת המאפיינים% h (host host) ו-% d (שם השירות) מתוארת בסעיף בפקודות shell.

אזהרה: לא מלכודת מלכודת הדמון שלך, אלא אם כן אתה מוכן לולאות אצבע אינסופי.

על מערכות חומת אש ברשת זה הטריק יכול להתבצע אפילו עוד יותר. חומת האש הרגילה של הרשת מספקת רק קבוצה מוגבלת של שירותים לעולם החיצוני. כל שאר השירותים ניתן "bugged" בדיוק כמו למשל לעיל tftp. התוצאה היא מערכת מעולה של התרעה מוקדמת.

ראה גם

tcpd (8) tcp / IP עטיפה daemon התוכנית.tcpdchk (8), tcpdmatch (8), תוכניות בדיקה.

חשוב: להשתמש ב איש פקודה ( % איש ) כדי לראות כיצד נעשה שימוש בפקודה במחשב הספציפי שלך.