על nginx ועל symbolic links

ב־יום שלישי, 31 בינואר 2012, מאת ארתיום; פורסם תחת: תכנה חופשית, אינטרנט, תכנה ומחשבים; ‏4 תגובות

בעקבות הכתבה של עופר כהן הגעתי לטבלת השוואה מעניינת בין Apache לבין nginx. מה שהפתיע אותי זה שכדי להעביר קובץ http://example.com/site/files/images/layout/header.png השרת nginx מבצע קריאת stat בודדת. הטבלה עשתה השוואה עם apache שעשה O(n)‎ קריאות עבור תיקיה בעומק n לעומת O(1)‎ עבור nginx...

ברגע שראיתי את זה נדלקה לי נורת אזהרה! מה עם symbolic links?

הסבר: נניח אני איצור קישור סימבולי בשם mypicture.png שיפנה ל־‎/etc/passwd או לקובץ רגיש אחר, אז ע"י גישה לקובץ תמים אני אוכל לקרוא כל קובץ שיש לשרת web הרשאות לקרוא.

לכל השרתי web יש אופציה לא לעקוב אחרי קישורים כאלה מטעמי אבטחה וזאת גם אופציה מומלצת לעבודה. מה חשוב, זה שבלתי אפשרי לעשות בדיקה כזו ב־O(1)‎ קריאות מערכת ההפעלה (לפי עומק התיקיה).

אז החלטתי לבדוק בעזרת strace, כמה קריאות stats בפועל מבצעים apache,‏ lighttpd ו־nginx כשהאופציה כזו מופעלת וגיליתי... ש־nginx בכלל לא תומך באופציה כזו! קרי הגדרת אבטחה בסיסית שכל שרת אינטרנט החל מ־apache ועד ל־thttpd תומכים בו (אגב גם השרת הפנימי של cppcms) בכלל לא מופיעה בו!

התשובה (רוסית) של מפתח nginx היא להשתמש ב־mount -o nosymfollow עבור מערכת הקבצים כדי לעקוף את הבעיה.

חבל...

תגובות

נדב, ב־31/01/12 14:16

למה בכלל השרת צריך לטפל בזה???

היוזר שבו רץ השרת לא אמור לקבל הרשאות לקרוא את /etc/passwd

אם כי איך אתה מונע שלא ייהיה קישור סימבולי לקובץ שנמצא אצל אתר אחר של לקוח אחר?

ארתיום, ב־31/01/12 14:23

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

אז אולי אני בתור משתמש לא אוכל לקרוא את הקובץ אבל שרת הווב כן יוכל.

לכן, אתה מקבל מה שנקרא rights-escalation שאתה לא אמור לקבל. זאת בדיוק הבעיה

למה בכלל השרת צריך לטפל בזה???

כי זאת תכונה סטנדרטית דה־פקטו שיש לכל שרתי הווב

oc666, ב־01/02/12 19:47

ארתיום, אני באמת לא מבין את הסערה בכוס מים. מי שם symlink לקובץ רגיש במ"ה?! מי מאפשר למשתמשים שלו אפשרות לשים קישור לקובץ רגיש במ"ה? (על-אף שאפאצ'י חוסם זאת).

ארתיום, ב־01/02/12 22:31

זאת לא "סערה בכוס מים"... ציטוטים:

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

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

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

הוסף תגובה:

 
 כתובת דוא"ל לא תוצג
 

ניתן לכתוב תגובות עם שימוש בתחביר Markdown.

חובה לאפשר JavaScript כדי להגיב.

דפים

נושאים