नंगेक्स जड़ के रूप में प्रक्रिया क्यों शुरू करता है?


39

मैंने nginx सर्वर स्थापित किया है। मैंने सिर्फ सुनने वाले पोर्ट की जाँच की है और निम्नलिखित को देखा है:

$ sudo lsof -nP -i | grep LISTEN
sshd       614     root    3u  IPv4   7712      0t0  TCP *:22 (LISTEN)
nginx      822     root    7u  IPv4   8745      0t0  TCP *:80 (LISTEN)
nginx      827 www-data    7u  IPv4   8745      0t0  TCP *:80 (LISTEN)
nginx      828 www-data    7u  IPv4   8745      0t0  TCP *:80 (LISTEN)
nginx      829 www-data    7u  IPv4   8745      0t0  TCP *:80 (LISTEN)
nginx      830 www-data    7u  IPv4   8745      0t0  TCP *:80 (LISTEN)
.
.
.

और मुझे बस इस बात में दिलचस्पी है कि चार nginx प्रक्रियाएं 'www-data' उपयोगकर्ता के रूप में और एक 'रूट उपयोगकर्ता' के रूप में क्यों चलती हैं?



क्या आप इसके बजाय एक और सवाल पूछ सकते हैं।
ब्रिअम

नहीं, क्योंकि यह इस पद से संबंधित है। कृपया अपने परिवर्तन फिर से करें।
एरिक

जवाबों:


49

आपके द्वारा देखी गई प्रक्रिया मास्टर प्रक्रिया है, वह प्रक्रिया जो अन्य सभी नगीनेक्स प्रक्रियाओं को शुरू करती है। यह प्रक्रिया init स्क्रिप्ट द्वारा शुरू की जाती है जो कि nginx शुरू होती है। यह प्रक्रिया रूट के रूप में चल रही है इसका कारण यह है कि आपने इसे रूट के रूप में शुरू किया है! आप इसे किसी अन्य उपयोगकर्ता के रूप में शुरू कर सकते हैं, लेकिन आपको यह सुनिश्चित करना होगा कि इस उपयोगकर्ता के लिए सभी संसाधन nginx की जरूरतें उपलब्ध हैं। यह आमतौर पर कम से कम / var / log / nginx और pid-file के तहत / var / run / होगा।

सबसे महत्वपूर्ण बात; केवल रूट प्रक्रिया 1024 से नीचे के पोर्ट्स को सुन सकती है। एक वेबसर्वर आमतौर पर पोर्ट 80 और / या 443 पर चलता है। इसका मतलब है कि इसे रूट के रूप में शुरू करने की आवश्यकता है।

निष्कर्ष में, रूट द्वारा चलाई जा रही मास्टर प्रक्रिया पूरी तरह से सामान्य है और ज्यादातर मामलों में सामान्य ऑपरेशन के लिए आवश्यक है।

संपादित करें: रूट के रूप में कुछ भी चलाने से एक अंतर्निहित सुरक्षा जोखिम होता है। आम तौर पर इस तरह के सॉफ़्टवेयर के डेवलपर्स को अटैक वैक्टर के बारे में बहुत ज्ञान होता है और रूट के रूप में संभव के रूप में निष्पादित करने के लिए बहुत सावधानी बरती जाती है। अंत में आपको बस भरोसा करना होगा कि सॉफ्टवेयर अच्छी गुणवत्ता का है।

यदि आप अभी भी असहज महसूस करते हैं, तो एक और उपयोगकर्ता के रूप में नंगेक्स को चलाने का एक तरीका है और अभी भी 1024 से नीचे के पोर्ट का उपयोग करते हैं। आप पोर्ट 80 पर आने वाले सभी ट्रैफ़िक को पुनर्निर्देशित करने के लिए iptables का उपयोग दूसरे पोर्ट के लिए कर सकते हैं, उदाहरण के लिए 8080, और nginx को उस पोर्ट के बारे में सुनें।


लेकिन सुरक्षा का क्या? क्या कोई इस रूट प्रक्रिया के द्वारा सर्वर को हैक कर सकता है?
एरिक

मेरे उत्तर को अपडेट किया।
arnefm

कुछ करना iptablesशायद ओवरकिल है। मुझे @ slm का उत्तर दिखाई देगा।
ब्राचली

पोर्ट्स <1024 अधिकांश स्थानों पर संभव हैं क्योंकि जोएल ने उल्लेख किया है और iptablesचीजों को भ्रमित कर सकता है।
मैट

17

अधिकांश सर्वर (Apache, Nginx, इत्यादि) में मूल प्रक्रिया होती है जो रूट के स्वामित्व में होती है जो तब कम क्रेडेंशियल उपयोगकर्ता का उपयोग करके कार्यकर्ता नोड्स की प्रतियां बनाती है। इस मामले में यह है www-data

उदाहरण

यदि आप nginxफ़ाइल के विन्यास पर एक नज़र डालते हैं /etc/nginx/nginx.conf, तो आप लाइनों को इस तरह नोटिस करेंगे:

user nginx;
worker_processes 2; #change to the number of your CPUs/Cores
worker_rlimit_nofile 8192;

अधिकांश सर्वरों के पास इसके समान विकल्प होते हैं जो उपयोगकर्ता को दास नोड्स के रूप में और उनमें से कितने को चलाने के लिए निर्धारित करते हैं।

सुरक्षा

रूट एक्सेस की एक्सपोज़िंग सेवाओं को अक्सर संभावित असुरक्षा के रूप में उल्लेख किया जाता है। हालाँकि, आपको अक्सर 1-1024 से लेकर बंदरगाहों तक बांधने के लिए रूट होना पड़ता है, इसलिए वास्तव में कुछ भी नहीं है यदि आप चाहते हैं कि सर्वर को पोर्ट 80 या 443 पर सुन रहे हों।

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

खुद से अपाचे और नेग्नेक्स, आम तौर पर GET / POST तरीकों से परे किसी भी इनपुट को स्वीकार नहीं करते हैं जो वे स्वीकार करते हैं।


5
"तो वास्तव में ऐसा कुछ नहीं है जो आप कर सकते हैं यदि आप चाहते हैं कि कोई सर्वर कहे जाने वाले पोर्ट्स 80 या 443 पर सुन रहा हो।" फ़ाइल क्षमताएं वास्तव में एक निष्पादन योग्य CAP_NET_BIND_SERVICE के सभी उपयोगकर्ताओं को दे सकती हैं, लेकिन आप शायद केवल यही करेंगे कि यदि आप असाधारण रूप से पागल थे।
ब्राचली

6

यह जिस तरह से एप्लिकेशन को पैक किया जाता है। अधिकांश * निक्स पर डिफ़ॉल्ट सेटअप एक गैर विशेषाधिकार प्राप्त उपयोगकर्ता है जो पोर्ट <1024 पर नहीं सुन सकता है और वेब सर्वर 80 और 443 का उपयोग करते हैं।

लिनक्स 2.2+, सोलारिस 10+ और फ्रीबीएसडी सभी गैर-रूट उपयोगकर्ताओं को 1024 से कम बंदरगाहों पर सुनने की अनुमति देते हैं, हालांकि डिफ़ॉल्ट रूप से नहीं। अधिकांश ने इसका उपयोग स्वीकार कर लिया है rootइसलिए यह उपयोग में बना हुआ है।

विशेषाधिकार प्राप्त पोर्ट से बांधने के लिए एक्सेस के अलावा, आपको यह सुनिश्चित करने की आवश्यकता है कि उपयोगकर्ता जो नग्नेक्स चला रहा है उसकी सभी फाइलों तक पहुंच है। आपको शायद इस तक जाने की ज़रूरत नहीं है लेकिन बस फाइलों / निर्देशिकाओं पर सही अनुमति दें। आपको यह भी जाँचने की ज़रूरत है कि स्टार्टअप स्क्रिप्ट में ulimitबदलाव (जैसे mysql हमेशा लगता है) की तरह कुछ भी डरपोक नहीं है ।

लिनक्स क्षमताओं

setcapऔर getcapआपको cap_net_bind_serviceएक निष्पादन योग्य के लिए क्षमता बदलने या देखने दें । यह किसी के लिए भी प्रभावी होगा जो बाइनरी निष्पादित करता है।

setcap cap_net_bind_service=+ep /usr/sbin/nginx

SELinux एक उपयोगकर्ता स्तर पर क्षमताओं को कॉन्फ़िगर और नियंत्रित करने की क्षमता प्रदान करता है।

Freebsd सिस्टम सेटिंग्स

आरक्षित पोर्ट सेटिंग्स सिस्टम के लिए वैश्विक हैं

sysctl net.inet.ip.portrange.reservedhigh=0
sysctl net.inet.ip.portrange.reservedlow=0

सोलारिस प्रिविलेज

सोलारिस उपयोगकर्ता स्तर पर विशेषाधिकारों का ठीक-ठाक नियंत्रण प्रदान करता है। ये अपाचे के लिए विशेषाधिकार हैं, लेकिन वे नगनेक्स के लिए भी काम करने की संभावना है।

/usr/sbin/usermod -K defaultpriv=basic,proc_exec,proc_fork,net_privaddr nginx

2

मैं हर किसी के उत्तर जोड़ना चाहता हूं। हालांकि नंगेक्स को जड़ के रूप में शुरू किया गया है, यह वास्तव में जड़ के रूप में नहीं चल रहा है। उपयोगकर्ता (nginx, www-data, आदि) कि यह वास्तव में चल रहा है जैसा कि आमतौर पर एक प्रतिबंधित / जेल्ड लॉगिन है (आप इसके साथ लॉगिन नहीं कर सकते हैं, केवल कुछ फ़ाइलों तक पहुँचा जा सकता है)। यह विंडोज के विपरीत वेब सर्वर के लिए लिनक्स का उपयोग करने के पेशेवरों में से एक है। इस प्रक्रिया को एक कहा जाता है fork( आप इस विकिपीडिया लेख में अधिक विवरण पा सकते हैं ) और इसका उपयोग setuidऔर / या setgid( जिसे विकिपीडिया लेख में भी समझाया गया है)) उपयोगकर्ता और / या समूह को बदलने के लिए। एक सुरक्षित सेटअप में, एक हैकर मूल प्रक्रिया तक पहुंचने और रूट खाते का उपयोग करने में सक्षम नहीं होगा। यह हमेशा सही नहीं होता क्योंकि एक हैकर रूट एक्सेस हासिल करने के लिए किसी तरह के शोषण का इस्तेमाल कर सकता है (nginx 1.4.0 में एक भेद्यता थी और जिसके नीचे हैकर्स को रूट एक्सेस हासिल करने की अनुमति दी गई थी)।


1
> यह विंडोज के विपरीत वेब सर्वर के लिए लिनक्स का उपयोग करने के पेशेवरों में से एक है। क्षमा करें, लेकिन मैं उस तर्क को नहीं खरीदता। इसी तरह विंडोज इंटरएक्टिव लॉगऑन अक्षम के साथ सेवा खातों की अनुमति देता है, और एसीएल का भी समर्थन करता है। उस ने कहा, अपाचे httpd और Nginx को Windows (IIS पसंदीदा) पर नहीं चलाया जाना चाहिए, क्योंकि यह परिस्थितियों को समाप्त करने के बिना है, लेकिन यहां बिंदु के बगल में है।
बॉब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.