चूंकि पोर्ट 80/443 सिस्टम पोर्ट हैं, जिसका अर्थ है कि वे केवल विशेषाधिकार प्राप्त उपयोगकर्ताओं द्वारा उपयोग किए जा सकते हैं
मुझे लगता है कि आपके पास यह गलत है। इन बंदरगाहों का उपयोग कोई भी कर सकता है। उन्हें बांधना एक विशेषाधिकार प्राप्त ऑपरेशन है।
यहाँ तर्क यह है कि कुछ उपयोगकर्ता जो को एक दुर्भावनापूर्ण वेब सर्वर लिखने में सक्षम नहीं होना चाहिए और फिर कुछ ऐसे होस्ट बनाने चाहिए जिन पर उनका कोई प्रशासनिक अधिकार नहीं है। बेशक यह एक बहुत कमजोर मॉडल है आमतौर पर जो को नेटवर्क पर अपने कंप्यूटर को रखने से रोकने के लिए कुछ भी नहीं है, और उसके पास किसी भी मशीन के लिए प्रशासनिक अधिकार हो सकते हैं जिसके लिए उसके पास भौतिक पहुंच है।
मैं netcat के साथ एक प्रदर्शन करूँगा।
एक साधारण उपयोगकर्ता के रूप में, मैं 80 पोर्ट नहीं कर सकता:
$ nc -l -p 80
Can't grab 0.0.0.0:80 with bind : Permission denied
मैं 8080 पोर्ट कर सकता हूं:
$ nc -l -p 8080
इस बीच एक अन्य टर्मिनल में, मैं पोर्ट 80 से कनेक्ट कर सकता हूं और कुछ डेटा भेज सकता हूं, और यह देख सकता हूं कि सर्वर अंत में मैं अभी शुरू हुआ हूं:
$ nc 127.0.0.1 8080 <<<"Hello world"
अगर मैं 80 को पोर्ट करना चाहता हूं, तो मुझे रूट होने की जरूरत है:
$ sudo nc -l -p 80
या मैं बाइनरी CAP_NET_BIND_SERVICE
को क्षमता प्रदान कर सकता हूं nc
:
$ cp `which nc` .
$ sudo setcap 'cap_net_bind_service=+ep' ./nc
$ ./nc -l -p 80
एक अन्य विकल्प सर्वर प्रोग्राम को इस तरह लिखना है कि इसे कहा जाता है के बाद यह listen()
रूट विशेषाधिकार छोड़ देता है। यह एक बहुत ही सामान्य समाधान है, और आप इसे अधिकांश डेमॉन के साथ देखेंगे। उदाहरण के लिए, अपाचे जड़ के रूप में init से शुरू हो जाता है, और फिर रूट विशेषाधिकार छोड़ देता है और उपयोगकर्ता www-data
या ऐसा ही कुछ बन जाता है एक बार यह पोर्ट 80 के लिए बाध्य है। /etc/init.d/apache start
रूट के रूप में चलाने की कोशिश करें और अपाचे संभवतः शुरू करने में विफल रहेगा।