הבלוג של ארתיום
בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!
על nginx ועל symbolic links
בעקבות הכתבה של עופר כהן הגעתי לטבלת השוואה מעניינת בין 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
עבור מערכת הקבצים כדי לעקוף את הבעיה.
חבל...
תגובות
למה בכלל השרת צריך לטפל בזה???
היוזר שבו רץ השרת לא אמור לקבל הרשאות לקרוא את /etc/passwd
אם כי איך אתה מונע שלא ייהיה קישור סימבולי לקובץ שנמצא אצל אתר אחר של לקוח אחר?
יש הבדל, הרשאות המשתמש בעל הרשאות לשים קישור סימבולי יכולות להיות שונות מהרשאות של שרת הווב.
אז אולי אני בתור משתמש לא אוכל לקרוא את הקובץ אבל שרת הווב כן יוכל.
לכן, אתה מקבל מה שנקרא rights-escalation שאתה לא אמור לקבל. זאת בדיוק הבעיה
כי זאת תכונה סטנדרטית דה־פקטו שיש לכל שרתי הווב
ארתיום, אני באמת לא מבין את הסערה בכוס מים. מי שם symlink לקובץ רגיש במ"ה?! מי מאפשר למשתמשים שלו אפשרות לשים קישור לקובץ רגיש במ"ה? (על-אף שאפאצ'י חוסם זאת).
זאת לא "סערה בכוס מים"... ציטוטים:
לפעמים אתה לא היחיד שיש לך גישה לשרתים. ואתה לא תמיד יכול לסמוך על תוכן הקבצים שאתה מעביר.
לכן זאת הגדרה בסיסית שקיימת בכל השרתים. בלעדיה אתה מאוד מגביל את היכולות של שרת הווב שלך.
שוב בהרבה מקרים זה באמת לא מפריע, אבל לעתים זה עלול להיות מאוד מסוכן.
הוסף תגובה:
חובה לאפשר JavaScript כדי להגיב.