Nginx কেন রুট হিসাবে প্রক্রিয়া শুরু করে?


39

আমি এনগিনেক্স সার্ভার ইনস্টল করেছি। আমি কেবল শ্রবণ পোর্টগুলি যাচাই করেছি এবং নিম্নলিখিতগুলি দেখেছি:

$ 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)
.
.
.

এবং আমি কেবল আগ্রহী কেন কেন 'www-ডেটা' ব্যবহারকারী হিসাবে এবং 'রুট ব্যবহারকারী' হিসাবে একটি হিসাবে চারটি এনজিনেক্স প্রক্রিয়া চালিত হয়?


সম্পর্কিত: সার্ভারফল্ট
ড্যান

পরিবর্তে আপনি অন্য প্রশ্ন জিজ্ঞাসা করতে পারেন?
ব্রায়াম

না কারণ এটি এই পোস্টের সাথে সম্পর্কিত। দয়া করে আপনার পরিবর্তনগুলি আবার করুন।
এরিক

উত্তর:


49

আপনি যে প্রক্রিয়াটি লক্ষ্য করেছেন সেটি হ'ল মাস্টার প্রক্রিয়া, এমন প্রক্রিয়া যা অন্য সমস্ত এনজিনেক্স প্রক্রিয়া শুরু করে। এই প্রক্রিয়াটি এনজিএক্স শুরু হওয়া টিআইপি স্ক্রিপ্ট দ্বারা শুরু হয়েছিল। এই প্রক্রিয়াটি মূল হিসাবে চলার কারণটি কেবল আপনি এটিকে মূল হিসাবে শুরু করেছিলেন! আপনি এটি অন্য ব্যবহারকারী হিসাবে শুরু করতে পারেন, তবে আপনাকে অবশ্যই নিশ্চিত করতে হবে যে সমস্ত সংস্থানীয় এনজিনেক্সের প্রয়োজনীয়তা এই ব্যবহারকারীর কাছে উপলব্ধ। এটি সাধারণত কমপক্ষে / var / log / nginx এবং / var / run / এর নীচে পিড-ফাইল হতে পারে।

সবচেয়ে গুরুত্বপূর্ণভাবে; কেবলমাত্র রুট প্রক্রিয়াগুলি 1024 এর নীচে পোর্টগুলি শুনতে পারে A একটি ওয়েবসার্ভার সাধারণত 80 এবং / অথবা 443 পোর্টে চলতে থাকে That এর অর্থ এটি রুট হিসাবে শুরু করা দরকার।

উপসংহারে, মূল দ্বারা চালিত হওয়া মাস্টার প্রক্রিয়া সম্পূর্ণ স্বাভাবিক এবং বেশিরভাগ ক্ষেত্রেই সাধারণ অপারেশনের জন্য প্রয়োজনীয়।

সম্পাদনা: মূল হিসাবে যে কোনও কিছু চালানো একটি অন্তর্ভুক্ত সুরক্ষা ঝুঁকি বহন করে। সাধারণত এই ধরণের সফ্টওয়্যার বিকাশকারীদের আক্রমণ আক্রমণকারীদের সম্পর্কে প্রচুর জ্ঞান থাকে এবং যতটা সম্ভব রুট হিসাবে যতটা সম্ভব কার্যকর করতে খুব যত্ন নেওয়া হয়। শেষ পর্যন্ত আপনাকে সহজেই বিশ্বাস করতে হবে যে সফ্টওয়্যারটি ভাল মানের।

আপনি যদি এখনও অস্বস্তি বোধ করেন তবে অন্য ব্যবহারকারী হিসাবে এনজিনেক্স চালানোর উপায় রয়েছে এবং এখনও 1024 এর নীচে বন্দর ব্যবহার করা যায় You 80 পোর্টে আগত সমস্ত ট্র্যাফিককে অন্য পোর্টে পুনঃনির্দেশ করতে আপনি আইপটিবল ব্যবহার করতে পারেন, উদাহরণস্বরূপ 8080, এবং এই পোর্টটিতে এনজিনেক্স শুনতে পাবেন।


তবে সিকিউরিটির কী? এই রুট প্রক্রিয়াটির মাধ্যমে কি কেউ সার্ভার হ্যাক করতে পারে?
এরিক

আমার উত্তর আপডেট।
arnefm

কিছু iptablesকরা সম্ভবত অতিমাত্রার চেয়ে বেশি। আমি @ স্ল্যামের উত্তরটি দেখতে চাই।
ব্র্যাচলে

জোলে উল্লেখ করেছেন এবং বেশিরভাগ জায়গায় পোর্টগুলি <1024 সম্ভব এবং এতে পুনঃনির্দেশগুলি iptablesজিনিসগুলিকে বিভ্রান্ত করতে পারে।
ম্যাট

17

বেশিরভাগ সার্ভারগুলিতে (অ্যাপাচি, এনগিনেক্স, ইত্যাদি) মূলের মালিকানাধীন একটি প্যারেন্ট প্রক্রিয়া থাকে যা কম শংসাপত্র প্রাপ্ত ব্যবহারকারী ব্যবহার করে কর্মী নোডের অনুলিপিগুলি কাঁটাচামচ করে। এই ক্ষেত্রে এটি 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 পদ্ধতিগুলি গ্রহণ করে যা তারা গ্রহণ করে beyond


5
"সুতরাং আপনি যদি কোনও সার্ভার শুনতে চান তবে 80 বা 443 বন্দরটি শুনতে পারা উচিত তবে আপনি যা করতে পারেন তা কিছুই নেই" " ফাইল ক্ষমতাগুলি কার্যকরভাবে কার্যকর করা CAP_NET_BIND_SERVICE এর সমস্ত ব্যবহারকারীকে দিতে পারে তবে আপনি সম্ভবত ব্যতিক্রমী হন তবে আপনি কেবল এটিই করতেন।
ব্র্যাচলে

6

অ্যাপ্লিকেশনটি প্যাকেজ করার উপায় এটি। বেশিরভাগ * নিক্সে ডিফল্ট সেটআপটি হ'ল একটি অননুমোদিত ব্যবহারকারী <1024 এবং ওয়েব সার্ভারগুলি 80 এবং 443 ব্যবহার করতে পারে port

লিনাক্স ২.২+, সোলারিস 10+ এবং ফ্রিবিএসডি এর সবগুলিই নন রুট ব্যবহারকারীদের কেবলমাত্র ডিফল্টরূপে নয়, 1024 এর চেয়ে কম পোর্টগুলিতে শুনতে দেয়। বেশিরভাগই এর ব্যবহারটিকে গ্রহণ করেছে rootতাই এটি ব্যবহারে রয়েছে।

সুবিধাপ্রাপ্ত বন্দরে বাঁধার অ্যাক্সেস ব্যতীত আপনার নিশ্চিত হওয়া দরকার যে এনজিঙ্ক্স চালিত ব্যবহারকারীর প্রয়োজনীয় সমস্ত ফাইলগুলিতে অ্যাক্সেস রয়েছে। আপনার সম্ভবত সম্ভবত এটির প্রয়োজন নেই তবে কেবল ফাইল / ডিরেক্টরিতে সঠিক অনুমতি সেট করা উচিত। আপনাকে এটিও পরীক্ষা করে দেখতে হবে যে স্টার্টআপ স্ক্রিপ্টগুলি ulimitপরিবর্তনের মতো ছিপছিপে কিছু না করে (যেমন মাইএসকিএল সর্বদা মনে হয়)।

লিনাক্স ক্ষমতা

setcapএবং getcapআপনাকে cap_net_bind_serviceএক্সিকিউটেবলের জন্য ক্ষমতা পরিবর্তন করতে বা দেখতে দেয় । বাইনারি কার্যকর করে এমন যে কোনও ব্যক্তির পক্ষে এটি কার্যকর হবে।

setcap cap_net_bind_service=+ep /usr/sbin/nginx

SELinux একটি ব্যবহারকারী পর্যায়ে কনফিগার করার ক্ষমতা এবং নিয়ন্ত্রণ করার ক্ষমতা সরবরাহ করে।

ফ্রিবিএসডি সিস্টেম সেটিংস

সংরক্ষিত বন্দর সেটিংস সিস্টেমটিতে বিশ্বব্যাপী

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

আমি প্রত্যেকে এলিসের উত্তর যুক্ত করতে চাই। যদিও এনজিনেক্স মূল হিসাবে শুরু করা হয়েছে, এটি আসলে মূল হিসাবে চলমান নয়। ব্যবহারকারী (এনগিনেক্স, www-ডেটা, ইত্যাদি) যা আসলে চলমান তা সাধারণত একটি সীমাবদ্ধ / জেলযুক্ত লগইন (আপনি এটি দিয়ে লগইন করতে পারবেন না, কেবলমাত্র কয়েকটি নির্দিষ্ট ফাইল অ্যাক্সেস করা যেতে পারে)। উইন্ডোজের বিপরীতে ওয়েব সার্ভারের জন্য লিনাক্স ব্যবহার করার অন্যতম উপায় এটি। এই প্রক্রিয়াটিকে বলা হয় fork( আপনি এই উইকিপিডিয়া নিবন্ধে আরও বিশদ জানতে পারেন ) এবং এটি ব্যবহার করে setuidএবং / অথবা setgid( যা উইকিপিডিয়া নিবন্ধেও ব্যাখ্যা করা হয়েছে)) ব্যবহারকারী এবং / অথবা গোষ্ঠী পরিবর্তন করতে to সুরক্ষিত সেটআপে, একজন হ্যাকার পিতামাতার প্রক্রিয়াটি অ্যাক্সেস করতে এবং রুট অ্যাকাউন্টটি ব্যবহার করতে সক্ষম হবে না। এটি সর্বদা সত্য নয় কারণ হ্যাকার রুট অ্যাক্সেস অর্জনের জন্য একধরণের শোষণকে কাজে লাগাতে পারে (এনজিনেক্স ১.৪.০ এ একটি দুর্বলতা ছিল এবং এর নীচে হ্যাকাররা রুট অ্যাক্সেস অর্জন করতে পেরেছিল)।


1
> উইন্ডোজের বিপরীতে ওয়েব সার্ভারের জন্য লিনাক্স ব্যবহার করার অন্যতম উপায় এটি। দুঃখিত, তবে আমি এই যুক্তিটি কিনছি না। উইন্ডোজ একইভাবে ইন্টারেক্টিভ লগন সহ পরিষেবা অ্যাকাউন্টগুলিকে অক্ষম করে এবং এসিএলগুলিকে সমর্থন করে। এটি বলেছিল, অন্যান্য কারণ রয়েছে যে অ্যাপাচি httpd এবং Nginx উইন্ডোজ (আইআইএস পছন্দসই) নিঃশেষিত পরিস্থিতিতে না চালানো উচিত, কিন্তু এটি এখানে বিন্দু পাশে।
বব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.