פיקוד לינוקס / יוניקס: sshd

שֵׁם

דשמון

תַקצִיר

- [-] [-] [- b bits ] [- - f config_file ] [- g login_grace_time ] [- h host_key_file ] [- k key_gen_time ] [- o אופציה ] [- p port ] [- u len ]

תיאור

sshd (SSH Daemon) היא תוכנית daemon עבור ssh (1). יחדיו תוכניות אלה מחליפות את rlogin ו- rsh , ולספק תקשורת מאובטחת מאובטח בין שני המארחים לא מהימן על פני רשת לא מאובטח. התוכניות נועדו להיות קל להתקנה ושימוש ככל האפשר.

shdd הוא daemon כי מאזין עבור חיבורים מלקוחות. זה התחיל בדרך כלל ב אתחול מ / etc / rc זה פורקס daemon חדש עבור כל חיבור נכנס. הדמונים המצוירים מטפלים בחילופי מפתח, הצפנה, אימות, ביצוע פקודות וחילופי נתונים. יישום זה של sshd תומך הן SSH פרוטוקול גירסה 1 ו 2 בו זמנית.

פרוטוקול SSH גירסה 1

לכל מארח יש מפתח RSA ספציפי למארח (בדרך כלל 1024 סיביות) המשמש לזיהוי המארח. בנוסף, כאשר הדמון מתחיל, הוא יוצר מפתח RSA שרת (בדרך כלל 768 סיביות). מפתח זה מתחדש מחדש בכל שעה אם הוא נמצא בשימוש, והוא אינו מאוחסן בדיסק.

כאשר לקוח מתחבר daemon מגיב עם המארחת הציבורית ואת המפתחות שרת. הלקוח משווה את המפתח המארח RSA נגד מסד הנתונים שלו כדי לוודא שהוא לא השתנה. לאחר מכן הלקוח מייצר מספר אקראי של 256-bit. זה מצפין את מספר אקראי זה הן באמצעות המפתח המארח והן את מפתח השרת ושולח את המספר המוצפן לשרת. שני הצדדים מכן להשתמש זה מספר אקראי כמפתח הפעלה אשר משמש להצפין את כל התקשורת נוספת בפגישה. את שאר הפגישה מוצפן באמצעות צופן קונבנציונאלי, כרגע Blowfish או 3DES, עם 3DES בשימוש כברירת מחדל. הלקוח בוחר את אלגוריתם ההצפנה לשימוש מאלה המוצעים על ידי השרת.

לאחר מכן, השרת והלקוח נכנסים לתיבת אימות. הלקוח מנסה לאמת את עצמו באמצעות אימות .rhosts, אימות rhosts בשילוב עם אימות מארח RSA, אימות RSA-Response בתגובה או אימות מבוסס סיסמאות .

אימות Rhusts מושבת בדרך כלל מכיוון שהוא חסר ביטחון באופן בסיסי, אך ניתן להפעיל אותו בקובץ תצורת השרת, אם תרצה בכך. אבטחת המערכת אינה משופרת אלא אם כן rshd rlogind ו- rexecd מושבתים (ובכך משביתים לחלוטין את rlogin ו- rsh לתוך המכשיר).

פרוטוקול SSH גירסה 2

גירסה 2 פועלת באופן דומה: לכל מארח יש מפתח ספציפי למארח (RSA או DSA) המשמש לזיהוי המארח. עם זאת, כאשר הדמון מתחיל, זה לא יוצר מפתח שרת. אבטחה קדימה ניתנת באמצעות הסכם מפתח Diffie-Hellman. הסכם מפתח זה יוצר מפתח הפעלה משותף.

שאר הפגישה מוצפן באמצעות צופן סימטרי, כרגע AES 128 ביט, Blowfish, 3DES, CAST128, Arcfour, AES AES 192, או 256 ביט AES. הלקוח בוחר את אלגוריתם ההצפנה לשימוש מאלה המוצעים על ידי השרת. בנוסף, שלמות הפגישה מסופק באמצעות קוד אימות קוד הצפנה (hmac-sha1 או hmac-md5).

Protocol גירסה 2 מספק משתמש מבוסס מפתח ציבורי (PubkeyAuthentication) או המארח לקוח (HostbasedAuthentication) שיטת אימות, אימות סיסמה קונבנציונאלי, ושיטות אתגר בתגובה מבוסס.

ביצוע פקודות והעברת נתונים

אם הלקוח מאמת את עצמו בהצלחה, תיבת דו-שיח להכנת הפגישה מוזנת. בשלב זה הלקוח עשוי לבקש דברים כגון הקצאת חיבורי X11, העברת העברת TCP / IP או העברת חיבור סוכן האימות דרך הערוץ המאובטח.

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

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

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

sshd חוזר וקובץ התצורה שלו כאשר הוא מקבל אות Hangup , SIGHUP על ידי ביצוע עצמו עם שם זה התחיל כמו, כלומר, / usr / sbin / sshd

האופציות הן כדלקמן:

סיביות

מציין את מספר הביטים במפתח שרת הפרוטוקול החריג 1 (ברירת מחדל 768).

ד

מצב איתור באגים. השרת שולח פלט debugose debug ליומן המערכת ואינו שם את עצמו ברקע. השרת גם לא יעבוד ויעבד רק חיבור אחד. אפשרות זו מיועדת רק עבור איתור באגים עבור השרת. אפשרויות מרובות -D להגדיל את רמת איתור הבאגים. המקסימום הוא 3.

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

-f configuration_file

מציין את שם קובץ התצורה. ברירת המחדל היא / etc / ssh / sshd_config sshd מסרב להתחיל אם אין קובץ תצורה.

-g login_grace_time

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

-h host_key_file

מציין קובץ שממנו נקרא מפתח מארח. אפשרות זו חייבת להינתן אם sshd אינו פועל כשורש (כמו קבצי מארח המארח נורמלי הם בדרך כלל לא קריא על ידי מישהו, אבל השורש). ברירת המחדל היא / etc / ssh / ssh_host_key עבור פרוטוקול גירסה 1, ו / etc / ssh / ssh_host_rsa_key ו / etc / ssh / ssh_host_dsa_key עבור פרוטוקול גירסה 2. ניתן לקבל מספר רב של קבצי מפתח מארח עבור גרסאות פרוטוקול שונים מפתח מארח אלגוריתמים.

-אני

מציין ש- sshd מופעל מתוך inetd. sshd הוא בדרך כלל לא לרוץ מ inetd כי זה צריך ליצור את מפתח השרת לפני שהוא יכול להגיב ללקוח, וזה עלול להימשך עשרות שניות. הלקוחות יצטרכו לחכות זמן רב מדי אם המפתח יופעל מחדש בכל פעם. עם זאת, עם גודל מפתח קטן (למשל, 512) באמצעות sshd מ inetd עשוי להיות ריאלי.

-k key_gen_time

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

אפשרות

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

- יציאה

מציין את היציאה שבה השרת מאזין לחיבורים (ברירת מחדל 22). אפשרויות יציאה מרובות מותרות. יציאות המתוארות בקובץ התצורה מתעלמות כאשר מצוין יציאת שורת פקודה.

-q

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

-t

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

- לן

אפשרות זו משמשת לציון גודל השדה במבנה ה- utmp המחזיק את שם המארח המרוחק. אם שם המארח שהוחלט ארוך יותר מאשר len , ייעשה שימוש בערך העשרוני המנוקד. זה מאפשר המארחים עם שמות המארח ארוך מאוד כי הצפת שדה זה עדיין להיות מזוהה באופן ייחודי. ציון - u0 מציין שרק כתובות עשרוניות מנוקדות יש להכניס לקובץ utmp. - u0 משמש גם כדי למנוע sshd לבצע בקשות DNS, אלא אם כן מנגנון אימות או תצורה דורשת את זה. מנגנוני אימות שעשויים לחייב DNS כוללים RhostsAuthentication RhostsRSAA אימות אימות Hostbased ושימוש באפשרות מתוך = תבנית רשימה בקובץ מפתח. אפשרויות תצורה המחייבות DNS כוללות שימוש בתבנית USER @ HOST ב- AllowUsers או ב- DenyUsers

-D

כאשר אפשרות זו מסומנת sshd לא לנתק ולא להפוך daemon. זה מאפשר ניטור קל של sshd

-4

מכריח sshd להשתמש בכתובות IPv4 בלבד.

-6

מכריח sshd להשתמש בכתובות IPv6 בלבד.

קובץ תצורה

sshd קורא נתוני תצורה מ / etc / ssh / sshd_config (או את הקובץ שצוין עם - f בשורת הפקודה). פורמט הקובץ ואפשרויות התצורה מתוארים ב- sshd_config5.

תהליך התחברות

כאשר משתמש מצליח להיכנס, sshd מבצע את הפעולות הבאות:

  1. אם הכניסה היא על tty, ולא צוין פקודה, מדפיסה את זמן ההתחברות האחרון ו / etc / motd (אלא אם כן נמנע בקובץ ההגדרות או על ידי $ HOME / .hushlogin עיין בסעיף Sx FILES).
  2. אם הכניסה היא על tty, רשומות זמן התחברות.
  3. בדיקות / etc / nologin אם הוא קיים, מדפיס תוכן ויוצא (אלא אם כן השורש).
  4. שינויים בהפעלה עם הרשאות משתמש רגילות.
  5. מגדיר סביבה בסיסית.
  6. קורא $ HOME / .shsh / environment אם הוא קיים והמשתמשים רשאים לשנות את הסביבה שלהם. עיין באפשרות PermitUserEnvironment ב- sshd_config5.
  7. שינויים בספריית הבית של המשתמש.
  8. אם $ HOME / .ssh / rc קיים, מפעיל אותו; אחרת אם / etc / ssh / sshrc קיים, מפעיל אותו; אחרת פועל xauth. קבצי "rc" "מקבלים את פרוטוקול האימות X11 ואת עוגיית הקלט הסטנדרטי.
  9. מפעיל פגז או פקודה של המשתמש.

פורמט קובץ Authorized_Keys

$ HOME / .shsh / author_keys הוא קובץ ברירת המחדל המפרט את המפתחות הציבוריים המותרים לאימות RSA בגירסת פרוטוקול 1 ולאימות מפתח ציבורי (PubkeyAuthentication) בגירסת פרוטוקול 2. AuthorizedKeysFile ניתן להשתמש כדי לציין קובץ חלופי.

כל שורה של הקובץ מכילה מפתח אחד (שורות ריקות וקווים המתחילים ב- # # מתעלמות כתגובות). כל מפתח ציבורי של RSA מורכב מהשדות הבאים, מופרדים על ידי רווחים: אפשרויות, סיביות, מעריך, מודולוס, תגובה. כל גרסה 2 פרוטוקול מפתח ציבורי מורכב: אפשרויות, keytype, מפתח מקודד base64, תגובה. שדה האפשרויות הוא אופציונלי; נוכחותה נקבעת על ידי אם הקו מתחיל במספר או לא (שדה האפשרויות לא מתחיל עם מספר). ביטים, מעריך, מודולוס שדות תגובה לתת את המפתח RSA עבור פרוטוקול גרסה 1; שדה ההערה אינו משמש לשום דבר (אך עשוי להיות נוח למשתמש לזהות את המפתח). עבור פרוטוקול גירסה 2 keytype הוא 'ssh-dss' או '' ssh-rsa ''

שים לב כי השורות בקובץ זה הן בדרך כלל כמה מאות בייטים (בגלל הגודל של קידוד המפתח הציבורי). אתה לא רוצה להקליד אותם; במקום זאת, העתק את id.dub id_dsa.pub או את הקובץ id_rsa.pub וערוך אותו.

sshd אוכפת גודל מודול מפתח RSA מינימלי עבור פרוטוקול 1 ופרוטוקול 2 מפתחות של 768 סיביות.

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

מרשימת דוגמאות =

מציינת כי בנוסף לאימות מפתח ציבורי, השם הקנוני של המארח המרוחק חייב להיות נוכח ברשימת הדפוסים המופרדים בפסיקים ('*' ו- '?' משמשים כתווים כלליים). הרשימה עשויה להכיל גם דפוסים שנשללו על ידי קידומתם '!'. ; אם שם המארח הקנוני תואם לדפוס שלילי, המפתח לא יתקבל. מטרת אפשרות זו היא להגדיל את האבטחה: אימות מפתח ציבורי כשלעצמו אינו בוטח בשרתי הרשת או בשמות או בכל דבר אחר (אך המפתח); עם זאת, אם מישהו איכשהו גונב את המפתח, המפתח מאפשר פולש להיכנס מכל מקום בעולם. אפשרות נוספת זו עושה שימוש במפתח גנוב קשה יותר (שרתי שם ו / או נתבים יצטרך להיות בסכנה בנוסף רק את המפתח).

הפקודה הפקודה

מציין שהפקודה מבוצעת בכל פעם שמפתח זה משמש לאימות. המערכת תתעלם מהפקודה שסופקה על ידי המשתמש (אם בכלל). הפקודה מופעלת על pty אם הלקוח מבקש pty; אחרת הוא פועל ללא tty. אם יש צורך בערוץ נקי של 8 סיביות, לא ניתן לבקש Pty או לציין ללא pty . ציטוט עשוי להיכלל בפקודה על ידי ציטוט עם קו נטוי הפוך. אפשרות זו עשויה להיות שימושית להגבלת מפתחות ציבוריים מסוימים לביצוע פעולה ספציפית בלבד. דוגמה עשויה להיות מפתח המאפשר גיבויים מרחוק אבל שום דבר אחר. שים לב שהלקוח יכול לציין העברת TCP / IP ו / או X11, אלא אם כן הוא אסור במפורש. שים לב כי אפשרות זו חלה על ביצוע פגז, פקודה או תת-מערכת.

value = NAME = value

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

ללא יציאת-העברה

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

no-X11-forwarding

פורבס X11 העברת כאשר מפתח זה משמש לאימות. כל X11 בקשות קדימה על ידי הלקוח יחזיר שגיאה.

ללא סוכן העברת

העברת סוכן אימות לאימות כאשר מפתח זה משמש לאימות.

ללא pty

מונע הקצאת tty (בקשה להקצאת pty תיכשל).

permopen = מארח: יציאה

הגבל את העברת היציאות המקומית "ssh-l '", כך שהיא יכולה להתחבר רק למארח ולפורט שצוינו. כתובות IPv6 יכולות להיות מוגדרות עם תחביר חלופי: host / port ניתן להחיל אופציות Licenseopen מרובות המופרדות באמצעות פסיקים. לא מתבצעת התאמה של תבניות בשמות המארחים שצוינו, הן חייבות להיות תחומים מילוליים או כתובות.

דוגמאות

1024 331211 312314325 ylo@foo.bar

מ = "*. niksula.hut.fi,! pc.niksula.hut.fi" 1024 35 23 ... 2334 ylo @ niksula

הפקודה = "dump / home", no-pty, no-port-forwarding 1024 33 23 ... 2323 backup.hut.fi

allowopen = "10.2.1.55:80", licenseopen = "10.2.1.56:25" 1024 33 23 ... 2323

תבנית קובץ Ssh_Known_Hosts

את / etc / ssh / ssh_known_hosts ו $ HOME / .ssh / known_hosts קבצים מכילים מארחים ציבוריים המארח לכל המארחים ידועים. הקובץ העולמי צריך להיות מוכן על ידי מנהל המערכת (אופציונלי), והקובץ לכל משתמש נשמר באופן אוטומטי: בכל פעם שהמשתמש מתחבר ממארח ​​לא ידוע, המפתח שלו מתווסף לקובץ למשתמש.

כל שורה בקבצים אלה מכילה את השדות הבאים: hostnames, bits, exponent, modulus, comment. השדות מופרדים על ידי רווחים.

שמות מארחים הם רשימת דפוסי מופרדים בפסיקים ('*' ו- '?' משמשים כתווים כלליים); כל תבנית, בתורו, מותאמת כנגד שם המארח הקנוני (בעת אימות לקוח) או נגד השם שסופק על ידי המשתמש (בעת אימות שרת). דפוס יכול להיות גם קודם לכן '!' כדי לציין שלילה: אם שם המארח מתאים לדפוס שלילי, הוא לא יתקבל (לפי שורה זו), גם אם הוא תואם דפוס אחר על הקו.

סיביות, מעריך, מודולוס נלקחים ישירות מן המפתח המארח RSA; ניתן לקבל אותם, לדוגמה, מ /etc/ssh/ssh_host_key.pub שדה ההערה האופציונלי ממשיך לסוף השורה ולא נעשה בו שימוש.

שורות שמתחילות ב- '#' וקווים ריקים מתעלמות מהערות.

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

שים לב כי השורות בקבצים אלה הם בדרך כלל מאות תווים, ואתה בהחלט לא רוצה להקליד את המפתחות המארח ביד. במקום זאת, ליצור אותם על ידי סקריפט או על ידי לקיחת / etc / ssh / ssh_host_key.pub והוספת שמות המארח בחזית.

דוגמאות

סגור ..., 130.233.208.41 1024 37 159 ... 93 סגורenet.hut.fi cvs.openbsd.org, 199.185.137.3 ssh-rsa AAAA1234 ..... =

ראה גם

(1), sftp (1), ssh (1), ssh-add1, ssh-agent1, ssh-keygen1, login.conf5, moduli (5), sshd_config5, sftp-server8

T. Ylonen T. Kivinen M. Saarinen T. Rinne S. Lehtinen "פרוטוקול SSH Architecture" טיוטה-ietf-secsh-architecture-12txt ינואר 2002 עבודה בתהליך

M. Friedel N. Provos WA סימפסון "Diffie-Hellman Group Exchange עבור SSH Transport Layer Protocol" טיוטה-ietf-secsh-dh-group-exchange-02.txt ינואר 2002 עבודה בתהליך

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