লগইন এবং সু ইন্টার্নাল


11

আমি লিনাক্সে ব্যবহারকারীর অনুমতি কীভাবে কাজ করে তা বোঝার চেষ্টা করছি। কার্নেল বুট হয় এবং initরুট হিসাবে শুরু হয়, তাই না? ইনিস তারপর স্টার্টআপ স্ক্রিপ্টগুলি চালায় এবং getty( agetty) আবারও মূল হিসাবে চালায় । অ্যাজিটি কেবল ব্যবহারকারীর নাম পড়ে এবং loginচালাচ্ছে, এখনও রুট হিসাবে, আমি মনে করি। আকর্ষণীয় কিছুই। তবে লগইন কী করে ? "এটি লগ ইন করার চেষ্টা করে" এর চেয়ে ভাল কিছু আমি খুঁজে পাচ্ছিলাম না। মনে করুন লগইনটি পাসওয়ার্ডটি মেলে (এবং আমরা সাধারণ ব্যবহারকারী হিসাবে লগ ইন করার চেষ্টা করছি), এটি কীভাবে ব্যবহারকারীর আইডি পরিবর্তন করে? আমি ভেবেছিলাম যে এর জন্য সিস্টেম কল করা উচিত তবে আমি এটি খুঁজে পাইনি (সম্ভবত আমি কেবল অন্ধ?)


এছাড়াও, সম্পর্কে susu'সেটুইড' বিট সেট আছে তাই যখন আমরা এটি চালাই, এটি সর্বদা মূল হিসাবে চালিত হয়। তবে আমরা যখন এটি সাধারণ ব্যবহারকারী হিসাবে লগ ইন করতে বলি তখন এটির পুনরায় ব্যবহারকারীর আইডি পরিবর্তন করা দরকার। আমি কি সঠিকভাবে বুঝতে পারি যে একই "যাদু" ঘটেছিল suএবং loginযখন তাদের ব্যবহারকারীর পরিবর্তন করা দরকার? যদি তা হয় তবে দুটি ভিন্ন প্রোগ্রাম কেন? লগইন চালানোর সময় কি আরও কোনও ধরণের গুরুতর ব্যবসা হচ্ছে?

উত্তর:


9

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

  • login: একটি পাঠ্য টার্মিনাল ইনপুট পড়ুন
  • su: ইতিমধ্যে লগ-ইন করা ব্যবহারকারীদের দ্বারা অনুরোধ করা হয়েছে, এর কমান্ড-লাইন আর্গুমেন্ট থেকে বেশিরভাগ ডেটা প্রাপ্ত হয়, টার্মিনাল থেকে প্রমাণীকরণের ডেটা (পাসওয়ার্ড)
  • gksu: এর মতো su, তবে এক্সে প্রমাণীকরণের ডেটা পড়ে
  • rlogind: রলগিন প্রোটোকলের মাধ্যমে একটি টিসিপি সংযোগের মাধ্যমে ইনপুট প্রাপ্ত করে
  • sshd: এসএসএইচ প্রোটোকলের মাধ্যমে একটি টিসিপি সংযোগের মাধ্যমে ইনপুট প্রাপ্ত করে
  • এক্স ডিসপ্লে ম্যানেজার (এক্সডিএম, জিডিএম, কেডিএম,…): এর মতো login, তবে এক্স ডিসপ্লেতে ইনপুট পড়ুন

এই প্রোগ্রামগুলি একইভাবে পরিচালিত হয়।

  1. প্রথম অংশটি প্রমাণীকরণ : প্রোগ্রামটি ব্যবহারকারীর কাছ থেকে কিছু ইনপুট পড়ে এবং ব্যবহারকারী লগ ইন করার জন্য অনুমোদিত কিনা তা সিদ্ধান্ত নেয় The ব্যবহারকারী যে পাসওয়ার্ডটি টাইপ করেছেন তা হ'ল ডেটাবেজে। তবে আরও অনেক সম্ভাবনা রয়েছে (এককালীন পাসওয়ার্ড, বায়োমেট্রিক প্রমাণীকরণ, অনুমোদন স্থানান্তর,…)।

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

  3. লগইন প্রোগ্রামটি অ্যাকাউন্ট সীমাবদ্ধতাগুলিও পরীক্ষা করতে পারে। উদাহরণস্বরূপ, এটি কোনও লগইন সময় বা সর্বাধিক সংখ্যক লগ-ইন ব্যবহারকারী প্রয়োগ করতে পারে বা নির্দিষ্ট সংযোগগুলিতে নির্দিষ্ট ব্যবহারকারীদের প্রত্যাখ্যান করতে পারে।

  4. অবশেষে লগইন প্রোগ্রাম ব্যবহারকারীর সেশন সেট আপ করে। বেশ কয়েকটি সাবসটপ রয়েছে:

    1. অনুমোদনের ক্ষেত্রে কী সিদ্ধান্ত নেওয়া হয়েছিল সেটির জন্য প্রক্রিয়াটির অনুমতিগুলি সেট করুন: ব্যবহারকারী, গোষ্ঠী, সীমাবদ্ধতা ... আপনি এখানে এই সাবটপটির একটি সাধারণ উদাহরণ দেখতে পারেন (এটি কেবল ব্যবহারকারী এবং গোষ্ঠী পরিচালনা করে)। মূল ধারণাটি হ'ল লগইন প্রোগ্রামটি এখনও এই মুহুর্তে মূল হিসাবে চলছে, সুতরাং এতে সর্বাধিক সুযোগ-সুবিধা রয়েছে; এটি প্রথমে রুট ব্যবহারকারী হওয়া ব্যতীত অন্য সমস্ত সুযোগ-সুবিধাগুলি অপসারণ করে এবং শেষ অবধি setuidসর্বশেষে কিন্তু সর্বনিম্ন সুযোগ-সুবিধাকে বাদ দেয় না।
    2. সম্ভবত ব্যবহারকারীর হোম ডিরেক্টরি মাউন্ট করুন, একটি "আপনার মেল আছে" বার্তা প্রদর্শন করুন, ইত্যাদি
    3. কিছু প্রোগ্রামকে ব্যবহারকারী হিসাবে ডেকে আনুন, সাধারণত ব্যবহারকারীর শেলটি ( loginএবং su, এবং sshdযদি কোনও কমান্ড নির্দিষ্ট করা হয়নি; এক্স ডিসপ্লে ম্যানেজার একটি এক্স সেশন ম্যানেজার বা উইন্ডো ম্যানেজারকে আহ্বান করে)।

আজকাল বেশিরভাগ ইউনিসেস লগইন পরিষেবাদি পরিচালনার অভিন্ন পদ্ধতি সরবরাহ করার জন্য পিএএম ( প্লাগেবল প্রমাণীকরণ মডিউল) ব্যবহার করে । পিএএম তার কার্যকারিতাটি 4 টি ভাগে বিভক্ত করে : "প্রমাণীকরণ" প্রমাণীকরণ (1 টি উপরে) এবং অনুমোদন (উপরে 2) উভয়কে অন্তর্ভুক্ত করে; "অ্যাকাউন্ট" এবং "সেশন" উপরের 3 এবং 4 হিসাবে রয়েছে; এবং "পাসওয়ার্ড" রয়েছে, যা লগইনগুলির জন্য ব্যবহৃত হয় না তবে প্রমাণীকরণ টোকেনগুলি আপডেট করতে (যেমন পাসওয়ার্ডগুলি)।


4

আপনি যে সিস্টেমে কল খুঁজছেন সেগুলিকে এই জাতীয় জিনিস বলা হয় setuidএবং seteuidযদিও হেমের পুরো পরিবারটি নির্ভর করে আপনি ব্যবহারকারীর পরিচয়ের বিভিন্ন রূপগুলি পরিবর্তনের চেষ্টা করছেন তার উপর নির্ভর করে।

setgidগ্রুপটি পরিবর্তনের জন্য সমান্তরাল কলগুলিও রয়েছে যে প্রক্রিয়াটি চলে।


4

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

আসলে রুট সুবিধাগুলি বাদ দেওয়া মোটামুটি তুচ্ছ। পসিক্স সংজ্ঞা দেয় setuid()এবং setgid()ফাংশন, যা আপনার ব্যবহারকারী এবং গ্রুপ আইডি যথাক্রমে পরিবর্তন করে (বাস্তব এবং কার্যকর, যদি আপনি মূল হিসাবে শুরু করছেন)। loginএগুলি উভয়কেই কল করে পাশাপাশি আপনার initgroups()যে কোনও পরিপূরক গোষ্ঠী সেটআপ করার setgidজন্য (যেহেতু কেবলমাত্র আপনার প্রাথমিক গ্রুপ আইডি সেট করার জন্য)

স্বাভাবিকভাবেই এটি কার্নেল যা প্রকৃতপক্ষে 'ইউআইডি / জিআইডি' প্রক্রিয়াটি পরিবর্তন করে। আমি কীভাবে লিনাক্স কার্নেল সিস্টেম কল প্রয়োগ করতে পারি? সিস্কেলগুলি সম্পর্কে প্রচুর ব্যাখ্যা দেয়; আমার কার্নেলের উত্সে:

#define __NR_setgid 144
__SYSCALL(__NR_setgid, sys_setgid)
#define __NR_setuid 146
__SYSCALL(__NR_setuid, sys_setuid)

সুতরাং 144 এবং 146 হ'ল আমার মেশিনে functions ফাংশনের জন্য সিস্টেম কল নম্বর


suউত্সটি কী করে তা দেখার জন্য আমি চেক করি নি , তবে আমার সন্দেহ হয় যে এটি exec()একই পদ্ধতি ব্যবহার করে শেলটি লাগানোর আগেও মূল সুযোগগুলি বাদ দেয় suspect

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