अपाचे 2 को शुरू करते समय मुझे "अनुमति से वंचित: make_sock: पता करने के लिए बाध्य नहीं किया जा रहा" क्यों हो सकता है?


25

मैं इसका इस्तेमाल बंद कर सकता हूं

/etc/init.d/apache2 stop

लेकिन जब मैं इसका उपयोग करके इसे फिर से शुरू करना चाहता हूं:

/etc/init.d/apache2 start

मुझे यह त्रुटि मिली:

Starting web server apache2                                                  /usr/sbin/apache2ctl: 87: ulimit: error setting limit (Operation not permitted)
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
(13)Permission denied: make_sock: could not bind to address [::]:80
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
                                                                         [fail]

जवाबों:


50

त्रुटियों के बारे में कुछ शब्द जो आपको मिलते हैं, उम्मीद है कि भविष्य में ऐसी ही स्थितियों से आपको बचाएंगे।

लिनक्स पोर्ट में 0 से 1024 तक सिस्टम उपयोग के लिए आरक्षित हैं। इसका मतलब है कि किसी एक का उपयोग करने के लिए, आपके पास मूल सिस्टम सेटिंग्स को बदलने - एक्सेस करने का अधिकार होना चाहिए। रूट उपयोगकर्ता के पास ऐसे विशेषाधिकार हैं और वास्तव में 0 - 1024 की सीमा से एक पोर्ट का उपयोग कर सकते हैं।

आपकी समस्या के रूप में आप देख सकते हैं, Apache2 प्रतिक्रिया के माध्यम से प्रणाली समस्या की जड़ को इंगित करती है ([...] ब्ला ब्ला ब्ला 80 को संबोधित करने के लिए बाध्य नहीं कर सकती ):

(13)Permission denied: make_sock: could not bind to address [::]:80
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80

जब Apache2 http डेमॉन शुरू होता है, यह 80 बंदरगाह बाध्य करने के लिए के रूप में यह HTTP में उपयोग के लिए डिफ़ॉल्ट पोर्ट है की कोशिश करता है को देखने के , जो प्रणाली सौंपा बंदरगाहों के भीतर एक बंदरगाह है और इस तरह के रूप में यह केवल रूट द्वारा पहुँचा जा सकता।

आपने रूट कमांड के बिना एक विशिष्ट उपयोगकर्ता के रूप में स्टार्ट कमांड को निष्पादित किया और ऐसा करने में विफलता का कारण बना।

सरल शब्दों में:

आप:

हाय अपाचे २। मैं कोंगाथप हूं और आपको शुरू करने के लिए कह रहा हूं ( /etc/init.d/apache2 start)

Apache2:

ठीक है। मैं शुरू कर रहा हूं (वेब ​​सर्वर अपाचे 2 को शुरू करना)

सिस्टम, कृपया मुझे कनेक्शन के लिए उपयोग करने और सुनने के लिए पोर्ट 80 दें।

सिस्टम:

ठीक है। एक पल की जांच ...

आह ... क्षमा करें अपाचे 2 लेकिन मैं आपको 80 पोर्ट पर नहीं चलने दे सकता, यह व्यक्तिगत उपयोग के लिए है।

और इसे बाँधने के लिए आपके पास सही विशेषाधिकार नहीं हैं। ( Operation not permitted)

Apache2:

ओह, कोंगथाप मैं शुरू करने में विफल रहा, सिस्टम ने मुझे ऐसा नहीं करने दिया ( (13)Permission denied:[...])

निष्कर्ष

इस समस्या के मुख्य रूप से दो समाधान हैं:

  1. Apache2 HTTP डेमॉन को रूट विशेषाधिकारों के साथ चलाएं sudo:

    sudo service apache2 start
    

    या:

    sudo /etc/init.d/apache2 start
    
  2. डिफ़ॉल्ट पोर्ट 80को कुछ से अधिक से अधिक 1024, कहने 2000, 2500और 9000, आदि के लिए परिवर्तित करें । ऐसी स्थिति में होने पर चलाने के लिए एक विशिष्ट पोर्ट8080

    sudo vi /etc/apache2/ports.conf
    

    जोड़ें या नहीं, तो देखें:

    Listen 8080
    

    या अपनी पसंद के किसी अन्य पोर्ट जैसे पोर्ट > 1024और चयनित पोर्ट का उपयोग किसी अन्य प्रक्रिया द्वारा नहीं किया जाता है।


4
वास्तव में उत्कृष्ट व्याख्या !!!
कारीगर

महान व्याख्या, अच्छी तरह से समझा!
मिव्राबुआ टिम

महान व्याख्या। serviceपसंदीदा विधि का उपयोग क्यों कर रहा है ?
होलोते

वे अपस्टार्ट के निर्देश हैं, इस प्रश्न की जांच करें और askubuntu.com/q/19320/12218 पर उत्तर दें और अधिक विस्तृत दृश्य के लिए अपस्टार्ट कुकबुक upstart.ubuntu.com/cookbook देखें । ध्यान रखें कि ये सेवाएं (डेमॉन) हैंडलिंग (कब और कैसे शुरू करें) को संदर्भित करती हैं, यह सवाल और मेरा जवाब अनुमति की समस्याओं से भी निपटता है।
स्टेफ के

अनावश्यक शब्दशः। उत्तर समस्या को संबोधित नहीं करता है।
रेगी

7

Apache सर्वर को शुरू / बंद / पुनः आरंभ करने के आदेश निम्नलिखित हैं:

  • शुरू करना:

    sudo /etc/init.d/apache2 start
    
  • रोकने के लिए:

    sudo /etc/init.d/apache2 stop
    
  • पुनः शुरुआत करने के लिए:

    sudo /etc/init.d/apache2 restart
    

कंप्यूटर को पुनरारंभ करने के बाद, यह आपके द्वारा सुझाए गए सभी आदेशों के साथ ठीक लगता है, लेकिन मुझे यह संदेश पुनरारंभ करने के दौरान मिला है ... वेब सर्वर को अपाचे 2 एपाचे 2 को पुनरारंभ करना: सर्वर नाम के लिए 127.0.1.1 का उपयोग करते हुए सर्वर के पूरी तरह से योग्य डोमेन नाम को विश्वसनीय रूप से निर्धारित नहीं कर सका
आर्टिसन

1
@ कोंगाथप: यह एक त्रुटि नहीं है। मुझे यकीन है कि वेब उस संदेश के लिए स्पष्टीकरण से भरा है।
एंड्रिया कोरबेलिनी

हां, @AndreaCorbellini सही है। यह कोई त्रुटि नहीं है, यह कहता है क्योंकि आपके मेल में mail.google.com उदाहरण के लिए कोई पूर्ण रूप से योग्य डोमेन नाम नहीं है।
सौरव कुमार

4

कमांड जारी करके सेलिनक्स पोर्ट संदर्भ की जाँच करें

semanage port -l | grep http

यदि यह http_port_t सूची में मौजूद है तो यह ठीक है, अन्यथा अपने पोर्ट को इसमें जोड़ें

semanage port -a -t http_port_t -p tcp 80

या ऐसा कुछ जिसे आप असाइन करना चाहते हैं।


1

यह एक सेलिनक्स त्रुटि है, या कम से कम यह मेरे मामले में था। या तो बूलियन को बदलें, सेलेनक्स को अक्षम करें, या इसे अनुमति के लिए सेट करें setenforce 0

बूलियन परिवर्तन आपको चलाने की आवश्यकता होगी getenforce -a | grep http, और "http कनेक्ट नेटवर्क की अनुमति दें" की तलाश करें। इसे कॉपी करें और "जहां" सूची कहती है, उस पर "बदलें - बंद करें"


उबंटू AppArmor का चयन न करें SELinux, इसलिए आपका उत्तर ubuntu के लिए अप्रासंगिक है।
sgx1

एक सेंटोस उपयोगकर्ता के रूप में, जिसे यह समस्या मिली और यह आने वाला पहला स्टैकओवरफ्लो प्रश्न है, मैंने इस मुद्दे पर मेरी मदद के लिए सराहना की
कैकून
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.