किसी दिए गए आईपी पर एक वेबसर्वर शुरू करने के लिए सुडोल की आवश्यकता क्यों है: पोर्ट?


9

मैं अपने डेबियन बॉक्स पर पायथन-आधारित वेबसर्वर स्थापित कर रहा हूं।

सेट अप:

  • डेबियन ओएस VM आधारित है, लेकिन मैंने NAT से Bridged में VirtualBox को स्विच कर दिया है।
  • वीएम सेटअप का आईपी = 192.168.1.7(मेरे राउटर की व्यवस्थापक स्क्रीन या ifconfig)।
  • मैंने ssh और HTTP दोनों के लिए अपना राउटर पोर्ट आगे बढ़ा दिया है।
  • मैंने dyndns.com का उपयोग करके अपने राउटर के डायनामिक डीन्स को सफलतापूर्वक सेट किया है।

विशिष्ट पायथन वेबसर्वर के बावजूद मैं (Django, CherryPy, मानक पुस्तकालय) का उपयोग कर रहा हूं, मुझे उपयोग करके वेबसर्वर @ 192.168.1.7:80 शुरू करना होगा sudo। अन्यथा मुझे पोर्ट तक पहुंचने की अनुमति नहीं होने के बारे में एक त्रुटि मिलती है। वेबसर्वर ट्यूटोरियल में से कोई भी sudoएक आईपी: पोर्ट को निर्दिष्ट करते समय उपयोग करने की आवश्यकता का उल्लेख नहीं करता है ।

प्रश्न: मुझे sudoइन वेबसर्वर को शुरू करने के लिए उपयोग करने की आवश्यकता क्यों है ? क्या यह एक संकेत है कि मुझे उपयोग नहीं करना चाहिए 192.168.1.7? या यह कि मैं एक कॉन्फिग फाइल को कहीं ठीक से सेट नहीं कर रहा हूँ?

जवाबों:


11

केवल रूट अनुमतियों वाली प्रक्रिया विशेषाधिकार प्राप्त बंदरगाहों पर सुन सकती है। यह एक मानक यूनिक्स सुरक्षा सम्मेलन है।


क्या 80 पर सुडो का उपयोग करके वेबसर्वर शुरू करना आम है? या पोर्ट> 1024 (जैसे 8000, 8080) का उपयोग करने के लिए कुछ अन्य रणनीति है?
बेगबी 00

@ बेगबी00 हाँ उच्च बंदरगाहों पर वेबसर्वर चलाने के लिए यह काफी सामान्य है। लेकिन इसका उपयोग ज्यादातर उन वेब सर्वरों के लिए किया जाता है जो इंटरनेट पर सार्वजनिक रूप से सुलभ नहीं होते हैं, या उन मशीनों पर चल रहे हैं जहां उपयोगकर्ताओं के पास रूट अनुमति नहीं है। विकास और परीक्षण के लिए उपयोग किए जाने वाले वेब सर्वर लगभग विशेष रूप से गैर-विशेषाधिकार प्राप्त बंदरगाहों पर चलते हैं।
मोन तोथ

2
दुर्भाग्यवश यह कथन आधुनिक यूनिक्स प्रणालियों के लिए पूरी तरह सच नहीं है। विवरण के लिए मेरा उत्तर देखें, लेकिन उदाहरण के लिए आधुनिक लिनक्स कैपैबिलिटीज का उपयोग करके अधिक बारीक अनुमति वाले नियंत्रण को अनुमति देता है। इसके अलावा सोलारिस में RBAC नामक एक सुव्यवस्थित सुरक्षा प्रणाली है। ये तंत्र विशिष्ट उपयोगकर्ताओं या कार्यक्रमों के लिए विशेषाधिकार प्राप्त बंदरगाहों के लिए बाध्य करने की अनुमति देने की अनुमति देते हैं।
स्काईबीम

14

यह मानक व्यवहार है कि गैर-विशेषाधिकार प्राप्त उपयोगकर्ताओं को विशेषाधिकार प्राप्त बंदरगाहों (1024 से नीचे पोर्ट संख्या) को बांधने की अनुमति नहीं है। इसलिए एक ऐसा अनुप्रयोग जो उदाहरण के लिए 80 पोर्ट पर बाँधना चाहेगा, उसे इस पोर्ट को बाँधने के लिए विशेषाधिकार प्राप्त करना होगा (आमतौर पर रूट के रूप में चलाने का मतलब है)।

एक सामान्य दृष्टिकोण विशेषाधिकार प्राप्त उपयोगकर्ता के साथ एक छोटी "श्रोता" प्रक्रिया को चलाना है जो कनेक्शन को स्वीकार करता है और फिर अनुरोध को संभालने के लिए एक गैर-विशेषाधिकार प्राप्त प्रक्रिया को जन्म देता है। अनुरोध प्रसंस्करण के लिए ड्रॉपिंग विशेषाधिकार सुरक्षा कारण के लिए किया जाता है। यदि कोई ऐसी प्रक्रिया का उपयोग करने में सक्षम है जो अनुरोध को संभालती है, तो आमतौर पर यह घुसपैठिए को प्रसंस्करण प्रक्रिया के समान विशेषाधिकार का उपयोग करके आदेशों को निष्पादित करने की अनुमति देता है। इसलिए विशेषाधिकार प्राप्त प्रक्रिया का उपयोग करके पूरे अनुरोध को संभालना बुरा होगा।

हालाँकि कई अनुप्रयोगों के लिए आजकल गैर-रूट के रूप में चलना आम है; लेकिन निश्चित रूप से ऐसी प्रक्रियाएं विशेषाधिकार प्राप्त बंदरगाहों से मानक विन्यास में नहीं बंध सकती हैं। तो टॉमकैट या जेबॉस जैसे सर्वर 8080 जैसे उच्च-बंदरगाहों को बांधते थे, इसलिए उन्हें विशेषाधिकार प्राप्त श्रोता की आवश्यकता नहीं थी।

यदि आप इंटरनेट पर इस तरह की प्रक्रिया का खुलासा करते हैं, तो आप संभवतः पोर्ट 80 पर पहुंच प्रदान करेंगे क्योंकि प्रत्येक ब्राउज़र पहले HTTP प्रोटोकॉल का उपयोग करने पर पोर्ट 80 से कनेक्ट करने का प्रयास करेगा। डब्ल्यू आम काम के आसपास यह प्रदान करने के लिए आवेदन और सार्वजनिक इंटरनेट के बीच में एक फ़ायरवॉल या पोर्ट-ट्रांसलेटर का उपयोग करना है। इसलिए अनुरोधों ने फ़ायरवॉल को पोर्ट 80 का अनुरोध करने के लिए मारा, लेकिन फ़ायरवॉल पोर्ट 8080 पर कुछ आंतरिक होस्ट के लिए अनुरोध को आगे बढ़ाता है। इस तरह से वास्तविक वेब-सर्वर पोर्ट 80 पर सार्वजनिक रूप से उपलब्ध होने के दौरान हाई-पोर्ट पर काम कर सकता है।

- (internet request) ----> (port 80)[Firewall] ------> (port 8080)[Webserver]

कभी-कभी यह रीडायरेक्ट केवल iptablesNAT नियम का उपयोग करके किया जाता है :

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

यह पोर्ट 8080 पर एक अनपेक्षित एप्लिकेशन को सुनने की अनुमति देता है, जबकि पोर्ट 80 के लिए आने वाले सभी अनुरोध केवल 8080 पोर्ट पर रीडायरेक्ट किए जाते हैं।

हालांकि आधुनिक लिनक्स कर्नेल का उपयोग करने की एक और संभावना है: क्षमताओं का उपयोग करें।

setcap CAP_NET_BIND_SERVICE=+ep /some/webserver/binary

यह binaryगैर-रूट उपयोगकर्ता से शुरू होने पर भी विशेषाधिकार प्राप्त बंदरगाहों से बांधने की अनुमति देगा । man capabilitiesअधिक जानकारी के लिए देखें।


क्या क्षमता POSIX का हिस्सा है, या सिर्फ लिनक्स विशिष्ट है?
15:मोन तोथ

@Let_Me_Be जैसा कि मैं समझता हूं कि en.wikipedia.org/wiki/Capability-based_security POSIX ने क्षमता-आधारित अवधारणा को परिभाषित किया है, लेकिन लिनक्स में इसे लागू किया गया है, यह अलग है। इसलिए मुझे लगता है कि CAP_NET_BIND_SERVICE जैसी लिनक्स क्षमताएं केवल लिनक्स-विशिष्ट हैं।
स्काईबीम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.