2010-02-23 21 views
6

मैं here दिए गए एक साधारण पायथन आधारित वेब सर्वर को चलाने की कोशिश कर रहा हूं।मैं सॉकेट में अनुमतियों को कैसे बदलूं?

और मैं निम्न त्रुटि संदेश मिलता है: जहाँ तक

Traceback (most recent call last): 
    File "webserver.py", line 63, in <module> 
    main() 
    File "webserver.py", line 55, in main 
    server = HTTPServer(('', 80), MyHandler) 
    File "/usr/lib/python2.5/SocketServer.py", line 330, in __init__ 
    self.server_bind() 
    File "/usr/lib/python2.5/BaseHTTPServer.py", line 101, in server_bind 
    SocketServer.TCPServer.server_bind(self) 
    File "/usr/lib/python2.5/SocketServer.py", line 341, in server_bind 
    self.socket.bind(self.server_address) 
    File "<string>", line 1, in bind 
socket.error: (13, 'Permission denied') 

के रूप में मैं अपने फ़ायरवॉल ब्लॉकों एक सॉकेट के लिए पहुँच को समझते हैं? क्या मैं सही हू? यदि यह मामला है, तो मैं अनुमति कैसे बदल सकता हूं? क्या इन अनुमतियों को बदलना खतरनाक है?

उत्तर

11

यदि आप पोर्ट नंबर < 1024 से बांधना चाहते हैं, तो आपको रूट होना चाहिए। यह फ़ायरवॉल समस्या नहीं है; यह ऑपरेटिंग सिस्टम द्वारा लागू किया गया है। यहां a reference from w3.org, और यूनिक्स के लिए विशिष्ट FAQ entry है।

+0

http://www.unixguide.net/network/socketfaq/4.8.shtml –

+0

@ THC4k कनेक्ट: अतिरिक्त संदर्भ के लिए धन्यवाद; मैंने इसे अपने जवाब में शामिल किया है। –

2

यदि आप 1024 से कम पोर्ट पर चलाना चाहते हैं, तो आपको रूट होना होगा। आप किसी अन्य उपयोगकर्ता को स्विच करके सॉकेट खोल सकते हैं और अपने शेष कार्यक्रम के लिए जड़ की अनुमति छोड़ सकते हैं।

पोर्ट 80 पर वास्तविक वेबसर्वर (nginx कहें) चलाने के लिए अधिकतर समय आसान है और आपके प्रोग्राम के माध्यम से अनुरोधों को प्रॉक्सी करना है जिसे आप उच्च संख्या वाले पोर्ट (उदाहरण के लिए 8080) पर चला सकते हैं। इस तरह आपको अपनी प्रक्रिया रूट के रूप में चलने के दौरान कुछ खराब करने के बारे में चिंता करने की आवश्यकता नहीं है, क्योंकि यह रूट के रूप में कभी नहीं चलता है।

तो यह सिर्फ परीक्षण के लिए है, पोर्ट 8080 पर सर्वर चलाने के लिए और http://localhost:8080/ पर

संबंधित मुद्दे