मैं पोर्ट 80 को कैसे खोल सकता हूं ताकि एक गैर-रूट प्रक्रिया इसे बांध सके?


46

मैं अपने मैक पर एक गैर-रूट प्रक्रिया के रूप में एक वेब सर्वर चलाना चाहता हूं। आम तौर पर केवल रूट प्रक्रियाएं 80 पोर्ट (या 1024 से नीचे किसी भी पोर्ट) के लिए बाध्य हो सकती हैं।

क्या मैं पोर्ट 80 को विशेष रूप से खोल सकता हूं ताकि गैर-रूट प्रक्रिया उस पर सुन सकें?


संबंधित: link1 , link2
नाथन Farrington

और अधिक की तरह unix.stackexchange.com प्रश्न, है ना?
फ़िलिप बार्टुज़ि

1
क्यों यूनिक्स अगर यह एक macos प्रणाली पर है?
नेहेड

जवाबों:


27

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

इसे पूरा करने के दो सामान्य तरीके हैं, और जो आप चुनते हैं वह इस बात पर निर्भर करेगा कि आप प्रतिबंध के आसपास काम करने की कोशिश क्यों कर रहे हैं:

प्वाइंट पोर्ट 80 से दूसरे पोर्ट, जैसे 8080

8080 पोर्ट या अपने चयन के किसी भी पोर्ट को पोर्ट 80 ट्रैफ़िक पास करने के लिए अपनी मशीन को पुन: कॉन्फ़िगर करके, फिर आप उपयोगकर्ता स्पेस सर्वर को उस क्षेत्र में रूट विशेषाधिकार पोर्ट प्राप्त करने की अनुमति दे सकते हैं, जिनकी उन्हें एक्सेस दी गई है।

प्रक्रिया सीधी है:

चरण 1: वर्तमान फ़ायरवॉल नियम देखें।

sudo ipfw show

चरण 2: पोर्ट फॉरवर्डिंग नियम (80 से 8080) जोड़ें

sudo ipfw add 100 fwd 127.0.0.1,8080 tcp from any to any 80 in

यदि आप अपने फ़ायरवॉल नियम को हटाना चाहते हैं:

सूदो ipfw फ्लश

( स्रोत )

यह एक अस्थायी परिवर्तन है, और जब आप रिबूट करते हैं, या जब वह अंतिम पंक्ति में संकेत दिया जाता है तो फ्लश कर देगा।

आप परिवर्तन को स्थायी कर सकते हैं, या आप अपने सर्वर को शुरू करने से पहले एक स्टार्टअप लाइन के रूप में कमांड जोड़ सकते हैं, जो संभवतः सुरक्षा के दृष्टिकोण से सुरक्षित है।

प्रामाणिक का उपयोग करें

Authbind को विशेष रूप से एक प्रोग्राम को पूर्ण रूट एक्सेस दिए बिना निचले स्तर के बंदरगाहों तक पहुंच की अनुमति देने के लिए डिज़ाइन किया गया था।

एक OS X पोर्ट है:

https://github.com/Castaglia/MacOSX-authbind

यह अभी भी आईपीवी 4 ट्रैफिक तक सीमित हो सकता है, हालांकि, आपको यह पता लगाने के लिए कुछ अतिरिक्त जांच करनी पड़ सकती है कि क्या यह आपकी आवश्यकताओं को पूरा करता है।


LOVE MacOSX-difbind ... यह आपको उदाहरण के लिए, पोर्ट 80 पर एक वेब सर्वर को "नियमित प्रशासक" के रूप में चलाने देता है। यानी अपने में launchd .plist... ` "ProgramArguments": [ "path/to/authbind", "/usr/bin/php", "-c", "/www/.router.ini", "-S", "0.0.0.0:80", "-t", "/www", "/www/.router.php"]वाह!
एलेक्स ग्रे

13
ओएस एक्स योसेमाइट निकालता है ipfwयह सार एक वैकल्पिक समाधान का उपयोग करके बताता है pf
lyschoening

ध्यान दें कि अप्रयुक्त पोर्ट पर ट्रैफ़िक पुनर्निर्देशित करने से असुरक्षित हो सकता है यदि आप साझा वातावरण पर हैं; आपके प्रोग्राम के होने से पहले या यदि आपका प्रोग्राम त्वरित पुनरारंभ के लिए भी पोर्ट को अनबाइंड करता है, तो एक और प्रक्रिया उस पोर्ट से जुड़ सकती है।
रयान

ऑर्टबाइंड ist वास्तव में एक महान समाधान है, धन्यवाद!
फेवो

7

आप ncatकिसी अन्य पोर्ट पर चलने वाले वेब सर्वर से ट्रैफ़िक को अग्रेषित करने के लिए उपयोग कर सकते हैं :

sudo ncat -l -p 80 -c ' ncat -l -p 1234'

यह पोर्ट 80 पर लोकलहोस्ट: 1234 पर यातायात को आगे बढ़ाएगा। यह एक कीचड़ का एक सा है, हालांकि, मैं इसे त्वरित परीक्षण से परे कहीं भी उपयोग नहीं करेगा और निश्चित रूप से उत्पादन में नहीं।

ध्यान दें कि यह एक गैर-रूट प्रक्रिया को इसे बांधने की अनुमति नहीं देगा, लेकिन एक बंदरगाह को चुनने से प्रक्रिया इस उदाहरण में, 1234 से बांध सकती है, ऐसा लगेगा कि यह पोर्ट 80 के लिए बाध्य है। यह बराबर कर रहा है फायरवॉल के साथ पोर्ट 80 को पोर्ट 8034 पर अग्रेषित करना, लेकिन कहीं अधिक अस्थायी आधार पर।


2
यह एक अच्छा वर्कअराउंड है। एनबी। जिसके ncatसाथ nmapमैक पोर्ट के माध्यम से स्थापित किया जा सकता है sudo port install nmap। MacPorts स्वयं macports.org/install.php से स्थापित किया जा सकता है ।
विलियम डेनिस

यह सिर्फ मुझे बाँध देता है: उपयोग त्रुटियों में पहले से ही पता।
मैट जॉइनर

यहाँ भी - काम नहीं किया। इसने यह चाल चली
सेबस्टियन जे।

2

आप पोर्ट फॉरवर्डिंग करने के लिए ssh का भी उपयोग कर सकते हैं। इसलिए यदि आपके पास 8080 पर सर्वर चल रहा है, तो आप पोर्ट 80 से ट्रैफ़िक को अग्रेषित कर सकते हैं। यहाँ एक स्क्रिप्ट है जिसका मैं उपयोग करता हूँ, जो मूल अपाचे को रोकती है यदि वह चल रही है और आगे की ट्रैफ़िक:

forward8080to80.command:

echo "You may close this terminal and the forwarding will continue."
echo "To stop, kill the ssh process found by `sudo lsof -i ':80' | grep LISTEN`"
sudo apachectl stop
sudo ssh user@127.0.0.1 -L 80:127.0.0.1:8080

Ssh पोर्ट फ़ॉरवर्डिंग काफी कम प्रदर्शन हो सकता है, और सुरक्षा सुविधाएँ स्थानीय-> स्थानीय वातावरण में बहुत मायने नहीं रखती हैं। पोर्ट अग्रेषण में निर्मित ऑक्सक्स का उपयोग करना बेहतर है, या एनसीएटी जैसा कुछ।
शायन

-3

आपको जो करने में सक्षम होना चाहिए वह आपके राउटर पर पोर्ट 80 खोलना है और इसे अपने वेब सर्वर के स्थानीय आईपी पते पर इंगित करना है। फिर अपने मैक पर, सिस्टम वरीयताएँ> साझाकरण फलक से वेब शेयरिंग सक्षम करें और इसे अपने चयन की निर्देशिका को इंगित करें। 10.6 सर्वर पर स्विच करने तक यह मेरे लिए अतीत में काम कर चुका है।


1
मैं इसे अपनी खुद की देव मशीन के लिए एक समाधान के रूप में देख रहा हूं। चूँकि मुझे उन स्थानों पर काम करना है जहाँ मुझे राउटर पर नियंत्रण नहीं है, यह समाधान मेरे लिए काम नहीं कर सका। मुझे संदेह है कि यह काम करना चाहिए यदि आप एक सर्वर स्थापित कर रहे हैं और किसी कारण से रूट एक्सेस नहीं है।
अवनर १

तो, बस स्पष्ट होने के लिए, आप विभिन्न क्लाइंट साइटों पर एक वेब सर्वर स्थापित करने की कोशिश कर रहे हैं, लेकिन पोर्ट 80 खोलने की सुविधा नहीं है? यदि आपके पास पहुंच नहीं है, तो आप राउटर पर पोर्ट कैसे खोलेंगे? क्या मैं सही तरीके से समझ रहा हूं या मैं आधार से दूर हूं?
मैट लव

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