যদিও 80 এবং 443 সিস্টেম বন্দর, তবে কীভাবে বেশিরভাগ ওয়েব সার্ভারগুলি এগুলি আবদ্ধ করতে সক্ষম হয়?


18

80 পোর্টের সাথে বাঁধা এমন একটি ওয়েব-সার্ভিস চালানোর জন্য সাধারণত সুডোর সুবিধার দরকার হয় না। যেহেতু 80/443 বন্দরগুলি সিস্টেম বন্দর হয়, যার অর্থ তারা কেবল সুবিধাভোগী ব্যবহারকারীরা ব্যবহার করতে পারে, কীভাবে সেই পরিষেবাগুলি এখনও এই পোর্টগুলিতে বাঁধতে সক্ষম হয়?



1
"সাধারণত সুডোর সুবিধার দরকার হয় না" ভুল।
tedder42

উত্তর:


29

মূলত দুটি ভিন্ন পন্থা রয়েছে:

  1. প্রাথমিকভাবে রুট হিসাবে চলমান শুরু করুন, সুবিধাযুক্ত পোর্টে আবদ্ধ করুন এবং তারপরে একটি অনিবদ্ধ ব্যবহারকারীর কাছে নেমে যান।

  2. inetd, বা xinetd সুবিধাপ্রাপ্তভাবে চালিত হয়, এবং ওয়েব সার্ভারকে অনিচ্ছাকৃতভাবে চলমান অনুরোধগুলি ফরোয়ার্ড করে।


3
লিনাক্সে আপনি প্রোগ্রামে CAP_NET_BIND_SERVICE সক্ষমতা প্রয়োগ করতে পারেন বা আপনি কোনও সিস্টেমের পোর্টকে একটি নিয়মিত বন্দরে পুনর্নির্দেশের জন্য আইপটেবলগুলি ব্যবহার করতে পারেন।
ঝ্যান লিংস

10
এবং কেবল ওপি-তে স্পষ্ট করে বলার জন্য: বিকল্পটি # 1 কাজ করার কারণ হ'ল প্রক্রিয়াগুলি যখন সুযোগগুলি হ্রাস করে তখন তাদের ওপেন ফাইল বর্ণনাকারীদের ধরে রাখার অনুমতি দেওয়া হয় - এমনকি তাদের দ্বিতীয়বার খুলতে দেওয়া হবে না এমনকি যদি।
strugee


5

যেহেতু 80/443 পোর্টটি সিস্টেম বন্দর, এর অর্থ তারা কেবল সুবিধাভোগী ব্যবহারকারীরা ব্যবহার করতে পারবেন

আমি মনে করি আপনার এটি ভুল আছে। যে কেউ এই বন্দর ব্যবহার করতে পারেন। তাদের কাছে বাধ্যতামূলক একটি সুবিধাজনক ক্রিয়াকলাপ।

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

নেটকাট দিয়ে একটি বিক্ষোভ করব।

একটি সাধারণ ব্যবহারকারী হিসাবে, আমি 80 বন্দরটি আবদ্ধ করতে পারি না:

$ nc -l -p 80
Can't grab 0.0.0.0:80 with bind : Permission denied

আমি 8080 বন্দরে বাঁধতে পারি:

$ nc -l -p 8080

অন্যদিকে, অন্য টার্মিনালে আমি ৮০ বন্দরটিতে সংযোগ করতে এবং কিছু ডেটা প্রেরণ করতে পারি এবং এটি সবে শুরু করা সার্ভারের শেষে দেখতে পাওয়া যায়:

$ nc 127.0.0.1 8080 <<<"Hello world"

আমি যদি ৮০ বন্দরটিতে আবদ্ধ হতে চাই তবে আমার মূল হতে হবে:

$ sudo nc -l -p 80

বা আমি বাইনারিটিতে CAP_NET_BIND_SERVICEক্ষমতাটি অর্পণ করতে পারি nc:

$ cp `which nc` .
$ sudo setcap 'cap_net_bind_service=+ep' ./nc
$ ./nc -l -p 80

আরেকটি বিকল্প হ'ল সার্ভার প্রোগ্রামটি লিখতে হবে যা বলা হওয়ার পরে এটি listen()রুট সুবিধাগুলি বাদ দেয় । এটি একটি দুর্দান্ত সাধারণ সমাধান এবং আপনি এটি বেশিরভাগ ডেমন দিয়ে দেখতে পাবেন। উদাহরণস্বরূপ, অ্যাপাচি রুট হিসাবে আরম্ভ থেকে শুরু হয়, এবং তারপরে রুট সুবিধাগুলি ছাড়বে এবং ব্যবহারকারী www-dataবা পোর্ট 80 এর সাথে আবদ্ধ হওয়ার পরে অনুরূপ কিছু হয়ে যায় /etc/init.d/apache startroot রুট হিসাবে চলার চেষ্টা করুন এবং অ্যাপাচি সম্ভবত আরম্ভ করতে ব্যর্থ হবে।


প্রশ্নটি "এই পোর্টগুলিতে বাঁধাই" বলে। কেন আপনি মনে করেন যে সে ভুল করেছে?
বার্মার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.