2012-10-17 48 views
7

मुझे आपके वेब एप्लिकेशन को कहां से संचालित करना है, इस बारे में बहुत सी सलाह दी जाती है किवेब अनुप्रयोग चलाने के लिए लिनक्स उपयोगकर्ता अनुमतियों के लिए सर्वोत्तम अभ्यास?

उदाहरण के लिए, मैंने इसे देखा है:/var/www/site ,/एसआरवी/www/साइट,/घर/$ उपयोगकर्ता/साइट।

मैंने उपयोगकर्ता को www-data, $ USER (यानी मेरा उपयोगकर्ता खाता), या विशेष रूप से उस उद्देश्य के लिए बनाए गए कस्टम उपयोगकर्ता (उदा। उपयोगकर्ता uwsgi) देखा है।

सुरक्षा के मामले में, मैं कौन सी सबसे अच्छी योजना चुन सकता हूं?

संदर्भ के लिए, मैं एक Django साइट को Nginx और uwsgi के साथ तैनात करने की कोशिश कर रहा हूं।

अभी, यूवीजीआई सम्राट मोड में रूट के रूप में चल रहा है, यूआईडी/गीड www-data के रूप में सेट है, इसलिए Vassals Nginx श्रमिकों के समान अनुमतियों के साथ spawn। मैं/घर से सेवा कर रहा हूं, लेकिन आगे बढ़ने की सोच रहा हूं।

उत्तर

3

स्थान के लिए, चुनें कि आपके लिए सबसे अच्छा क्या लगता है।

/var तहत
  • स्थान फ़ाइलों जो change in size, या आम तौर पर के लिए कर रहे हैं: यहाँ कुछ बातों को मदद करने के लिए कर रहे हैं "चर।"
  • /srv आमतौर पर मशीन पर चल रही कुछ सेवा से संबंधित फ़ाइलों को इंगित करता है।
  • /home आमतौर पर इंटरैक्टिव उपयोगकर्ताओं के लिए आरक्षित होना चाहिए। हालांकि, आप सिस्टम उपयोगकर्ता की होम निर्देशिका को किसी भी चीज़ पर सेट कर सकते हैं।

सुरक्षा के लिए, आपको जितना संभव हो उतना सेगमेंट करना चाहिए। ऐप को वेब सर्वर के समान उपयोगकर्ता के रूप में नहीं चलाया जाना चाहिए, ताकि सर्वर से संबंधित संवेदनशील फ़ाइलों को पढ़ने के लिए इसका दुरुपयोग नहीं किया जा सके (.htaccess या जो भी हो)। ऐप की बाइनरी फाइलें (या Django, पायथन स्रोत के लिए) रूट उपयोगकर्ता के स्वामित्व के बिना रूट उपयोगकर्ता के स्वामित्व में होना चाहिए।

यहाँ यह सेट करने के तरीके पर मेरी 2 सेंट:

  • Django अनुप्रयोग: /usr/lib/appname/ या /usr/lib/python/site-packages/appname/ यदि स्थापित। रूट द्वारा स्वामित्व, chmod 644.
  • ऐप की फ़ाइलें (उदा। एसकलाइट डीबी फ़ाइल, फास्टसीजीआई के लिए यूनिक्स सॉकेट, अपलोड की गई फाइल स्टोरेज, आदि): /var/lib/appname/। ऐप-उपयोगकर्ता द्वारा स्वामित्व, chmod 600.
  • ऐप-उपयोगकर्ता का खोल /bin/nologin है, घर /var/lib/appname/ है। उपयोगकर्ता के पास कोई कॉन्फ़िगर पासवर्ड नहीं है।
+0

यदि मेरे पास वर्चुअलenv है, तो क्या यह/var/lib/appname/venv के अंतर्गत जाएगा? साथ ही, स्पष्ट होने के लिए, ऐप-उपयोगकर्ता उदाहरण हो सकता है 'uwsgi', लेकिन उपयोगकर्ता द्वारा मैं ssh के माध्यम से लॉग इन नहीं करता (और सुडो अनुमतियां हैं)? – user1431368

+0

एफडब्ल्यूआईडब्ल्यू, मेरा पायथन कोड [Django ट्यूटोरियल] (https://docs.djangoproject.com/en/1.4/intro/tutorial01/) के कारण/घर में रहता है (अनुभाग "यह कोड कहां रहना चाहिए?") – user1431368

+0

हां , 'uwsgi' आपके ऐप उपयोगकर्ता के लिए एक अच्छा विकल्प होगा, जब तक कि आपके पास एक से अधिक ऐप नहीं चलते हैं, इस मामले में आप प्रति-ऐप उपयोगकर्ता चाहते हैं। उपयोगकर्ता को सूडो या लॉगिन अनुमति नहीं होनी चाहिए। जैसा कि ट्यूटोरियल बताता है, सबसे महत्वपूर्ण बात यह है कि आपका कोड आपकी वेब रूट के नीचे न हो। – bonsaiviking